我使用管道在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])
或类似的文字。