我使用管道在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管道是否有类似的功能?

最佳答案

您必须将特殊文件名-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])或类似的文字。

10-07 15:31