GNUPlot:如何将所有WXT终端重新插入PNG终端?

时间:2014-03-31 20:34:53

标签: plot terminal png gnuplot

我有一个启动GNUPlot的Java程序。

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

Java通过输出流与它通信。现在我正在用不同的图创建许多不同的终端。

set term wxt [terminalId]

不同终端的绘图命令包括功能绘图和数据点绘图(因此绘图命令类似于“plot 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 个答案:

答案 0 :(得分: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