Gnuplot:未定义/缺少数据点和打印样式';带有图像';

Gnuplot:未定义/缺少数据点和打印样式';带有图像';,gnuplot,Gnuplot,我必须创建一个彩色地图,“带图像”的打印样式正是我想要的。(在x、y位置绘制z的精确值,因此我不选择使用pm3d) 问题是,我的数据文件中有未定义的点。例如,函数表示质量比,因此负z值没有物理意义,我想省略它们。或者某些z值甚至是“NaN” 示例数据文件: 1.0 1.0 1.5 1.0 2.0 1.7 1.0 3.0 1.9 2.0 1.0 1.6 2.0 2.0 1.8 2.0 3.0 2.0 3.0 1.0 1.7 3.

我必须创建一个彩色地图,“带图像”的打印样式正是我想要的。(在x、y位置绘制z的精确值,因此我不选择使用pm3d)

问题是,我的数据文件中有未定义的点。例如,函数表示质量比,因此负z值没有物理意义,我想省略它们。或者某些z值甚至是“NaN”

示例数据文件:

1.0   1.0    1.5
1.0   2.0    1.7
1.0   3.0    1.9
2.0   1.0    1.6
2.0   2.0    1.8
2.0   3.0    2.0
3.0   1.0    1.7
3.0   2.0    1.9
3.0   3.0   -1.0
所以我不想在位置(3,3)处绘制值-1,而是将(3,3)处的像素留空

我试过这个:

plot './test.dat' u 1:2:($3>0 ? $3 : 1/0) with image
但它不起作用。它说:

警告:像素数不能分解为与网格匹配的整数。N=8 K=3

如果将-1.0替换为“NaN”,也不起作用

我找到的唯一选择是:

set pointsize 10
plot './test.dat' u 1:2:($3>0 ? $3 : 1/0) palette pt 5
但是,我必须手动调整每个绘图的点大小、x和y范围以及绘图大小,以便数据点没有空格或重叠。(见附件。)


因此,长话短说:有没有办法使用带有未定义/缺失数据点的“with image”打印样式并将这些点保留为白色?

在这种情况下,我还没有找到一种方法使gnuplot能够很好地处理NaN。对我来说,它将其设置为1,这似乎很奇怪,但可能是“情节。。。“带图像”处理丢失的数据

如果只想消除负数,可以使用一个技巧:

#!/usr/bin/env gnuplot

set terminal png 
set output 'test.png'

filter(x) = (x > 0) ? x : 1/0 
philter(x) = (x > 0) ? x : 0 

# just in case
set zero 1e-20

# make points set to zero be white
set palette defined (0 1.0 1.0 1.0, \
                 1e-19 0.0 0.0 1.0, \
                     1 1.0 0.0 0.0)

# get min/max for setting color range
stats 'test.dat' u (filter($3)) nooutput

# set color range so minimum value is not plotted as white
set cbrange [STATS_min*(1-1e-6):STATS_max]

plot './test.dat' u 1:2:(philter($3)) with image
在数据文件上,它生成以下绘图:


这不是很理想,因为在颜色栏的底部有一个白色的部分,它不能处理NaN。不可能去掉白色位的原因是,在设置调色板时,使用的数字只是自动缩放以适应任何颜色条,调色板中有离散数量的插槽(256?)。因此,调色板中的第一个槽将始终显示调色板开头的值(白色),而不管调色板中的下一个颜色是否在比例中显示为1e-19。

谢谢您的回答,这很重要;)pngcairo端子看起来不错(cb底部没有白色位)。
#!/usr/bin/env gnuplot

set terminal png 
set output 'test.png'

filter(x) = (x > 0) ? x : 1/0 
philter(x) = (x > 0) ? x : 0 

# just in case
set zero 1e-20

# make points set to zero be white
set palette defined (0 1.0 1.0 1.0, \
                 1e-19 0.0 0.0 1.0, \
                     1 1.0 0.0 0.0)

# get min/max for setting color range
stats 'test.dat' u (filter($3)) nooutput

# set color range so minimum value is not plotted as white
set cbrange [STATS_min*(1-1e-6):STATS_max]

plot './test.dat' u 1:2:(philter($3)) with image