0

我正在使用 C++ 使用 Gnuplot 绘制图形。在 C++ 程序中,我 popen() 一个 Gnuplot 进程文件,并继续写入它以绘制我的图形。具体来说,我写“ plot '-' using 1:2 with points ”,然后继续写XY坐标。只有两列,它工作正常。

现在我修改了我的程序以生成超过 2 列。我现在有以下格式的数据

X、Y1、Y2、Y3、Y4、Y5

因此,它每秒输出一条线(例如“1 2 3 4 5 6”,其中 1 是 X 坐标,其余值是不同曲线的 Y 坐标)。我无法弄清楚如何在一个窗口中拟合所有曲线。

如果我执行以下操作,

set xrange[0:5]
set yrange[0:10]
plot '-' using 1:2 with lines, '-' using 1:3 with lines
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7

它给了我一个错误,上面写着

"warning: Skipping data file with no valid points"

并且还需要按两次“e”来表示数据结束。

也许我在这里遗漏了一些小东西。

谢谢!

4

1 回答 1

3

我可以想到两种方法,但它们都涉及多次 (5) 次迭代您的数据。首先,多个图可以用逗号分隔,如下所示:

plot '-', '-', '-', '-', '-'

然后,您将在每组数据之后 fprintf(...) 一个“e”。

此外,由于您只是在绘制点(而不是线),因此您可以继续发送更多数据:

fprintf(gnuplot, "plot '-' with points\n");
for (int yy = 1; yy <= 5; yy++) {
    for (int row = 0; row < len; row++) {
         fprintf(gnuplot, "%lf %lf\n", data[row][0], data[row][yy]);
    }
}
fprintf(gnuplot, "e\n");
fflush(gnuplot);
于 2010-11-26T23:06:54.120 回答