1
根據上圖。此圖片是從文本文件中的數據點生成的。我的問題是,如果圖形跳躍,我如何在任意兩點刪除線? (在我的圖片中看到該圖在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)
只是模擬abs
功能,awk沒有。