我正在尝试使用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会在图的底部包含热强度的彩色图案。另外,我没有找到填充图中线条之间间隙的纯色的方法。
谢谢。
答案 0 :(得分:1)
对此的回答需要首先正确解释组织数据的不同可能性:
两个空行分隔两个不同的数据集。这些根本没有连接,它们之间没有画线。在您的情况下,这是必需的,因为gnuplot
不支持单个表面的网格类型。
pm3d
仅适用于单个数据集,需要常规网格(请参阅pm3d demos)。单个曲面的两条线(等值线)必须仅用一个空行分隔。
你还有一个不规则的网格,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
来电。此外,可能还需要一些其他增强功能(仅绘制一次边框,色调和颜色框等)。