我正在尝试使用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将在图的底部包含彩色的热强度模式。另外,我也找不到用纯色填充绘图中线条之间的间隙的方法。
谢谢。
要解决这个问题,首先需要正确解释组织数据的各种可能性:
两个空行分隔两个不同的数据集。这些根本没有连接,它们之间没有画线。在您的情况下,这是必需的,因为gnuplot
它不支持单个表面具有的网格类型。
pm3d
仅在单个数据集中有效,并且需要规则的网格(请参阅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
通话。此外,可能还需要其他一些增强功能(仅对边框,抽动和颜色框进行一次绘制等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句