2016-01-07 62 views
1

我一直試圖在同一個gnuplot圖上使用sprintf讀取文件名中的幾個文件。我可以讀一個參數o.k.如果我寫:在gnuplot中使用sprintf函數中的兩個參數

filename(n) = sprintf("oi04_saxs_%05d_ave_div_sub.dat", n) 
plot for [i=1:10] filename(i) u 1:2 

然後我的圖形是o.k,我得到的所有文件與該參數繪製在同一個圖表上。不過我有個字符的字符串,靠近我的文件名末尾的變化,當我嘗試在

filename(n,m) = sprintf("oi04_saxs_%05d_0001_%04s_ave_div_sub.dat",n,m) 

plot for [i=1:10] filename(i,m) u 1:2 

我收到以下錯誤信息,以反映這一點:「未定義變量m」。我已嘗試刪除該循環並僅運行

plot for filename(m) 

並且這會導致相同的錯誤消息。有助於理解什麼錯誤,以及如何解決這將是非常讚賞:)

這是我完整的腳本:

unset multiplot 
reset 

set termoption enhanced 
set encoding utf8 

set term pdf size 18cm,18cm font 'Arial' 

set pointsize 0.25 

set output 'StoppedFlowResults.pdf' 

set logscale 

set xlabel '{/:Italic r}/[Q]' 
set ylabel '{/:Italic Intensity}' 

filename(n) = sprintf("./Result_curve-%d.txt/estimate.d", n) 

myColorGradient(n) = sprintf("#%02x00%02x", 256-(n-1)*8-1, (n-1)*8) 

set key off 

set multiplot layout 2,1 

filename(n,m) = sprintf("oi04_saxs_%05d_0001_%04s_ave_div_sub.dat",n,m); 

plot for [i=1:10] filename(i,m) u 1:2 not 

unset multiplot 

set output 
+0

正如錯誤信息所示:在[plot = [i = 1:10] filename(i,m)']中使用它之前,您沒有在任何地方定義'm'。 – Christoph

+0

但是當我寫filename(n,m)= sprintf(「」,n,m)時,我不定義它嗎?是不是從潛在的文件名列表中定義它? – MoreTeaPlease

+0

不,你有一個函數定義,所以第二個函數參數可以在函數體內使用'm',但只在那裏。當你調用你的'filename'函數時,這是一個不同的問題。而且,現在我明白了,你有兩個不同的'filename'定義。 – Christoph

回答

0

根據help for,你可以有嵌套迭代,例如:

plot for [i=1:3] for [j=1:3] sin(x*i)+cos(x*j) 

在你的情況下,你可以混合這與字符串(你還沒有定義字符串可能的值)類似:

plot for [i=1:3] for [m in "A B C D"] filename(i,m) u 1:2 not 
+0

所以我必須定義可能的字符串值?我希望能用這個作爲解決方法.... – MoreTeaPlease

+0

好吧,正如@Christoph上面提到的,你必須告訴gnuplot模式來找到這些文件。要麼你有一個字符串列表,要麼像你在'ls'中像樣式表一樣在[this post]中解釋模式[http://stackoverflow.com/questions/26678584/plotting-curves-from-multiple-files-與-gnuplot的) – bibi

相關問題