我有一个启动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终端上的内容?
答案 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