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
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.