Wie zeichne ich die Oberfläche eines 4D-Diagramms?

11

Ich versuche, die Wellenfunktion für ein Teilchen in einer 3D-Box zu zeichnen. Dazu muss ich 4 Variablen zeichnen: x-, y-, z-Achsen und die Wahrscheinlichkeitsdichtefunktion.

Die Wahrscheinlichkeitsdichtefunktion ist:

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

Ich benutze np.arange()für die X, Y und Z.

Ich habe gelesen, dass Sie dazu die Oberfläche eines 4D-Diagramms zeichnen müssen. So soll es aussehen:

Geben Sie hier die Bildbeschreibung ein

Steckrübe
quelle
3
Wie wäre es mit einer Farbe zur Darstellung der Wahrscheinlichkeitsdichte?
Shuhao Cao
Ich würde mir vorstellen, dass Opazität für diese Art von Handlung gut funktioniert. Möglicherweise müssen Sie für jedes Diagramm unterschiedliche Perspektiven angeben. Wenn Sie das Diagramm jedoch an der Stelle, an der sich das Partikel wahrscheinlich befindet, undurchsichtiger machen, werden diese Daten gut sichtbar.
Godric Seer
2
Da es so aussieht, als würden Sie Numpy verwenden, können Sie Mayavi verwenden , um das eigentliche Plotten durchzuführen . Die Dokumente enthalten ein Beispiel für das Zeichnen von Skalardaten in 3D .
Jorgeca

Antworten:

13

f(x,y,z)

Es gibt verschiedene Möglichkeiten, diese Art von Daten zu visualisieren, und viele Tools, die Ihnen helfen. Ich zeige Ihnen einige Arten von Plots, die Sie erstellen können.

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

    In Mathematica

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

    Zeigen Sie die Flächen mit konstanter Wahrscheinlichkeit 0,2, 0,5 und 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. Sie können eine Art Volumenvisualisierung durchführen , möglicherweise mit Ausschnitten und Schneiden. Sie können jedem Punkt in 3D eine Farbe und eine Deckkraft zuweisen. Mit erweiterten Tools können Sie auch eine Übertragungsfunktion auswählen.

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

    Das Schneiden hilft oft, insbesondere wenn Sie interaktiv steuern können, welches Slice angezeigt werden soll.

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

Diese Beispiele waren als Ideen dafür gedacht, welche Arten von Visualisierungen Sie erstellen können. Es gibt viele verschiedene kostenlose und kommerzielle Tools, mit denen Sie die Diagramme erstellen können.

Szabolcs
quelle
9

Der traditionelle Ansatz für skalarfeldbasierte Daten (Temperatur, Geschwindigkeitsgröße, Druck, Dichte usw.), die über zwei oder drei Raumdimensionen aufgetragen werden, verwendet Farbe. Es ist wichtig zu beachten, dass die Wahl des Farbschemas Ihre Eindrücke von den Daten verzerren kann. Verwenden Sie aus diesem Grund kein Regenbogenfarbschema. (Warum, siehe hier , hier , hier und hier .) Leider ist Regenbogen das Standardfarbschema in MATLAB und matplotlib.

Wenn Sie versuchen, Änderungen in der Intensität hervorzuheben, funktioniert die Verwendung eines Schemas mit unterschiedlicher Sättigung gut, z. B. zwischen Weiß (Dichte Null) und Schwarz (maximale Dichte). Transparenz kann auch gut funktionieren. Ein schwieriges Problem bei 3D-Plots bei der Verwendung von Farben besteht darin, dass Sie die Daten aus mehreren Perspektiven betrachten müssen, um ein umfassenderes Bild der Trends und Funktionen zu erhalten. Möglicherweise müssen Sie auch Slices zeichnen.

Geoff Oxberry
quelle
Ja, ein Farbplot reicht nicht aus, Sie haben Recht. Irgendeine Idee, welche Art von Funktion ich dann dafür verwenden würde?
Rübe
2
Meinen Sie eine Funktion in Python? Es gibt einige Bibliotheken, die sich gut zum Plotten eignen. Matplotlib wird normalerweise eher für 2D-Diagramme als für 3D-Diagramme verwendet. ggplot und Bokeh haben ähnliche Anwendungsfälle. Mayavi2 eignet sich, wie Jorgeca vorgeschlagen hat, gut zum 3D-Plotten. Ich bevorzuge Softwarepakete zur Visualisierung von 3D-Daten wie ParaView oder VisIt. Sie können sich auch yt (das auf Python basiert) ansehen und 3D-Daten gut zeichnen. Jede lohnende Visualisierungsbibliothek sollte Ihnen mehrere Optionen für Farbskalen, Deckkraft, Sättigung usw.
bieten