首页 > 解决方案 > 3d 数据的 2d 输出不是通过块号而是通过列的值

问题描述

我有一些像这样的 3d 数据:

0.0  1. 2.
0.0  2. 7.
0.0  3. 1.1

0.1  1. 8.
0.1  2. 5.
0.1  3. 1.

0.2  1. 6.
0.2  2. 3.
0.2  3. 4.

第一行是“t”(时间)轴,第二列是“x”,第三列是我的变量的实际值。当然,以上是示意图。

现在,我只想绘制“时间”t=0.2 的块。有了上面的内容,我可以简单地查看它对应的块号,我可以使用every :::2::2在这种情况下。问题是我的实际文件有数万行,组成了数千个块。如果我只想绘制与某个时间对应的块,那么计算某个时间对应的块号将非常繁琐。因此,有没有办法给 gnuplot 什么“时间”(如上例中的第一列)我希望它绘制相应的块;和 gnuplot 在内部计算出相关的块?您可能会假设我知道确切的时间,尽管最好是给 gnuplot 一个时间 t,然后 gnuplot 查找文件的第一列并输出时间最接近给定时间 t 的块。

标签: 3doutput2dgnuplot

解决方案


只需使用三元运算符作为过滤器:

($1==0.2 ? $2 : NaN)

换句话说:如果第一列等于0.2,则取第二列的值作为x值,否则取NaN(不会被绘制。)

代码:

### filter data
reset session

$Data <<EOD
0.0  1. 2.
0.0  2. 7.
0.0  3. 1.1

0.1  1. 8.
0.1  2. 5.
0.1  3. 1.

0.2  1. 6.
0.2  2. 3.
0.2  3. 4.

0.3  2. 3.
0.3  1. 2.
0.3  4. 5.
EOD

plot $Data u ($1==0.2 ? $2 : NaN) : 3 w lp pt 7 lc rgb "red"
### end of code

结果:

在此处输入图像描述


推荐阅读