我有一个包含三列的文本文件:纬度,经度和百分比。文本文件如下所示(链接here):
25.00 -28.00 0.3
25.00 -27.00 0.7
25.00 -26.00 1.6
25.00 -25.00 4.3
25.00 -24.00 10.0
25.00 -23.00 18.2
25.00 -22.00 33.9
25.00 -21.00 49.1
...
我想在世界地图上绘制这个相关信息作为热图(GNUPlot世界地图的文件可以从网站作者here下载)
问题在于colorbar,我想用不规则区域(百分位数)对值进行分组。由于很难解释,如果我使用GNUPlot和另一个具有所需结果的图表,我附加了一个图像:
生成图表的代码是:
set palette maxcolors 10
set palette defined (0 "#000090",1 "#000fff", 2 "#0090ff",3 "#0fffee",4 "#90ff70",5 "#ffee00",6 "#ff7000",7 "#ee0000",8 "#7f0000", 9 "#7f0050")
set cbtics (99.9 , 99.6, 99.0, 97.5, 95.0, 90.0, 75.0, 50.0, 20.0, 10.0);
plot [-30:40][25:70] "HeatMap_Test.txt" u 2:1:3 pt 5 ps 2 lc palette notitle, "world_10m.txt" with lines ls 1 notitle
除了GNUPlot中的颜色(它们不是最终的颜色)之外,你可以看到颜色条抽象线性分布(使得超过99.0的颜色分布在所有的toguether上)并且不按颜色条定义的区域分组
有没有办法在GNUPlot中创建这个图?
编辑:问题的第二部分继续here
答案 0 :(得分:3)
您可以定义一个步骤函数,根据需要映射z列。
reset
step(x) = (x < 15.0 ? 0 : \
(x < 35.0 ? 1 : \
(x < 62.5 ? 2 : \
(x < 82.5 ? 3 : \
(x < 92.5 ? 4 : \
(x < 96.25 ? 5 : \
(x < 98.25 ? 6 : \
(x < 99.3 ? 7 : \
(x < 99.75 ? 8 : 9 )))))))))
set palette maxcolors 10
set palette defined (0 "#333399", 1 "#3333f7", 2 "#3373ff", 3 "#33c6ff", \
4 "#5affd2", 5 "#9cff8f", 6 "#dfff4c", 7 "#ffc733", \
8 "#ff7a33", 9 "#e53333")
set cbrange [-0.5:9.5]
set cbtics nomirror
set cbtics ( "99.9" 9, "99.6" 8, "99.0" 7, "97.5" 6, "95.0" 5, \
"90.0" 4, "75.0" 3, "50.0" 2, "20.0" 1, "10.0" 0 )
set terminal pngcairo
set output "output.png"
set xrange [-30:40]
set yrange [ 25:70]
plot "HeatMap_Test.txt" u 2:1:(step($3)) notitle pt 5 ps 2 lc palette, \
"world_10m.txt" notitle with lines ls 1 lc -1
set output
我已经多次嵌套三元运算符,将不规则百分比范围0 ... 100映射到线性cbrange
-0.5 ... 9.5。
这是Gnuplot 4.6的结果: