将FreeFEM ++数据绘制到GNUPLOT

时间:2013-10-25 08:56:22

标签: 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" << u[][Vh(i,j)] << endl;
            }
            ff<<Th[i][0].x << "\t" << Th[i][0].y << "\t" << u[][Vh(i,0)] << "\n\n\n";
    }

}

第一行数据的样本是:

0.635787    -0.0440338  0.0056924
0.65234 -0.063181   0.00797757
0.655369    -0.0412323  0.00795786
0.635787    -0.0440338  0.0056924


0.597634    -0.0376 3.06323e-33
0.613904    -0.0585366  0.0030425
0.616879    -0.0388107  0.0030295
0.597634    -0.0376 3.06323e-33

由于某种原因,我不知道每个'包'中有一个数据点重复两次。但这就是他们告诉你在FreeFem手册中这样做的方式。显然,由于某种原因,GNUPLOT需要“数据包”之间的空格。

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

set pm3d at b
set palette rgbformulae 30,31,32
set hidden3d
splot "sol.dat" with lines palette

它很好但我认为pm3d没有做任何事情。我认为pm3d会在图的底部包含热强度的彩色图案。另外,我没有找到填充图中线条之间间隙的纯色的方法。

OUTPUT SAMPLE

谢谢。

1 个答案:

答案 0 :(得分:1)

对此的回答需要首先正确解释组织数据的不同可能性:

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

  2. pm3d仅适用于单个数据集,需要常规网格(请参阅pm3d demos)。单个曲面的两条线(等值线)必须仅用一个空行分隔。

  3. 你还有一个不规则的网格,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来电。此外,可能还需要一些其他增强功能(仅绘制一次边框,色调和颜色框等)。