2013-03-23 41 views
0

我有這樣一個數據文件:怪異使用插值filledcurves

1 1 2 
2 2 3 
3 4 nan 
4 5 6 

我想用繪製它:

plot "bla" u 1:2:3 w filledcurves, "" u 1:2 w lp, "" u 1:3 w lp 

的問題是,第一部分完全無視3號線,甚至儘管楠只有3美元。即使我有2美元的價值(4),它也會插入並跳過它。

如何讓它不忽略該值?

我可以通過將nan替換爲應該在那裏的值(3 + 6)/ 2來解決此問題,然後它也會繪製4。這有兩個問題 - 我必須編寫一個腳本,在文件周圍找到nans,並且當我使用w lp時,它也繪製了一個點,好像這裏有一個值,但沒有。

回答

0

你正在要求gnuplot使用它來做一些沒有設計的事情。幸運的是,這有點冒險解決方案。您需要使用填充曲線的兩列版本,它將您的數據點視爲閉環。在這種情況下,您想要繪製第1列和第2列中的內容,然後是第3列和第1列中的內容(以相反順序)。例如:

1 1 
2 2 
3 4 
4 5 
4 6 
3 nan 
2 3 
1 2 

如果你的數據文件看起來是這樣的,你可以繪製它:

plot 'datafile' u 1:2 w filledcurves 

現在,我敢肯定,你實際上並不希望重新生成的數據文件,所以最簡單的事情就是使用unix工具爲你做:

plot "< sed 'x;1!H;$!d;x' test.dat | awk '{print $1,$3}' | cat test.dat -" u 1:2 w filledcurves 

這應該可行。請注意,如果安裝了該命令,則可以用tac代替醜陋的sed命令。

+0

其實我正在問gnuplot的使用是爲了完成它設計的目的。填充曲線中的3列應填充兩條曲線之間的區域。從算法的角度來看,既然它沒有頂點和底點,那麼它就不應該繪製任何東西,但從用戶的角度來看,這並不重要。考慮它,它更像是gnuplot中的一個缺陷或不存在的功能。 但是,您的解決方法工作得很好。 – Michael 2013-03-24 09:37:11

+0

@邁克爾 - 不,這絕對不是它設計的目的。 「使用」是爲了一次解析一條記錄而設計的(在你的案例中,第1,2和3列)。如果該記錄中的任何元素不可讀,gnuplot會丟棄整個記錄。這對於大多數情節類型非常有用。 (例如考慮繪製一個三維散點圖 - 如果你知道「x」和「y」,但不是「z」,你仍然不能繪製點)。像這樣的案例需要專門處理,並可能使代碼庫變得更難以管理。 – mgilson 2013-03-24 22:21:27