如何在c中传递gnuplot矩阵?

时间:2015-04-07 16:50:57

标签: c matrix pipe gnuplot

我使用管道直接在C中调用gnuplot。我使用以下方法打开管道:

#define GNUPLOT "gnuplot -persist"
FILE *gp;
gp = popen(GNUPLOT, "w");

现在,我想将一个矩阵(例如zvalue[][])传递给gnuplot,以便我可以使用以下命令绘制3D图形:

fprintf(gp, "splot zvalue matrix using 1:2:3\n");

我在C ++中使用管道时设法做到了这一点:

#include "gnuplot-iostream.h"

需要使用-lboost_iostreams -lboost_system -lboost_filesystem进行编译,并且它有一个函数gp.fileld(zvalue)来处理这个问题,即:

gp << "splot" << gp.file1d(zvalue) << "matrix using 1:2:3\n";

这样gnuplot就可以访问矩阵zvalue

我的问题是,是否有使用C管道的类似功能?

1 个答案:

答案 0 :(得分:0)

您必须将特殊文件名-splot一起使用,然后将矩阵数据写入管道:

#include <stdio.h>

#define GNUPLOT "gnuplot -persist"

int main(void)
{
    FILE *gp = popen(GNUPLOT, "w");

    fprintf(gp, "splot '-' matrix using 1:2:3\n");
    int i, j;
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++)
            fprintf(gp, "%d ", i*j);
        fprintf(gp, "\n");
    }
    pclose(gp);
    return 0;
}

当然,在您的情况下,您必须写fprintf(gp, "%e ", zvalue[i][j])或类似的。