2016-11-14 10 views
1

Ich versuche, ein Kreisdiagramm mit GNUPLOT zu generieren, ich habe bereits das Diagramm generiert, und ich habe der Legende Farbe mit einem Array zugewiesen. Dies ist der Code, habe ich diese question als ReferenzGNUPLOT - Zuweisen von Farben in Tortendiagramm

script.sh

#!/usr/bin/gnuplot 
set terminal pngcairo nocrop enhanced size 800,400 font "Siemens Sans,8" 
set output 'output.png' 
filename = 'source.dat' 
rowi = 1 
rowf = 2 

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

# rowf should not be greater than length of file 
rowf = (rowf-rowi > A_records - 1 ? A_records + rowi - 1 : rowf) 

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

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

# 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 space for labels 
set yrange [-radius:radius] # [-1:1] 

#------------------------------------------------------------------- 
pos = 0    # init angle 
colour = 0   # init colour 
colors = "blue red" 

# 1st line: plot pie-chart 
# 2nd line: draw colored boxes at (xpos):(ypos) 
# 3rd line: place labels at (xpos+offset):(ypos) 
plot filename 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 rgb word(colors,i+1),\ 
    for [i=0:rowf-rowi] filename u (xpos):(ypos(i)):(sprintf('%05.2f%% %s', percentage($2), stringcolumn(1))) every ::i+rowi::i+rowi w labels left offset 3,0 

Die Quelldatei das Kreisdiagramm ist diese

SOURCE.DAT

zum Generieren
"Tipo","Valor" 
"Periodo laboral",723 
"Periodo no laboral",81 

Und wenn ich das Skript ausführen, bekomme ich eine output.png Datei, die wie folgt

output.png

enter image description here

Wie Sie sehen können, die Kreisdiagramm Farben nicht passen die Legende Farbe sieht. Dies liegt daran, dass ich die Legendenfarbe dank des for Indexes einfach einstellen kann, aber um das Kreisdiagramm zu erzeugen, durchlaufe ich die every Klausel, so dass ich keinen Index bekommen kann. Ich habe auch so etwas wie versucht:

plot filename u (centerX):(centerY):(radius):(pos):(pos=pos+angle($2)):(colour=colour+1) every ::rowi::rowf w circle lc rgb(word(colors, colour)),\ 

aber ich habe die folgende Fehlermeldung:

"gnuplot/piechart.sh", line 49: warning: This plot style does not work with 6 cols. Setting to xyerrorbars

Könnten Sie mir bitte helfen? Danke im Voraus.

AKTUALISIERT

Ich denke, dass ich einen Schritt getan haben. Ich habe den (colour=colour+1) Teil des Plotbefehl entfernt, und jetzt kann ich eine bestimmte Farbe festlegen, die Art und Weise

plot filename u (centerX):(centerY):(radius):(pos):(pos=pos+angle($2)):(colour=colour+1) every ::rowi::rowf w circle lc rgb word(colors,colour+1),\ 

Aber diese komplett blau das Kreisdiagramm zeichnen, und ich brauche noch einen Index oder etwas, weil es scheint, colours don ändere seinen Wert nicht.

Antwort

1

Stückweise das Kreisdiagramm sollte Plotten arbeiten:

colorsrgb = "#0000FF #FF0000" 

plot for [i=1:rowf-rowi+1] filename u (centerX):(centerY):(radius):(pos):(pos=pos+angle($2)) every ::i::i w circle lc rgb word(colorsrgb, i) 

enter image description here

Getestet mit Gnuplot 5.0.0 unter Windows.