2014-10-30 83 views
2

我使用的gnuplot與PostScript EPS終端,這是我的腳本:嵌套循環終端

set terminal postscript eps enhanced solid "Helvetica" 14 
set output "gamma_off_real.ps" 
set title 'L=4, N_{up}=N_{dw}=2, U=1.0 with HF, step, V_0=1, Ntimestep=400, Tinterval=10' 
set xlabel 'time' 
set ylabel 'Re({/Symbol g}_{ij})' 
set yrange [-0.5:1] 
do for [j=1:(nsit-1)] {do for [i=1:(nsit-j)] {plot 'time/fort.99' u (column(1)):(column((i-1)*nsit+i+j+1)) w l lt 1 lc ((-((j-1)*j)/2+(j-1)*nsit)+i+nsit) lw 3 t sprintf('Re({/Symbol g}_{%i%i})',i,i+j)}} 

我在最後使用兩個嵌套的for循環在我的.ps文件我有每個頁面只有一個曲線。我應該改變什麼來讓所有的曲線都在同一個圖中?

回答

3

您必須使用語法plot for ...,這也可以被嵌套:

plot for [j=1:(nsit-1)] for [i=1:(nsit-j)] 'time/fort.99' u ... 

更新:這是不行的,在plot for ... for結構中的第二索引可以不依賴於第一個。下面的情節只有三條曲線,而不是6:

plot for [j=1:3] for [i=1:j] i*x + j 

一些非常難看像下面可以工作:

s = '' 
do for [j=1:(nsit-1)] { do for [i=1:(nsit-j)] { s = s . sprintf('%d %d ', i, j) }} 
i(w) = int(word(s, 2*w - 1)) 
j(w) = int(word(s, 2*w)) 
plot for [w=1:words(s)/2] 'time/fort.99' u (column(1)):(column((i(w)-1)*nsit+i(w)+j(w)+1)) w l lt 1 lc ((-((j(w)-1)*j(w))/2+(j(w)-1)*nsit)+i(w)+nsit) lw 3 t sprintf('Re({/Symbol g}_{%i%i})',i(w),i(w)+j(w))}} 
+0

白衣嵌套的情節,因爲我有一些問題:對額外的指數繪製。例如,對於nsit = 4,我得到9條曲線而不是6條,因爲它似乎是i計數器總是從1運行到3而不是1運行到4-j – user3368447 2014-10-30 13:36:17

+0

您是對的。似乎改變一個基於另一個的迭代限制是不可能的:'對[i = 1:j]繪製[j = 1:3]的繪圖i * x + j'繪製三條曲線而不是6條曲線。然後,幫助你(目前至少)。 – Christoph 2014-10-30 13:45:08