如何绘制 4D 绘图的表面?

计算科学 可能性 绘图 计算物理学
2021-12-14 03:21:45

我正在尝试在 3D 框中绘制粒子的波函数。这需要我绘制 4 个变量:x、y、z 轴和概率密度函数。

概率密度函数为:

abs((np.sin((p*np.pi*X)/a))*(np.sin((q*np.pi*Y)/b))*(np.sin((r*np.pi*Z)/c)))**2

np.arange()用于 X、Y 和 Z。

我已经读过要做到这一点,您需要绘制 4D 绘图的表面。 这是它应该看起来的样子:

在此处输入图像描述

2个回答

这不是真正的 4D 数据。正如 Geoff 所说,它是 3D 标量数据,即您正在可视化三个变量的标量函数:f(x,y,z).

有几种方法可以可视化此类数据,并且有许多工具可以帮助您。我将向您展示您可以制作的几种风格的情节。

  1. 显示一个或多个的等高线图f(x,y,z)=(const.)表面,可能具有透明度。

    在数学中,

    ContourPlot3D[
     Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2 == 1/2,
     {x, -1, 1}, {y, -1, 1}, {z, -1, 1}]
    

    显示常数概率为 0.2、0.5 和 0.8 的曲面:

    ContourPlot3D[
     Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2,
     {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, Contours -> {0.2, 0.5, 0.8}, 
     ContourStyle -> (Directive[#, Opacity[0.25]] & /@ {Yellow, Orange, Red}), 
     Lighting -> "Neutral", Mesh -> None]
    

  2. 您可以进行某种类型的体积可视化,可能使用剪切和切片。您将能够为 3D 中的每个点指定颜色和不透明度。更高级的工具还可以让您选择传输函数。

    imgdata = 
      Table[Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2, 
        {x, -1., 1, .01}, {y, -1., 1, .01}, {z, -1., 1, .01}];
    
    img = Image3D[imgdata, ClipRange -> {{150, 200}, {0, 100}, {0, 200}}]
    

    切片通常会有所帮助,尤其是当您可以交互控制要显示的切片时。

    Image3DSlices[img, Range[1, 200, 10]]
    

这些示例旨在说明您可以尝试创建哪些类型的可视化。您可以使用许多不同的免费和商业工具来制作绘图。

在两个或三个空间维度上绘制的基于标量场的数据(温度、速度大小、压力、密度等)的传统方法使用颜色。请务必注意,配色方案的选择会扭曲您对数据的印象。因此,请勿使用彩虹配色方案。 (为什么,请参见此处此处此处此处。)不幸的是,彩虹是 MATLAB 和 matplotlib 中的默认配色方案。

如果您想突出强度的变化,使用饱和度变化的方案效果很好,例如从白色(零密度)到黑色(最大密度)的方案。透明度也可以很好地发挥作用。使用颜色时 3-D 绘图的一个棘手问题是,您需要从多个角度查看数据以更全面地了解趋势和特征;您可能还需要绘制切片。