2016-11-14 3 views
1

Я пытаюсь создать круговую диаграмму с использованием GNUPLOT, я уже создал график, и я назначил цвет легенде с использованием массива. Это код, я использовал этот question в качестве ссылкиGNUPLOT - Назначить цвета в круговой диаграмме

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 

Исходный файл для создания круговой диаграммы это

source.dat

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

И когда я запускаю сценарий, я получаю output.png файл, который выглядит следующим образом

output.png

enter image description here

Как вы можете видеть, круговая диаграмма цвета не подходят цвета легенды. Это связано с тем, что я могу легко установить цвет легенды благодаря индексу for, но для создания круговой диаграммы я повторяю в предложении every, поэтому я не могу получить индекс. Кроме того, я пытался что-то вроде:

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

, но у меня есть следующее сообщение об ошибке:

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

Не могли бы вы помочь мне, пожалуйста? Заранее спасибо.

ОБНОВЛЕНО

Я думаю, что я сделал шаг. Я удалил (colour=colour+1) часть команды сюжета, и теперь я могу установить конкретный цвет, способ

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),\ 

Но это нарисовать круговую диаграмму укомплектовать синий, и я все еще нужен индекс или что-то, потому что кажется colours дон изменить его значение.

ответ

1

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

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

Испытано с Gnuplot 5.0.0 на Windows.

Смежные вопросы