2014-03-31 34 views
1

我有一個啓動GNUPlot的Java程序。GNUPlot:如何將所有WXT終端重新映射到PNG終端?

Runtime.getRuntime().exec("gnuplot"); 

Java通過輸出流與它進行通信。現在我正在用不同的地塊創建很多不同的終端。

set term wxt [terminalId] 

對於不同終端的繪圖命令由函數繪圖和數據點的繪圖的(所以繪圖命令是像「的情節的sin(x),COS(X),‘ - ’;」)。數據點在此格式發送:

0 0; 
1 1; 
2 2; 
3 3; 
e; 

我試圖完成的地塊導出到PNG(或不同的圖像格式)。

for(int terminalId = 0; terminalId < lastTerminalId; terminalId++) { 
     gnuPlotter.sendCommand("set term pngcairo size " + width + "," + height + ";"); 
     gnuPlotter.sendCommand("set output 'terminal" + terminalId + ".png';"); 
     gnuPlotter.sendCommand("replot;"); 
    } 

我的問題是我的數據點沒有重新繪製。我認爲replot實際上只是再次發送「plot ...」命令,而不是重複之後應該發送的數據點的列表。我怎樣才能再次精確地再現PNG終端上的WXT終端上已有的內容?

回答

1

對於任何不使用Java,這個問題可以從shell轉載如下:

gnuplot <<EOF 
p sin(x), cos(x), '-' 
0 0 
1 1 
2 2 
e 
set term png 
set out 'plt.png' 
rep 
EOF 

您可以通過從stdin數據繪製到中間表避開它:

gnuplot <<EOF 
set table 'term1.dat' 
plot '-' 
0 0 
1 1 
2 2 
e 
unset table 
plot sin(x), cos(x), 'term1.dat' 
set term png 
set out 'plt.png' 
rep 
EOF 
+0

謝謝。這是解決方案。 – John

+0

@Torben沒問題,我在這個過程中學到了一些東西!很高興你把事情解決了。 –

+0

雖然我做的有點不同。你的解決方案給了我一個把我的命令寫入GNUPlot腳本然後加載該腳本的想法。 – John