Gnuplot:如何在多个数据块上绘制连续线?

Gnuplot: how to plot with a continuous line over multiple data blocks?

我有一个 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 数据在两个块之间是不连续的,因此图中出现跳跃。

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

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

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

代码:

### 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.

的内存

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

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

结果: