2014-12-06 135 views
1

enter image description here如何在Gnuplot中使用数据图绘制分段函数?

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

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

回答

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