使用 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)
结果:
我有一个 .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)
结果: