formatting - gnuplot-पाई चार्ट में इरेंज का उपयोग करना?




offset pie-chart (2)

यह केवल मेरे लिए काम करता है अगर मैं कोई इशारा सेट न करें।

मान लें कि मेरे पास एक 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))

यह समाप्त होता है जैसे की तलाश

मैं इरेंज को असम्मेंटमेंट और unset border टिप्पणी करता हूं और यह इस तरह दिखता है:

जो बहुत परेशान है क्योंकि जब मैं फिर लेबल जोड़ने का प्रयास करता हूं ...

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

यह होगा:

जो मुझे संदेह है कि लापता हुई यरांगे के कारण है (क्योंकि उस के अलावा, कोड जो जुड़ा हुआ उत्तर में पोस्ट किया गया था उससे बहुत अधिक मतभेद होता है)

मैं खूनी काम कैसे कर सकता हूं?


yrange सेटिंग yrange के निष्पादन को भी प्रभावित करती है। इसलिए आपको set yrange[-1.25:1.25] करने का प्रयास करना चाहिए, पहले नहीं।

पुनश्च:

लेबल के साथ प्लॉटिंग करना

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 के मूल्यों को थोड़ा समायोजित करना होगा।


प्लॉट कमांड के ठीक पहले ग्राफ गुण को कॉन्फ़िगर करना बेहतर है अन्य गुण (जैसे stats और इस तरह A_sum ) इन गुणों से प्रभावित होंगे (उदाहरण के लिए set yrange )। यही कारण है कि पाई चार्ट गायब हो जाता है

साथ ही, x और y अक्षों ( set size ratio -1 उपयोग करें) के लिए समान इकाई लंबाई होना सुनिश्चित करें। यदि नहीं, तो परिधि कैनवास आकार के संबंध में खींची जाएगी, और अक्षों के संबंध में नहीं। पाई चार्ट अन्यथा कट जाएगा (जब तक कि उचित yrange दिया जाता है)।

कुछ संशोधनों के साथ, मैं यह चार्ट प्राप्त करता हूं:

यह कोड है:

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