2016-11-07 2 views
1

This работает только для меня, если я не устанавливаю yrange.gnuplot - использование yrange в круговых диаграммах?

Скажем, у меня есть sample-time-overview.csv как

,avg,std,,,TProc,2267.5202096317,4573.0532262204 
TParse,4.9922379603,138.6595434301,,,,, 
THash,86.4020623229,548.8593468508,,,,, 
TEnq,1.1181869688,2.0684998031,,,,, 
TInQ,1482.2243626062,4257.8024051927,,,,, 
TSend,2253.1871161473,4514.2823125251,,,,, 
TWait,1.7578696884,43.1050730747,,,,, 
TAnsw,14.3452407932,201.9216484892,,,,, 
TProcAll,2269.2780793201,4573.3927526674,,,,, 
TTotal,3853.3679320114,7095.0740689587,,,,, 

, где я не заинтересован в первых или последних двух строках.

В основном копировать-вставить код из ссылки выше с незначительными адаптируя:

#!/usr/bin/gnuplot 
reset 

filename = "sample-time-overview" 

set terminal pngcairo size 500,500 enhanced font 'Verdana,10' 
set output filename."_piechart.png" 
#set title "" 

unset border 
unset tics 
set xrange[-1:1.5] 
#uncommend yrange and the plotdisappears 
#set yrange[-1.25:1.25] 

centerX=0 
centerY=0 
radius=1 

set datafile separator ',' 
set key off 

set style fill solid 1 

stats filename.".csv" u 2 every ::1::7 noout prefix "A" 

angle(x)=x*360/A_sum 
percentage(x)=x*100/A_sum 

pos=0.0 
colour=0 

yi=0 

plot filename.".csv" u (centerX):(centerY):(radius):(pos):(pos=pos+angle($2)):(colour=colour+1) every::1::7 w circle lc var 

system(sprintf("display %s_piechart.png", filename)) 

это заканчивает тем, как

enter image description here

Я раскомментировать YRange и комментировать unset border и это выглядит например:

enter image description here

, который очень раздражает, потому что, когда я затем попытаться добавить ярлыки ...

plot filename.".csv" u (centerX):(centerY):(radius):(pos):(pos=pos+angle($2)):(colour=colour+1) every::1::7 w circle lc var,\ 
        "" u (1.5):(yi=yi+0.5/A_records):($1) every::1::7 w labels 

это будет происходить:

enter image description here

Что я подозреваю, что это из-за недостающего YRange (потому что другой чем это, код не сильно отличается от того, что было опубликовано в связанном ответе).

Как я могу получить чертову работу?

ответ

3

Лучше всего настроить параметры графика непосредственно перед командой plot. Другие подпрограммы (например, stats и, следовательно, A_sum) будут зависеть от этих свойств (например, set yrange). Вот почему круговая диаграмма исчезает.

Также не забудьте иметь одинаковые размеры для осей x и y (используйте set size ratio -1). Если нет, окружность будет нарисована относительно размера холста, а не по отношению к осям. Круговая диаграмма будет выглядеть иначе (если не указано соответствующее значение yrange).

С некоторыми модификациями, я получаю эту схему: pie-chart

Это код:

filename = 'sample-time-overview' 

rowi = 1 
rowf = 7 

# obtain sum(column(2)) from rows 1 to 7 
set datafile separator ',' 
stats filename.'.csv' u 2 every ::rowi::rowf noout prefix "A" 

angle(x)=x*360/A_sum 
percentage(x)=x*100/A_sum 

# circumference dimensions for pie-chart 
centerX=0 
centerY=0 
radius=1 

# label positions 
yposmin = 0.0 
yposmax = 0.95*radius 
xpos = 1.5*radius 
ypos(i) = yposmax - i*(yposmax-yposmin)/(1.0*rowf-rowi) 

#------------------------------------------------------------------- 
# now we can configure the canvas 
set style fill solid 1  # filled pie-chart 
unset key     # no automatic labels 
unset tics     # remove tics 
unset border    # remove borders; if some label is missing, comment to see what is happening 

set size ratio -1    # equal scale length 
set xrange [-radius:2*radius] # [-1:2] leaves place for labels 
set yrange [-radius:radius] # [-1:1] 

#------------------------------------------------------------------- 
pos = 0    # init angle 
colour = 0   # init colour 

# 1st line: plot pie-chart 
# 2nd line: draw colored boxes at (xpos):(ypos) 
# 3rd line: place labels at (xpos+offset):(ypos) 
plot filename.'.csv' u (centerX):(centerY):(radius):(pos):(pos=pos+angle($2)):(colour=colour+1) every ::rowi::rowf w circle lc var,\ 
    for [i=0:rowf-rowi] '+' u (xpos):(ypos(i)) w p pt 5 ps 4 lc i+1,\ 
    for [i=0:rowf-rowi] filename.'.csv' u (xpos):(ypos(i)):(sprintf('%05.2f%% %s', percentage($2), stringcolumn(1))) every ::i+1::i+1 w labels left offset 3,0 
+0

Участок исчезает во второй картине, потому что установка YRange перед Статистика команды оставляет только строки TEnq для команда статистики. Тогда A_sum = 1.118, и все углы слишком велики для построения графика. Сюжет разрезается на третьем рисунке, потому что он явно не задал значение yrange, поэтому он был автомасштабирован для графика меток. Это автомасштабирование начинается с y = 0. Ни исчезновение, ни вырезание не вызваны не установкой отношения размеров. Вы исправили фиксированный график, переместив 'set yrange'. Кстати, мне нравится сюжет, особенно «левый» в «сюжете с ярлыками слева». – maij

+0

@vagoberto Awesome, спасибо большое. Могу ли я каким-либо образом конкатенировать метки, взятые из файла, с процентом или мне нужно построить другой набор меток? – User1291

+1

@ User1291 Отредактировал мой ответ. Вы можете объединить метки с помощью 'sprintf'. Например: 'sprintf ('% 05.2f %%% s', процент ($ 2), stringcolumn (1))' будет печатать что-то вроде '00.13% TParse'. Формат '% 05.2f' печатает число с 2 десятичными знаками и 5 пробелами. Формат '%%' печатает символ'% 'и'% s' печатает строку. – vagoberto

0

Установка yrange также влияет на выполнение команды stats. Поэтому вам следует попробовать set yrange[-1.25:1.25]после команды stats, а не раньше.

PS:

Plotting этикетки с

plot filename.'.csv' u (1.5):(yi=yi+0.5/A_records):($1) every::1::7 w labels 

не работает для меня. Я должен удалить знак доллара:

plot filename.'.csv' u (1.5):(yi=yi+0.5/A_records):1 every::1::7 w labels 

И мне нужно немного изменить значения 1,5 и 0,5.