首页 > 解决方案 > Gnuplot:如何在多个数据块上用连续线绘制?

问题描述

我有一个 dat 文件,它被分成多个块,例如如下:

#   Time (s)    x (m)
     0.0    0.0
     1.0    1.0
     2.0    2.0
     3.0    3.0
     4.0    4.0
     5.0    5.0


     5.0   10.0
     6.0   11.0
     7.0   12.0
     8.0   13.0
     9.0   14.0
    10.0   15.0

以下最小脚本:

filename = 'test.dat';

set terminal pngcairo size 960, 540 font 'Verdana, 20'
set output "test.png"
unset key
set xlabel "Time (s)"
set ylabel "x (m)"
set grid
set autoscale fix

plot filename u 1:2 w l lw 1.0 lc rgb 'black' notitle

产生这个数字: 在此处输入图像描述

Gnuplot 绘制两条线,每个块一条。但是,由于两个块之间的 x 数据不连续,因此图中会出现跳跃。

我想在输出图中加入这两行,而不修改数据文件。有没有办法做到这一点?

也许可以通过读取每个块的最后一行和下一个块的第一行并在这两点之间绘制一条线来完成,但我不熟悉任何可以完成这项工作的内置函数。

标签: graphicsgnuplotline-plot

解决方案


我想到的第一种方法是将数据绘制到表格中。这将删除空行。也许有更好的方法。

代码:

### remove empty lines in data
reset session

$Data <<EOD
#   Time (s)    x (m)
     0.0    0.0
     1.0    1.0
     2.0    2.0
     3.0    3.0
     4.0    4.0
     5.0    5.0


     5.0   10.0
     6.0   11.0
     7.0   12.0
     8.0   13.0
     9.0   14.0
    10.0   15.0
EOD

set table $Data2
    plot $Data u 1:2 w table
unset table

plot $Data2 u 1:2 w l
### end of code

补充: 实际上,在一行代码中还有另一种方法(虽然也不太明显),它不会复制内存中的数据(可能只与大数据相关)。您可以使用undefine $Data我猜想会释放$Data.

下面的单行代码将给出与上面的表格过程相同的结果。数据被绘制为从一个数据点到下一个数据点的向量,因此也忽略了空行。

plot x1=y1=NaN $Data u (x0=x1):(y0=y1):(x1=$1,x1-x0):(y1=$2,y1-y0) w vec nohead notitle

结果:

在此处输入图像描述


推荐阅读