如何将矩阵传递给 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 完整文件(这样一个可以复制粘贴代码编译测试)。