2014-12-06 177 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