【问题标题】:How do I plot multiple Y values for a single X value in a single Gnuplot window?如何在单个 Gnuplot 窗口中为单个 X 值绘制多个 Y 值?
【发布时间】:2010-11-26 22:58:27
【问题描述】:

我正在使用 C++ 使用 Gnuplot 绘制图形。在 C++ 程序中,我 popen() 一个 Gnuplot 进程文件,并继续写入它以绘制我的图形。具体来说,我写“plot '-' using 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”表示数据结束。

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

谢谢!

【问题讨论】:

    标签: c++ graph gnuplot


    【解决方案1】:

    我可以想到两种方法,但它们都涉及多次 (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);
    

    【讨论】:

    • 我实际上是在画线,所以第一种方法似乎有效。现在我明白为什么它提示我按两次“e”了。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多