1
根据上图。此图片是从文本文件中的数据点生成的。我的问题是,如果图形跳跃,我如何在任意两点删除线? (在我的图片中看到该图在x〜260上跳跃)
请注意,我的目的是,我只是想让这个图看起来像分段函数,图中间的平均线不应该连接,因为是跳下。
根据上图。此图片是从文本文件中的数据点生成的。我的问题是,如果图形跳跃,我如何在任意两点删除线? (在我的图片中看到该图在x〜260上跳跃)
请注意,我的目的是,我只是想让这个图看起来像分段函数,图中间的平均线不应该连接,因为是跳下。
在gnuplot中,你可以在某个地方有一个无效的数据值,或者是一个空行,分成几个部分。
对于第一种情况,您可以在using
语句内检查,如果与前一点的差异太大,并且使当前点无效。但是,这也会使你失去不仅连接线,也是跳转后的第一点:
lim=3
y2=y1=0
plot 'test.dat' using (y2=y1,y1=$2,$1):($0 > 0 && abs(y2-y1) > lim ? 1/0 : y1) with linespoints
我使用的测试数据文件是
1 1
2 1.1
3 0.95
4 1
5 5
6 6
7 5.5
8 5.8
9 -2
10 -2.5
11 -4
正如你看,x = 5和x = 9的点都丢失了。
或者,您可以通过外部工具(如awk
)管理数据以进行过滤。在这种情况下,当两个连续的y值之间的差值超过一定限度,你可以插入一个空行:
filter(lim) = 'awk ''{if(NR > 1 && sqrt((y-$2)**2) > '.lim.') print ""; print; y=$2}'' test.dat'
plot '< '.filter(3) using 1:2 with lines
请注意,我用的sqrt((..)**2)
只是模拟abs
功能,awk没有。