如何绘制4D图的表面?


11

我正在尝试在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图的表面。 这是应该的样子:

在此处输入图片说明


3
用颜色表示概率密度怎么样?

我想不透明对于这种情节来说会很好。您可能需要为每个图提供不同的透视图,但是使图更不透明(可能存在粒子的地方)将很好地可视化此数据。
Godric Seer 2013年

2
由于看起来您正在使用numpy,因此可以使用mayavi进行实际绘制。该文档提供了一个以3D绘制标量数据的示例。
jorgeca 2013年

Answers:


13

f(x,y,z)

有几种方法可以可视化此类数据,许多工具可以为您提供帮助。我将向您展示您可以制作的几种样式。

  1. f(x,y,z)=(const.)

    在Mathematica中

    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]]
    

这些示例仅是您可以尝试创建的可视化类型的想法。您可以使用许多不同的免费和商业工具进行绘图。


9

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

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


是的,颜色图是不会做的,您是对的。知道我将为此使用哪种功能?
萝卜2013年

2
您是指Python中的函数吗?有一些图书馆可以很好地进行绘图。Matplotlib通常用于2D图而不是3D图。ggplot和Bokeh具有相似的用例。正如jorgeca所建议的那样,Mayavi2适用于3D绘图。我倾向于使用软件包来可视化3D数据,例如ParaView或VisIt。您还可以查看yt(基于Python),并且在绘制3D数据方面做得很好。任何有价值的可视化库应该给你多种选择的色标,不透明度,饱和度等
杰夫Oxberry
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.