2014-01-20 45 views
2

我想以編程方式產生gnuplot的繪圖命令,如:gnuplot用sprintf生成繪圖命令?

plotline = sprintf("'datafile1.dat' using %d:3 with points, '%s' using %d:3 with points",i,targfile,i) 
plot plotline 

凡在第二行「情節主線」擴展到生產和執行一個完整的命令,如:

plot 'datafile1.dat' using 8:3 with points, 'datafile2.dat' using 8:3 with points 

我想這樣做是爲了在終端中回顯'plotline',並且確保在gnuplot腳本中循環一組列/ datafiles /循環內部時顯示的內容。

是否存在/執行此操作的語法是什麼,或者您能否提出另一種報告繪圖命令執行的方法(不分割爲繪圖命令和單獨的一組命令來報告當前變量狀態)。

謝謝!

+0

'sprintf(「format」,x,...) - 來自C語言sprintf'的結果...看到這裏http://www.gnuplot.info/docs_4.2/gnuplot.html – nrathaus

回答

2

爲了從一些字符串來構造這樣一個情節命令,你可以使用eval執行字符串中包含的命令:

plotline = 'x title "mytitle"' 
eval('plot '.plotline) 

或者您可以使用set macros

set macros 
plotline = 'x title "mytitle"' 
plot @plotline 

這在執行該命令之前用字符串變量plotline的內容替換@plotline。使用plot plotlineplotline的內容解釋爲文件名。請注意,從版本4.6開始,宏在循環中無法正常工作,但eval正常工作。

順便說一句:如果你沒有指定自己的標題,那麼實際的情節陳述就會寫在情節圖例中。但是這不能寫入終端輸出。

+0

謝謝!無法使'set macros ... @plotline'爲我工作,因爲來自sprintf的plotline是'不是字符串變量',但是eval()完全符合我的要求。 – robm

+0

這很奇怪。對於我來說,在4.6.3中,下面的語句都可以正常工作:'set macros; plotline = sprintf(「%f * x」,4); plot @ plotline'還有'set macros; plotline = sprintf(「'%s'使用0:1」,'test.txt'); plot @ plotline'(當然提供,你有這樣一個文件'test.txt' – Christoph

+1

我想補充一點,for循環中的當前4.6版本的宏不能按預期工作,所以eval版本是 – Andreas