绘制热图时如何跳过 Gnuplot 中的行?

How do I skip rows in Gnuplot when plotting a heat map?

我正在尝试在 Gnuplot 中绘制热图:

set view map
set size square
set cbrange [0:1]
splot "input.dat" 1:4:8 w pm3d

但我想在不更改 xrangeyrange 的情况下跳过特定范围内第一列和第四列中数据的行。我该怎么做?

嗯.....我自己找到的。谢谢!!!

set view map
set size square
set cbrange [0:1]
set xrange [-2.5:2.5]
set yrange [-2.5:2.5]
splot "input.dat" u (>=-1 && <=1?:1/0):(>=-1 && <=1?:1/0):8 with pm3d

如果列 $1 和 $4 中的值小于 -1 或大于 1,这将跳过这些行

如果你想跳过 xminxmax 之间的 x 值,以及 yminymax 之间的 y 值,你可以做一个条件图:

splot "input.dat" u 1:4:(  >= xmin &&  <= xmax && \
                           >= ymin &&  <= ymax ? 1/0 :  ) w pm3d

上面的代码告诉 gnuplot 忽略范围外的点。

例如,我使用 bash 生成以下随机数据:

for i in `seq 1 1 100`
do for j in `seq 1 1 100`
do echo $i $j $RANDOM >> input.dat
done
echo "" >> input.dat
done

现在告诉 gnuplot 忽略某个区域:

xmin = 25; xmax = 36; ymin = 67; ymax = 88
set view map
splot "input.dat" u 1:2:(  >= xmin &&  <= xmax && \
                           >= ymin &&  <= ymax ? 1/0 :  ) w pm3d not

如果您有多个要跳过的区域,只需使用 "or" 逻辑运算符 || 来分隔区域:

xmin1 = 25; xmax1 = 36; ymin1 = 67; ymax1 = 88
xmin2 = 50; xmax2 = 90; ymin2 = 23; ymax2 = 34
set view map
splot "input.dat" u 1:2:( \
      ( >= xmin1 &&  <= xmax1 &&  >= ymin1 &&  <= ymax1) \
      || \
      ( >= xmin2 &&  <= xmax2 &&  >= ymin2 &&  <= ymax2) \
      ? 1/0 :  ) w pm3d not