根据上图。此图片是从文本文件中的数据点生成的。我的问题是,如果跳过图形,如何在任意两点移除线? (在我的图片中看到图表在x~260上跳跃)
请注意,我的目的是让我只想让这个图看起来像分段函数,这意味着图中间的线不应该被连接,因为它是跳过的。
答案 0 :(得分:2)
在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没有这个函数。