2015-08-08 78 views
1

我試圖用一個只包含0或1的簡單數據文件(.example)構建一種條形圖。這裏包含的數據.exampleGnuplot - 用兩個命令迭代

dest P1 P2 P3 P4 P5 NA 
D1 0 1 1 0 0 0 
D2 0 0 1 0 0 0 
D3 0 1 0 1 0 0 
"" 
GPV 1 1 1 1 1 1 

,這裏是我使用的代碼:

set style histogram rowstacked title textcolor lt -1 
set datafile missing 'nan' 
set style data histograms 

plot '.example' using ($2==0 ? 1 : 0) ls 17 title 'NA', \ 
'' using ($2==1 ? 1 : 0) ls 1, \ 
for [i=3:5] '.example' using (column(i)==0 ? 1 : 0) ls 17 notitle, \ 
for [i=3:5] '' using (column(i)==1 ? 1 : 0) ls i-1 

其中最後兩個命令遍歷一個潛在的大量 列堆疊白色或彩色的取決於column(i)的值。要保持直方圖中不同列的顏色順序相同,我需要將兩個迭代合併爲一個包含兩個命令的迭代。

可能嗎?有關如何做到這一點的任何建議?

回答

0

您可以使用嵌套循環,我認爲這是您想要實現的。您可以使用迭代遍歷大量列的外部循環和遍歷兩個選項(白色或彩色)的內部循環(for [i=3:5] for [j=0:1]),並告訴gnuplot忽略該列,前提是其內容與j的值不匹配1/0(或使用的伎倆,有效的直方圖,將其設置爲0作爲你已經做):

set style histogram rowstacked title textcolor lt -1 
set datafile missing 'nan' 
set style data histograms 

plot '.example' using ($2==0 ? 1 : 0) ls 17 title 'NA', \ 
'' using ($2==1 ? 1 : 0) ls 1, \ 
for [i=3:5] for [j=0:1] '.example' using (column(i) == j ? 1 : 0) \ 
ls (j == 0 ? 17 : i-1) notitle 

上面的代碼就相當於你有什麼已經,只有j值允許開關樣式取決於您是否有01作爲列的值。

+0

嗨,謝謝你的幫助。您提出的解決方案對我來說是完美的,但實際上'列'只能與'使用'一起使用,而不能與'ls'或'標題'規範一起使用。另外,嵌套循環並沒有真正的幫助,因爲正確理解我需要基於數據中的0或1讀取來指定'ls'。 –

+0

對不起,我無法測試該命令,因爲您沒有發佈示例數據文件(下次嘗試這樣做)。我會用不同的解決方案解決我的問題。 – Miguel

+0

此外,在將來,請嘗試將問題降低到與實際問題相關的最小值,例如刪除示例中其他文件的繪圖。這使得它更容易引起人們的注意,因爲我們需要更少的時間和精力來閱讀和理解問題。 – Miguel