2015-02-07 47 views
2

我想繪製一個圖形並使用直線對其進行擬合。通過在水平軸上選擇範圍來擬合圖形和繪製線條

f1(x)=a1+b1*x 
fit [0:80] f1(x) 'diff-xy-bcmLyo25perS.dat' via a1,b1 

f2(x)=a2+b2*x 
fit [100:220] f2(x) 'diff-xy-bcmLyo25perS.dat' via a2,b2 

我想這兩個地塊積成使用命令相同的圖形:

f(x) = x < 60 ? f1(x) : f2(x) 

plot 'diff-xy-bcmLyo25perS.dat' using 1:2 with lines linestyle 1 title "{/Symbol b}BCMal-C_{12}C_{8}", f(x) lw 3.0 lc rgb 'black' 

here

我得到如上情節。

在該圖中,可以看到有兩條相交於80(水平刻度)的線,它的形狀類似於'v'。

我想消除「V」形交叉點和我想獲得兩個獨立的線,一條從0-80,而另一個從100-220

我怎麼能得到這個?

感謝任何幫助。

在此先感謝。

回答

2

你可以利用這一點的gnuplot並不繪製infinityNaN值(如1.0/0

使用

plot_if_in_range(y,x,lower,upper) = (x>=lower && x<=upper)?(y):(1.0/0) 

您可以輕鬆地繪製任何功能在給定域:

plot plot_if_in_range(exp(x) , x, -5, 2), \ 
     plot_if_in_range(sin(x)+x, x, -2, 5) 
2

編輯: 對不起,這是基本相同的我dea作爲謝爾蓋伊茲梅洛夫的答案,我錯過了。

答:

使用特殊文件"+",這對於你的情節,你可以然後使用您選擇的功能樣,包括一個忽略輸入,如果它的範圍之外提供x值。然後你可以使用你的f1(x)f2(x)直接:

plot "+" using ($1):(0 < $1 && $1 < 80 ? f1($1) : 1/0), \ 
"+" using ($1):(100 < $1 && $1 < 220 ? f2($1) : 1/0) 
3

隨着gnuplot的5.0,你可以指定不同的範圍,不同的功能:

set style data lines 
plot 'diff-xy-bcmLyo25perS.dat' using 1:2 ls 1, \ 
    [0:80] f1(x) lw 3.0 lc rgb 'black',\ 
    [100:220] f2(x) lw 3.0 lc rgb 'black' 

注意,這僅適用,因爲你首先圖中的數據文件。繪製只有

plot [0:80] f1(x), [100:220] f2(x) 

是行不通的,因爲第一範圍設置相當於全球set xrange [0:80](它一直是),從而使第二功能將不可見的。

但是,在你的情況下,它應該工作正常。

+0

謝謝你的回覆。我安裝了GNUPLOT 5。0,並試圖運行現有的繪圖腳本,但遇到錯誤syaing「未知或模棱兩可的終端類型;鍵入只是'設置終端'的列表」。爲什麼PNG不工作?我配置爲(./configure --with-cairo)。是否有任何調整需要完成? – Vijay 2015-02-10 05:47:49

+0

但是,我用postscript終端,它工作正常。 – Vijay 2015-02-10 08:11:53

+0

我不知道,也許你沒有全部的庫頭文件,運行'./configure'或'config.log'後查看屏幕輸出的細節。 – Christoph 2015-02-10 08:15:23

相關問題