如何使用Gnuplot中的数据图绘制分段函数?

时间:2014-12-06 18:54:26

标签: gnuplot piecewise

enter image description here

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

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

1 个答案:

答案 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

enter image description here

我使用的测试数据文件是

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没有这个函数。

enter image description here