如何在c中传递gnuplot矩阵和splot pm3d映射?

时间:2015-04-08 11:05:03

标签: matrix gnuplot

所以,这一次,我有一个名为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,没有任何效果。

1 个答案:

答案 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;
}

enter image description here

因此,如果您有一个使用pm3d并且无法正常工作的程序,那么确切地看到那个完整文件真的很有帮助(这样一来就可以复制&amp;粘贴代码以编译并测试它。)