2017-03-11 74 views
1

我想用GNUPLOT製作一些熱圖,但我需要我的調色板採用離散的顏色來定義值。使用GNUPLOT的離散熱圖

我的意思是,我的數據文件具有三列,例如:

XY值


0.0 0.0 10
0.0 0.5 2
0.0 1.0 2
0.5 1.0 10
1.0 0.0 -1
1.0 1.0 -1

我需要每個點都有一種顏色,具體取決於它的值。傳統的熱圖混合點連續色彩的區域,但我需要它在一個離散的形式。

回答

0

如果您的數據形成了一個「矩陣」,即有M X-樣本,N Y-樣,你對所有的M×N點的數據,則可能是最簡單的解決方法是使用

plot ... w rgbimage u 1:2:(r($3)):(g($3)):(b($3)) 

並提供r,g,b值作爲三個額外的列,如上所示。然而,如果你的數據是「稀疏的」(只有一些樣本可用,如你的問題所示),並且沒有多少點,可能會試圖手動生成構成圖的基本平方。爲此,人們可以進行如下:

set terminal png enhanced 
set output 'plot.png' 

#custom value -> color mapping 
rgb(r, g, b) = 65536 * int(r) + 256 * int(g) + int(b) 
fn(val) = rgb(100 + val*10, 0, 0) 

#square size 
delta = 0.5 
set xr [-delta/2:1+delta/2] 
set yr [-delta/2:1+delta/2] 

set xtics 0,delta/2,1 out nomirror 
set ytics 0,delta/2,1 out nomirror 

set format x "%.2f" 
set format y "%.2f" 

set size ratio 1 

unset key 

fName="test.dat" 

load sprintf("<gawk -v d=%f -f parse.awk %s", delta, fName) 
plot fName u 1:2:3 w labels tc rgb 'white' 

此腳本假定輔助GAWK腳本parse.awk的在相同的目錄中的存在:

{ 
    printf "set object rectangle from %f,%f to %f,%f fc rgb fn(%d) fs solid\n", 
     $1-d/2, $2-d/2, $1+d/2, $2+d/2, $3 
} 

此腳本接受所要求的正方形的大小(-v d=%f在調用gawk),併爲每個點生成一個聲明,生成相應的正方形。這些語句因此由load命令執行。

通過主Gnuplot腳本中定義的函數fn完成顏色映射。它採用傳遞的值並生成一個rgb值,然後在rectangle規範中與fc rgb一起使用。

總之,這則產生: enter image description here

+0

非常感謝! –

0

這可能會做你想要什麼,經過一番擺弄:

set view map set style fill transparent solid noborder splot 'data' u 1:2:3:(100+200*$3) pt 5 lc rgbcolor var ps 14 pt 5將繪製一個正方形(至少在X11的術語)在數據文件中的每個點,根據在最後一個變換顏色的柱。

+0

謝謝李! –