Chip,
Я знаю, не используя Руби, но предполагая, что подсчет очков у Велизария в порядке, я бы вместо этого использовал ListContourPlot
от Mathematica, так как это намного проще для понимания и дает более ясную картину.
(* Read in data, the web address can be specified *)
a = Import[<url of cpid data>, "Table"];
Import
оставляет в теге pre
в первом подсписке и в качестве отдельного подсписка элементов в конце это удаляет его
dat = a[[ ;; -2]][[All, -72;; ]];
сначала взяв все элементы, кроме последнего, а затем взяв последние 72 элемента каждого из оставшихся подсписков.
ListContourPlot
ожидает список точек вида {{x, y, f}, ...}
, поэтому нам нужно преобразовать dat
в эту форму, как объяснено в другом месте :
pts =Flatten[
Table[ {
(rr =Log[.025 + (.58 - .25)/64 r]) Cos@(tt = t 5 Degree), (* x-coord *)
rr Sin@tt, (* y-coord *)
dat[[r,t]] (* function value *)
},
{r, 7, 64}, {t, 1, 72}
],
1 ]
, а затем построить их
ListContourPlot[pts,
ColorFunctionScaling -> False,
ColorFunction -> (ColorData["CMYKColors"][(# - .000007)/(.0003 - 0.000007)]&)
]
Это дает:
, который можно исправить, исправив отсечение и масштабирование ColorFunction
. Кроме того, с некоторыми работами могут быть добавлены радиальные контуры.