formatting - online - gnuplot-haciendo uso del yrange en los gráficos circulares?
gnuplot portable (2)
Esto solo funciona para mí si no configuro un yrange.
Digamos que tengo un sample-time-overview.csv
como
,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,,,,,
donde no estoy interesado en la primera o las últimas dos líneas.
Básicamente copie y pegue el código del enlace de arriba con ajustes menores:
#!/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))
esto termina luciendo como
Descomentando el yrange y comento el unset border
no definido y se ve así:
que es muy molesto porque cuando trato de agregar etiquetas ...
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
esto es lo que va a ocurrir:
Lo cual sospecho es debido a la falta del rango (debido a que aparte de eso, el código no difiere mucho de lo que se publicó en la respuesta vinculada).
¿Cómo hago que funcione la maldita cosa?
Establecer yrange
también influye en la ejecución del comando de stats
. Por lo tanto, deberías intentar set yrange[-1.25:1.25]
después del comando stats
, no antes.
PD:
Trazando las etiquetas con
plot filename.''.csv'' u (1.5):(yi=yi+0.5/A_records):($1) every::1::7 w labels
no funciona para mi Tengo que quitar el signo de dólar:
plot filename.''.csv'' u (1.5):(yi=yi+0.5/A_records):1 every::1::7 w labels
Y tengo que ajustar los valores 1.5 y 0.5 un poco.
Es mejor configurar las propiedades del gráfico justo antes del comando de trazado. Otras rutinas (por ejemplo, stats
y, por tanto, A_sum
) se verán afectadas por estas propiedades (por ejemplo, set yrange
). Es por eso que el gráfico circular desaparece.
Además, asegúrese de tener longitudes de unidad iguales para los ejes y
(use una set size ratio -1
). Si no, la circunferencia se dibujará con respecto al tamaño del lienzo, y no con respecto a los ejes. El gráfico circular aparecerá cortado de lo contrario (a menos que se proporcione un yrange
apropiado).
Con algunas modificaciones, obtengo esta tabla:
Este es el código:
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