我正在使用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”两次以指示数据的结束。
也许我在这里错过了一些小事。
谢谢!
答案 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);