1

在此处输入图像描述

根据上图。此图片是从文本文件中的数据点生成的。我的问题是,如果图表被跳转,我如何删除任意两点的线?(在我的图片中看到该图在 x~260 上跳跃)

请注意,我的目的是我只想让这个图表看起来像分段函数,这意味着图表中间的线不应该连接,因为它被跳跃了。

4

1 回答 1

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)only 来模拟absawk 没有的函数。

在此处输入图像描述

于 2014-12-06T19:58:47.023 回答