【发布时间】:2014-12-06 18:54:26
【问题描述】:
根据上图。此图片是从文本文件中的数据点生成的。我的问题是,如果图表被跳转,我如何删除任意两点的线? (在我的图片中,该图在 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) 只是为了模拟 awk 没有的 abs 函数。
【讨论】: