用于部分DiffEQ解决方案的GNUPlot 3D强度图

时间:2014-07-21 21:42:49

标签: graph gnuplot pde

我正在创建一个程序,使用有限差分方法解决3D偏微分方程。令人惊讶的是,这不是困难的部分,而是技术上的完成。

在程序结束时,我将以下列格式将PDE的数值解决方案写入某个文件(供以后处理)

X Y Z C
0 0 0 0.1
0 0 1 etc etc

其中X Y和Z是空间坐标,C是每个位置的强度。

我发现了一个关于绘制具有2个空间维度和1个强度的3D数据的大量信息。所以"技术上"我有4D数据... 3空间,1强度。

我发现的一条信息是使用此命令:       splot' datafile'你1:2:3:4 w pm3d

哪个可以完成这项工作,但由于它是一个矩形棱镜,因此您无法轻易看到棱镜中心的浓度。

我想象一下,做到这一点的最好方法就是选择一个" chunk"从矩形棱镜中取出,这样就可以看到强度层。我能想到的最好的比喻就是教科书如何代表地球的各个层面,他们把地球上的大块土地展示出来,直到核心。

我在研究论文中看到的另一种方式是在同一图表上绘制和XY横截面,YZ横截面和XZ横截面。

我试图搜索这两个但是(对我而言)简明扼要。

对于表示此数据的最佳方式,任何建议都会很棒!

1 个答案:

答案 0 :(得分:0)

在解释数据时,我总能找到最有用的色彩图。您基本上通过具有合理信息的平面绘制切片。如果你有网格数据,即使没有预处理数据文件,这在gnuplot中也很容易做到。例如,如果您的数据如下所示:

# x  y  z  c
  0  0  0  0.15
  1  0  0  0.14
  2  0  0  0.16

  0  1  0  0.11
  1  1  0  0.19
  2  1  0  0.12

  0  2  0  0.15
  1  2  0  0.19
  2  2  0  0.13

  0  0  1  0.10
  1  0  1  0.09
  2  0  1  0.17

# etc

然后您可以使用gnuplot为x,y或z的固定值创建条件图。对于z = 0平面,可以使用splot "data" u 1:2:($3 == 0 ? $4 : 1/0)来实现,也就是说,如果第3列的值为0,则绘制第4列的值,否则忽略该点。对于上面的简单示例:

set pm3d map
splot "data" u 1:2:($3 == 0 ? $4 : 1/0)

enter image description here

请注意pm3d在数据点之间进行一些插值。

如果你预处理你的数据或者像我的例子中那样对其进行了很好的结构化,你也可以使用with image style,这可能比pm3d更受欢迎有几个原因,包括较小的文件大小:

plot "data" u 1:2:4 every :::0::2 with image

enter image description here

除了实际的点值之外没有插值。所选数据块0到2之上的every :::0::2,在我的示例中属于z = 0的数据块。

最后,如果您的数据是非网格化的,则无法使用with image,而应使用pm3d。在这种情况下,命令应考虑与您要绘制的平面相距可接受距离的点。这可以通过以下方式实现:

set pm3d map
plane_z = 0
splot "data" u 1:2:( abs($3 - plane_z) < 0.1 ? $4 : 1/0)

上面我在绘图中包含了z值小于距我所感兴趣的平面(z = 0)的距离0.1的所有点。