如何解决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数据在两个块之间是不连续的,因此绘图中会出现跳跃。
我想在输出图中将这两行连接在一起,而无需修改数据文件。有办法吗?
也许可以通过读取每个块的最后一行和下一个块的第一行并在这两个点之间绘制一条线来完成此操作,但是我不熟悉可以完成此任务的任何内置函数。
解决方法
我想到的第一种方法是将数据绘制到表中。 这将删除空行。也许有更好的方法。
代码:
### 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
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。