我使用linux,C ++。我想保存gnuplot的输出。我怎么能用c ++做呢?我试过下面的代码。它生成一个png文件。但它没有绘制点。我想做两个任务
我该怎么做?
FILE *pipe = popen("gnuplot -persist", "w");
// set axis ranges
fprintf(pipe,"set xrange [0:11]\n");
fprintf(pipe,"set yrange [0:]\n");
fprintf(pipe, "set terminal png\n");
fprintf(pipe, "set output 'b.png'\n");
int b = 5;int a;
// to make 10 points
std::vector<int> x (10, 0.0); // x values
std::vector<int> y (10, 0.0); // y values
for (a=0;a<5;a++) // 10 plots
{
x[a] = a;
y[a] = 2*a;// some function of a
fprintf(pipe,"plot '-'\n");
// 1 additional data point per plot
for (int ii = 0; ii <= a; ii++) {
fprintf(pipe, "%d %d\n", x[ii], y[ii]); // plot `a` points
}
fprintf(pipe,"e\n"); // finally, e
fflush(pipe); // flush the pipe to update the plot
usleep(1000000);// wait a second before updating again
}
答案 0 :(得分:1)
似乎你的问题不是C-Code本身(或控制gnuplot那样),因为它完美无缺。您可以生成图像,如果省略set terminal
和set output
命令,则(至少我)会在场景上显示一个gnuplot窗口。
然而,目前还不完全清楚你想要绘制的内容。 从您的代码中,您似乎希望每次生成新的xy对时都更新绘图。在这种情况下,请注意几个后续绘图命令的不同终端的不同行为:
animate
的GIF:动画GIF,每帧一幅。如果这是您想要的,您可以先将所有内容绘制到屏幕上(如上所述,没有set terminal
和set output
),最后将最后一个绘图转储到文件中:
plot sin(x) title 'a curve' # opens a window on screen and shows curve
set term 'pngcairo'
set output 'b.png'
replot # redo the last plot command
unset output # clean closing of file
但是如果你想将几个数据集绘制成一个图,你需要一个plot
命令:
plot '-' title 'first plot', '-' title 'second plot'
input data ('e' ends) > 1 2
input data ('e' ends) > 2 3
input data ('e' ends) > 5 6
input data ('e' ends) > e
input data ('e' ends) > 7 8
input data ('e' ends) > 9 10
input data ('e' ends) > 11 12
input data ('e' ends) > e
set terminal pngcairo
set output 'b.png'
replot
unset output