2012-09-01 76 views
3

我試圖嘗試一些簡單的迴歸線作爲gnuplot圖的基礎。但是,無論我做什麼,我都無法在圖表上找到多個合適的線條。這甚至有可能嗎?這是我(目前)gnuplot的程序....在gnuplot中的同一圖上的多個擬合線?

set title "Foo" font "Arial Bold,14" 
set term epscairo size 8,5 
set style line 1 lw 0 pt 7 lc rgb "black" 
set key outside 
set pointsize .75 
set ylabel "Y Range" font "Arial Bold" 
set xlabel "X Range" font "Arial Bold" 
set grid ytics 
set yrange [-1:100] 
set xrange [1:80] 
set output 'graph.ps' 

f1(x) = a1*x + b1 
fit f1(x) "data/dvdate/1" using 2:3 via a1,b1 

f2(x) = a1*x + b1 
fit f2(x) "data/dvdate/2" using 2:3 via a1,b1 

f3(x) = a1*x + b1 
fit f3(x) "data/dvdate/3" using 2:3 via a1,b1 

plot f1(x) title '# 1', f2(x) title '# 2', f3(x) title '# 3' 

的結果是,我得到一個.PS與三個數據系列標籤一行它(未覆蓋其他線路)文件。

回答

4

您需要在每個擬閤中使用不同的變量(a1,b1)。

f2(x) = a2*x + b2 
fit f2(x) "data/dvdate/2" using 2:3 via a2,b2 
+0

感謝。我想我還沒有完全理解變量是如何使用的。我假定每個擬合都是獨立的,並且從輸入文件的讀取/處理是一個離散事件,並且變量是事件本地的。 – docSquale

+0

此外,我有50個這樣的線上限繪圖。當我做了「發現」循環時,我無法使fn(x)定義成爲可循環的,這意味着有大量的複製/粘貼來處理我的數據。 :-( – docSquale

+2

每個fit都是獨立的,但變量不是本地的 - 所以在你的第一種形式中,每個fit都覆蓋了以前的值。爲了在循環中創建50,我需要編寫一個外部腳本(Python或任何你喜歡的)生成gnuplot腳本。 – agentp

0

你可以使用'!'在gnuplot內調用外部程序,並且一個循環會生成一個臨時文件來加載之後。

!rm filetoload 
! for ((i=1;i<=50;i++)); do echo "f$i(x)=a$i*x+b$i; fit f$i(x) './file$i' u 1:2 via a$i, b$i">> filetoload;done 
!cat filetoload 
load "filetoload" 

將產生:

f1(x)=a1*x+b1; fit f1(x) file1 u 1:2 via a1, b1 
f2(x)=a2*x+b2; fit f2(x) file2 u 1:2 via a2, b2 
f3(x)=a3*x+b3; fit f3(x) file3 u 1:2 via a3, b3 
... 

適應的希望