2012-01-31 115 views
9

我想繪製分類結果並標記真實類。所以,基本上我需要的是爲字符串列中的值爲每個點分配一個顏色。gnuplot:在一列中繪製具有基於顏色的值的點

數據集是這樣的:

5.1 3.5 1.4 0.2光圈,setosa

我結束了腳本以下解決方案(感謝在這裏的答案:How to make points one color when a third column equals zero, and another color otherwise, in Gnuplot?

set palette model RGB defined (0 "red",1 "blue", 2 "green") 
plot 'iris.data' using 1:2:5 notitle with points pt 2 palette 

在原始數據集中我用數字替換了字符串標籤,因爲我不知道如何在gnuplot中使用字符串。有沒有辦法如何將字符串映射到顏色?

目前的輸出是這樣的: gnuplot coloring points

但是我不喜歡梯度調色板,因爲它不會在這種情況下才有意義。我寧願使用單一顏色和班級名稱的普通傳說。任何想法如何做到這一點?

+0

我有同樣的問題。如果gnuplot調色板接受了字符串而不是整數,那將會很好。我不認爲它確實如此。 – 2013-01-25 08:57:37

回答

5

一種方式,你可以做到這一點是通過使用awk

使用數據文件Data.csv

5.4452 4.6816 blue 
1.2079 9.4082 red 
7.4732 6.5507 red 
2.3329 8.2996 red 
3.4535 2.1937 green 
1.7909 2.5173 green 
2.5383 7.9700 blue 

與此腳本:

set pointsize 3 
plot "< awk '{if($3 == \"red\") print}' Data.csv" u 1:2 t "red" w p pt 2, \ 
    "< awk '{if($3 == \"green\") print}' Data.csv" u 1:2 t "green" w p pt 2, \ 
    "< awk '{if($3 == \"blue\") print}' Data.csv" u 1:2 t "blue" w p pt 2 

你得到這個情節:

enter image description here

什麼awk並是簡單地檢查第三數據文件的參數並且僅打印該th e線,如果它有一些價值:像紅色或藍色。

你也可以用漸變去除調色板。

該腳本可以通過使用gnuplot iterations進一步改進。

+0

謝謝,我對gnuplot很新,語法對我來說很困惑。使用awk非常方便 – Tombart 2012-02-02 10:51:47

+0

@Tombart如果您對示例中使用的語法有任何具體問題,請告訴我,我將詳細說明。 – Woltan 2012-02-02 10:57:54

+0

這裏'$ 3'是第三列的值,但它沒有指定什麼是分隔符?它會被自動視爲''? – damned 2013-10-23 08:50:47

2

一個調色板可以用來得到任何一點顏色(單個點)

plot file using 1:2:3 with points palette 

現在成立了一個調色板,爲您提供所需的顏色刻度。您可以設置調色板來計算顏色,例如使用HSV顏色模型或查看gnuplot演示網站。

只是爲了完整性,看看最後一個例子上gnuplot pm3d colors demo page

color bar with distinct colors in gnuplot

theta(x) = x<0 ? 0 : 1 
r(x) = 4*x*(1-theta(x-0.25)) 
g(x) = 0.5*theta(x-0.25)*(1-theta(x-0.5)) 
b(x) = x 
set palette model RGB functions r(gray),g(gray),b(gray) 
set title "set palette model RGB functions\n4*x*(1-theta(x-0.25)), 0.5*theta(x-0.25)*(1-theta(x-0.5)), x" 
splot f(x)enter code here