所以,这一次,我有一个名为zvalue[10][10]
的矩阵,我希望绘制一个pm3d
地图,其中包含正常的x-y
网格,并使用zvalue[i][j]
来是点(i,j)
的值。
在gnuplot中,我只使用:
set pm3d map
splot zvalue matrix using 1:2:3 with pm3d
在C++
gnuplot管道中,我可以使用函数gp.file1d()
来实现此目的。
gp << "splot" << gp.file1d(matrix) << "matrix using 2:1:3" << "with pm3d\n"
但是现在,我在C gnuplot管道中,当然我可以将矩阵写入名为zvalue.txt
的文件中,并使用以下内容:
fprintf(gp, "splot \"zvalue.txt\" matrix using 1:2:3 with pm3d\n")
但还有其他方法吗?当我用矩阵处理普通的splot时,我尝试了@Christ的建议,就是这样做:
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;
}
但是当它pm3d
时,它效果不佳。我也一点一点尝试splot
,这适用于带矩阵的正常情节,但这里有pm3d
,没有任何效果。
答案 0 :(得分:0)
以下脚本适用于pm3d
:
#include <stdio.h>
#define GNUPLOT "gnuplot -persist"
int main(void)
{
FILE *gp = popen(GNUPLOT, "w");
fprintf(gp, "set pm3d map\n");
fprintf(gp, "splot '-' matrix using 1:2:3 with pm3d\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;
}
因此,如果您有一个使用pm3d
并且无法正常工作的程序,那么确切地看到那个完整文件真的很有帮助(这样一来就可以复制&amp;粘贴代码以编译并测试它。)