Math 绘制FreeFEM++;向GNUPLOT发送数据
我正在尝试使用gnuplot绘制用FreeFEM++获得的数据 在FreeFEM中,我使用以下代码保存了数据: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" <
{ 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