2012-09-14 63 views
2

我的問題與this非常相似,從中我可以學到很多東西。然而,我與多個數據塊的工作,像這樣:根據多個數據塊的列值改變點顏色gnuplot

1 2 3 
4 5 6 
7 8 0 
4 3 0 


4 5 7 
2 3 0 
4 5 0 
5 6 7 

,我喜歡這個密謀他們:

plot "file.txt" index 0 u 1:2 w points pt 1,\ 
    "file.txt" index 1 u 1:2 w points pt 2 

它創建2個不同的點的集合,每個不同的顏色。現在,我的目標是修改此腳本,以便第三個數據列爲0時,該點的顏色將變爲黑色。我希望其他點能保持它們目前的顏色(意思是彼此不同)。我已經做到了這一點:

set palette model RGB defined (0 'black', 1 'green') 
unset colorbox 
plot file index 0 u 1:2:($3 == 0 ? 0 : 1) w points pt 1 palette,\ 
    file index 1 u 1:2:($3 == 0 ? 0 : 1) w points pt 2 palette 

這正是我想要的,當然除了兩套現在都繪製成綠色。有什麼方法可以根據需要繪製黑色的圖像,還可以使每個圖像的顏色不同?

回答

2

它應該工作在調色板定義一個額外的點:

set palette model RGB defined (0 'black', 1 'green', 2 'red') 
unset colorbox 
plot file index 0 u 1:2:($3 == 0 ? 0 : 1) w points pt 1 palette,\ 
    file index 1 u 1:2:($3 == 0 ? 0 : 2) w points pt 2 palette 

enter image description here

+0

美麗,謝謝! – whatsherface

2

這是特殊的 「變量」 的顏色是什麼:

plot 'test.dat' i 0 u 1:2:($3 == 0? 0:1) w p pt 1 lc variable,\ 
    'test.dat' i 1 u 1:2:($3 == 0? 0:2) w p pt 2 lc variable 

在此variable上下文表示使用第三欄中給出的任何「樣式索引」的顏色。我在第三列變量上設置了過濾器,如果該列中的數據不爲0,則將第三列變換爲常量(1或2)。

另一種較不直接的方法(因爲您使用的是點)是:

plot 'test.dat' i 0 u 1:($3 == 0? 1/0: $2) w p pt 1 lc rgb "red",\ 
    'test.dat' i 0 u 1:($3 == 0? $2:1/0) w p pt 1 lc rgb "black,\ 
    'test.dat' i 1 u 1:($3 == 0? 1/0: $2) w p pt 1 lc rgb "green",\ 
    'test.dat' i 1 u 1:($3 == 0? $2:1/0) w p pt 1 lc rgb "black,\ 
+0

如果沒有問題,我有一個後續問題。讓我知道是否應該將其作爲單獨問題發佈。我現在通過引用索引0,1和2繪製紅色,綠色或黑色的東西。我的新問題是,我可以繪製所有其第三列具有非零值的所有顏色漸變(使用類似設置調色板的東西rgbformulae 33,13,10),然後如果第三列的值爲零,將其繪製成黑色? – whatsherface

+0

@whatsherface - 如果我正確地理解你,這應該是可能的只是結合我的答案和答案由andyras – mgilson

+0

我相信會工作給我離散的顏色,但我想使用基於數據的梯度第三欄。據我瞭解,($ 8 == 0.0?0:1)表示:如果第8列爲零,則繪製由「0」引用的顏色(黑色),如果不是,則繪製由「1 」。我需要的是:如果爲零,則繪製黑色,如果不是,則使用梯度rgbformulae 33,13,10。我可以使用單個索引來引用顏色漸變嗎? – whatsherface