Math 绘制FreeFEM++;向GNUPLOT发送数据

Math 绘制FreeFEM++;向GNUPLOT发送数据,math,gnuplot,freefem++,Math,Gnuplot,Freefem++,我正在尝试使用gnuplot绘制用FreeFEM++获得的数据 在FreeFEM中,我使用以下代码保存了数据: { ofstream ff("sol.dat"); for (int i=0;i<Th.nt;i++){ for ( int j=0; j<3; j++){ ff<<Th[i][j].x << "\t" << Th[i][j].y << "\t" <

我正在尝试使用gnuplot绘制用FreeFEM++获得的数据

在FreeFEM中,我使用以下代码保存了数据:

{ ofstream ff("sol.dat");
    for (int i=0;i<Th.nt;i++){
            for ( int j=0; j<3; j++){
                    ff<<Th[i][j].x << "\t" << Th[i][j].y << "\t" << u[][Vh(i,j)] << endl;
            }
            ff<<Th[i][0].x << "\t" << Th[i][0].y << "\t" << u[][Vh(i,0)] << "\n\n\n";
    }
由于某种原因,我不知道每个“包”中有一个重复两次的数据点。但这是他们在FreeFem手册中告诉你的方法。显然,出于某种原因,GNUPLOT需要“数据包”之间的空格

我正在尝试使用gnuplot脚本绘制数据:

set pm3d at b
set palette rgbformulae 30,31,32
set hidden3d
splot "sol.dat" with lines palette
它的绘图很好,但我认为pm3d没有做任何事情。我认为pm3d会在绘图的底部包含热强度的彩色图案。此外,我也没有找到用纯色填充绘图中线条之间间隙的方法


谢谢。

要回答这个问题,首先需要对组织数据的各种可能性进行适当的解释:

  • 两个空行分隔两个不同的数据集。它们根本没有连接,它们之间没有画线。在您的情况下,这是必需的,因为
    gnuplot
    不支持用于单个曲面的网格类型

  • pm3d
    仅在单个数据集中工作,并且需要常规网格(请参见)。一个曲面的两条线(等值线)只能由一个空行分隔

  • 你仍然有一个不规则的网格,
    pm3d
    无法处理。在
    gnuplot
    内部,您可以使用
    dgrid3d
    对输入数据进行重采样,以获得规则网格,并使用
    pm3d
    绘制该网格

    但是
    dgrid3d
    会影响一个
    splot
    命令的所有数据文件。因此,您还需要
    multiplot
    来使用两个
    splot
    命令

    下面的脚本显示了它是如何工作的,但由于我没有完整的数据集,也不知道
    dgrid3d
    如何处理这么多的数据集(请参见上文1),因此这只是一个非常粗略的指南:

    set multiplot
    
    set pm3d at b
    set dgrid3d 200,200
    unset key
    splot 'sol.dat' nosurface
    
    unset dgrid3d
    unset pm3d
    splot 'sol.dat' with lines palette
    
    unset multiplot
    

    这应该可以工作,但是您可能需要调整
    dgrid3d
    调用。此外,可能还需要一些其他增强功能(只打印一次边框、tics和colorbox等)

    您正在混合多种功能(pm3d、hidden3d、lines palette),看起来您需要一个非常奇特的打印。。。为了使用pm3d,必须用一行分隔两个数据块。正确的语法是
    将pm3d设置为b
    。您需要添加两次一个点,因为
    pm3d
    使用四个点创建一个具有一种颜色的矩形。
    4x4
    矩阵将产生
    3x3
    彩色矩形。请您用文字解释一下,您的绘图应该是什么样的(线条如何显示?、表面如何?、仅在底座上的pm3d?应该隐藏什么等)。既然你有,这些选项就不合适了。@Christoph,谢谢你。我已经修正了打字错误,包括我想要的更好的描述和我得到的图片。我不知道这些命令不兼容。
    set multiplot
    
    set pm3d at b
    set dgrid3d 200,200
    unset key
    splot 'sol.dat' nosurface
    
    unset dgrid3d
    unset pm3d
    splot 'sol.dat' with lines palette
    
    unset multiplot