2012-05-30 61 views
7

不確定爲什麼當我做出的gnuplot這段代碼是工作:所有點的y值上的gnuplot

set terminal postscript enhanced color 
set output '../figs/ins_local.ps' 

set title "Result" 

set logscale y 
set xrange [50:100] 
set xtics 5 

#set xlabel "Insertion" 
#set ylabel "Time (in microseconds) " 

plot sin(x) 

,但是當我改變plot sin(x)有:

plot "../myFile.final" with lines title "Somethings" lw 3 linecolor rgb "#29CC6A" 

我有這樣的錯誤:

plot "../myFile.final" with lines title "Somethings" lw 3 linecolor rgb "#29CC6A" 
                          ^
"local.gnuplot", line 16: all points y value undefined 

我有一個專欄!它代表yrange。用行數表示xrange!例如我的數據點的:

125456 
130000 
150000 

x的第一點爲1,x的第二點是2,並且最後是3。現在我想represente這個1,2,3通過刻度50,55,60 !

+0

'../ myFile.final'的內容是什麼? – mgilson

+0

它在當前目錄之外!我的內容是真實的! – Mehdi

回答

16

有幾件事情可能會出錯 - 沒有看到您的數據文件,這是不可能告訴。這是我能想到的把我的頭頂部一對夫婦是:

所有你在第2列的數據點均小於或等於0(您收到錯誤消息,因爲日誌(0)是不確定的)

第一列中沒有任何點數在50和100之間。在這種情況下,您的所有數據點都會被剪切出繪圖範圍,因爲set xrange [50:100]

您的數據文件只有1列......在這種情況下,gnuplot沒有看到任何y值。 (改變plot '../myFile.final' u 1 ...

編輯

好了,現在我看到你的數據文件,這個問題肯定是,你已經set xrange [50:60]但數據的x範圍只從0〜2(gnuplot的開始從數據文件索引0)。解決這個問題的最簡單的方法是使用僞列0.僞列0僅僅是從0開始的行號(這是gnuplot在x軸上繪製的圖形,如果您使用plot 'blah.txt' using 1這裏是一個示例:

scale_x(x,xmin,xmax,datamin,datamax)=xmin+(xmax-xmin)/(datamax-datamin)*x 
plot 'test.dat' using (scale_x($0,50,60,0,2)):1 w lines title "scaled xrange" 

請注意,如果你不知道該使用規範是如何工作的,由$開頭數字是對整列元素方面的操作,例如:

plot 'foo.bar' using 1:($2+$3) 

將繪製第一列加總和數據文件每行中的第二和第三個元素。

該解決方案假定您知道數據文件中x的最大值(在這種情況下,即3-1 = 2 - [三點,0,1,2])。如果你不知道數據點的數量,你可以使用shell魔法,或直接從gnuplot獲得。第一種方法稍微簡單一些,雖然不如便攜式。我會同時顯示:

XMAX=`wc -l datafile | awk '{print $1-1}'` 
scale_x(x,xmin,xmax,datamin,datamax)=xmin+(xmax-xmin)/(datamax-datamin)*x 
plot 'test.dat' using (scale_x($0,50,60,0,XMAX)):1 w lines title "scaled xrange" 

第二種方式,我們需要通過數據進行兩遍,讓gnuplot的拿起最高:

set term push #save terminal settings 
set term unknown #use unknown terminal -- doesn't actually make a plot, only collects stats 
plot 'test.dat' u 0:1 #collect stats 
set term pop #restore terminal settings 
XMIN=GPVAL_X_MIN #should be 0, set during our first plot command 
XMAX=GPVAL_X_MAX #should be number of lines-1, collected during first plot command 
scale_x(x,xmin,xmax,datamin,datamax)=xmin+(xmax-xmin)/(datamax-datamin)*x 
plot 'test.dat' using (scale_x($0,50,60,XMIN,XMAX)):1 w lines title "scaled xrange" 

我想的完整性,我應該說,這在gnuplot 4中也更容易實現。6(我沒有它現在安裝的,所以這下一部分只是來自我的文檔的理解):

stats 'test.dat' using 0:1 name "test_stats" 
#at this point, your xmin/xmax are stored in the variables "test_stats_x_min"/max 
XMIN=test_stats_x_min 
XMAX=test_stats_x_max 
scale_x(x,xmin,xmax,datamin,datamax)=xmin+(xmax-xmin)/(datamax-datamin)*x 
plot 'test.dat' using (scale_x($0,50,60,XMIN,XMAX)):1 w lines title "scaled xrange" 

的Gnuplot 4.6看起來很酷。我很快可能會開始玩這個遊戲。

+0

我已編輯我的文章:) – Mehdi

+0

@Mehdi - 我也編輯了我的文章。這非常詳細,但希望這是可以理解的。 – mgilson

+0

偉大的工作,請回答最後一個問題: 當你: 'plot'test.dat'using(scale_x($ 0,50,60,XMIN,XMAX)):1''''''''''''''這是什麼意思:':1 '? – Mehdi