4Dプロットの表面をどのようにプロットしますか?


11

3Dボックス内の粒子の波動関数をプロットしようとしています。これには、x、y、z軸および確率密度関数の4つの変数をプロットする必要があります。

確率密度関数は次のとおりです。

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
確率密度を表すために色を使用してはどうですか?
シュハオカオ

この種のプロットでは不透明度がうまく機能すると思います。各プロットの異なる視点を提供する必要があるかもしれませんが、粒子が存在する可能性が高い場所でプロットをより不透明にすることで、このデータを視覚化できます。
ゴドリックシーア

2
numpyを使用しているように見えるので、実際のプロットを行うためにmayaviを使用できます。ドキュメントには、3Dでスカラーデータプロットする例があります。
jorgeca

回答:


13

これは実際には4Dデータではありません。Geoffが言ったように、それは3Dスカラーデータです。つまり、3つの変数スカラー関数を視覚化しています。f(x,y,z)

この種のデータを視覚化するにはいくつかの方法があり、多くのツールが役立ちます。作成できるプロットのいくつかのスタイルを紹介します。

  1. 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

2つまたは3つの空間次元でプロットされたスカラーフィールドベースのデータ(温度、速度、圧力、密度など)の従来のアプローチでは、色を使用します。配色の選択は、データの印象を歪める可能性があることに注意することが重要です。このため、虹色スキームを使用しないください。 (なぜ、参照してくださいここでここではここでは、とここ。)残念ながら、虹がMATLABとmatplotlibの中にデフォルトのカラースキームです。

強度の変化を強調する場合、白(濃度0)から黒(最大濃度)の範囲のように、彩度が変化するスキームを使用するとうまく機能します。透明度もうまく機能します。色を使用する場合の3次元プロットの扱いにくい問題は、傾向と特徴の全体像を得るために、複数の視点からデータを見る必要があることです。スライスをプロットする必要がある場合もあります。


はい、カラープロットではうまくいきません。それでは、このためにどのような機能を使用するのでしょうか?
カブ

2
Pythonの関数ですか?プロットに適したライブラリがいくつかあります。Matplotlibは通常、3Dプロットではなく2Dプロットに使用されます。ggplotとBokehには同様の使用例があります。jorgecaが示唆したように、Mayavi2は3Dプロットに適しています。私は、ParaViewやVisItなどの3Dデータの視覚化のためのソフトウェアパッケージを好む傾向があります。また、yt(Pythonベース)を見ることができ、3Dデータをうまくプロットできます。どれでも価値のある可視化ライブラリは、カラースケール、不透明度、彩度などのためにあなたに複数のオプションを与える必要があります
ジェフOxberry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.