1

我有一个 .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 命令)。谢谢

4

1 回答 1

4

正如您已经提到every的,在这里不起作用,因为您有可变长度的数据集编辑:是的,它会,请参阅下面的编辑)。如果您有两个空行来分隔您可以使用索引的数据集,请检查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)

结果:

在此处输入图像描述

于 2020-10-23T14:52:07.037 回答