GNUPlot中色条中的不规则百分位数

GNUPlot中色条中的不规则百分位数,gnuplot,colorbar,Gnuplot,Colorbar,我有一个文本文件,它包含三列:纬度、经度和百分比。文本文件如下所示(链接): 我想在世界地图的顶部绘制一个热图(GNUPlot的世界地图文件可以从网站作者处下载) 问题在于颜色条,我想按不规则区域(百分位数)对值进行分组。由于很难解释,我附加了一个图像,如果我从GNUPlot得到的是另一个具有期望结果的绘图: GNUPlot try: 生成绘图的代码为: set palette maxcolors 10 set palette defined (0 "#000090",1 "#000fff",

我有一个文本文件,它包含三列:纬度、经度和百分比。文本文件如下所示(链接):

我想在世界地图的顶部绘制一个热图(GNUPlot的世界地图文件可以从网站作者处下载)

问题在于颜色条,我想按不规则区域(百分位数)对值进行分组。由于很难解释,我附加了一个图像,如果我从GNUPlot得到的是另一个具有期望结果的绘图:

GNUPlot try:

生成绘图的代码为:

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中的颜色(它们不是最终的颜色)之外,您还可以看到颜色条tics呈线性分布(使超过99.0的颜色粘在一起),并且没有按颜色条tics定义的区域分组

有没有办法在GNUPlot中绘制这个图


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

您可以定义一个步骤函数,根据需要映射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
重置
步骤(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()()())()))(x<99.75)(
将调色板设置为maxcolors 10
设置已定义的调色板(0“#333399”、1“#3333f7”、2“#3373ff”、3“#33c6ff)\
4英寸AFFD2、5英寸CFF8F、6英寸dfff4c、7英寸ffc733、\
8英寸ff7a33英寸,9英寸e53333英寸)
设置cbrange[-0.5:9.5]
设置cbtics nomirror
设置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 )
设置终端pngcairo
将输出设置为“output.png”
设置X范围[-30:40]
设置Y范围[25:70]
绘制“HeatMap_Test.txt”u 2:1:(步骤($3))notitle pt 5 ps 2 lc调色板\
“world_10m.txt”notitle,带行ls 1 lc-1
设定输出
我已经嵌套了三元运算符多次,以映射不规则的百分比范围0。。。100转换为线性
cbrange
-0.5。。。9.5.

这是Gnuplot 4.6的结果:


哇!非常感谢你!它工作完美!你甚至把颜色都弄对了!最后一点意见:有没有办法使边界线适合图像的大小?
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