我想用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
我需要每個點都有一種顏色,具體取決於它的值。傳統的熱圖混合點連續色彩的區域,但我需要它在一個離散的形式。
我想用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
我需要每個點都有一種顏色,具體取決於它的值。傳統的熱圖混合點連續色彩的區域,但我需要它在一個離散的形式。
如果您的數據形成了一個「矩陣」,即有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
一起使用。
這可能會做你想要什麼,經過一番擺弄:
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的術語)在數據文件中的每個點,根據在最後一個變換顏色的柱。
謝謝李! –
非常感謝! –