GNUPlot中colorbar中的不规则百分位数抽搐

时间:2016-11-30 11:37:22

标签: gnuplot colorbar

我有一个包含三列的文本文件:纬度,经度和百分比。文本文件如下所示(链接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和另一个具有所需结果的图表,我附加了一个图像:

GNUPlot尝试: enter image description here

生成图表的代码是:

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

期望的结果: enter image description here

除了GNUPlot中的颜色(它们不是最终的颜色)之外,你可以看到颜色条抽象线性分布(使得超过99.0的颜色分布在所有的toguether上)并且不按颜色条定义的区域分组

有没有办法在GNUPlot中创建这个图?

编辑:问题的第二部分继续here

1 个答案:

答案 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的结果:

irregular percentile tics