我正在尝试用FreeFEM++绘制使用gnuplot获取的数据。
在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会在图的底部包含热强度的彩色图案。另外,我也找不到用纯色填充情节中线条之间的空白的方法。

谢谢。
发布于 2013-10-25 18:52:41
要回答这一问题,首先需要对组织数据的不同可能性作出适当的解释:
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调用。另外,还可能需要一些其他的增强(绘制边框、抽象盒和彩色框,等等)。
https://stackoverflow.com/questions/19585422
复制相似问题