如何将矩阵传递给 gnuplot 并在 c 中绘制 pm3d 地图?
How to pass gnuplot a matrix and splot pm3d map in c?
所以,这一次,我有一个名为 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")
但是还有别的办法吗?当我用矩阵处理普通点时,我尝试了@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
,没有任何效果。
以下脚本适用于 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
但无法运行,那么准确地查看 that 完整文件(这样一个可以复制粘贴代码编译测试)。
所以,这一次,我有一个名为 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")
但是还有别的办法吗?当我用矩阵处理普通点时,我尝试了@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
,没有任何效果。
以下脚本适用于 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
但无法运行,那么准确地查看 that 完整文件(这样一个可以复制粘贴代码编译测试)。