使用 gnuplot 逐行绘图

Plotting from line to line with gnuplot

我有一个 .txt 文件,其中两组数据在同一列中但被一些字符分开,这里是一个例子:

#第一组数据
#Time #Velocity
1 0.3
2 0.5
3 0.8
4 1.3

#第二组数据
#Time #Velocity
1 0.7
2 0.9
3 1.8
4 2.3

所以我想将这两组数据绘制成两条不同的曲线,而且我也不知道每组数据有多少行(或者至少这个数字可以改变)所以我不能使用每个命令.(我正在寻找一些 gnuplot 命令,而不是 bash 命令)。 谢谢

正如您已经提到的,every 在这里不起作用,因为您有可变长度的数据集 (edit: 是的,见编辑下)。 如果你有两个空行来分隔你的数据集,你可以使用索引,检查 help index。 但是,如果您只有一个空行,pseudocolumn -1 会有所帮助。检查 help pseudocolumns。 然后你可以用三元运算符定义一个过滤器,勾选help ternary.

代码:

### plotting variable datasets
reset session

$Data <<EOD
#First set of data
#Time        #Velocity
1              0.3
2              0.5
3              0.8
4              1.3

#Second set of data
#Time        #Velocity
1              0.7
2              0.9
3              1.8

#Third set of data
#Time        #Velocity
1              0.9
2              1.4
3              2.6
4              3.6
5              4.8
EOD

myFilter(col,i) = column(-1)==i-1 ? column(col) : NaN

set key top left
plot for [i=1:3] $Data u 1:(myFilter(2,i)) w lp pt 7 title sprintf("Set %d",i)
### end of code

编辑:(正如@binzo 指出的那样)

其实是我想的太复杂了。像下面这么简单,不用filter也会做(其他场合也可以用filter)。请注意,块从 0 开始编号。

plot for [i=1:3] $Data u 1:2 every :::i-1::i-1 w lp pt 7 title sprintf("Set  %d",i)

结果: