如何在单个Gnuplot窗口中为单个X值绘制多个Y值?

时间:2010-11-26 22:58:27

标签: c++ graph gnuplot

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

现在我修改了我的程序以生成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”两次以指示数据的结束。

也许我在这里错过了一些小事。

谢谢!

1 个答案:

答案 0 :(得分:2)

我可以想到两种方法,但它们都涉及多次迭代数据。首先,可以用逗号分隔多个图:

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);