Comment puis-je tracer la surface d'un tracé 4D?

11

J'essaie de tracer la fonction d'onde d'une particule dans une boîte 3D. Cela me demande de tracer 4 variables: les axes x, y, z et la fonction de densité de probabilité.

La fonction de densité de probabilité est:

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

J'utilise np.arange()pour les X, Y et Z.

J'ai lu que pour ce faire, vous devez tracer la surface d'un tracé 4D. Voici à quoi il est censé ressembler:

entrez la description de l'image ici

navet
la source
3
Que diriez-vous d'utiliser une couleur pour représenter la densité de probabilité?
Shuhao Cao
J'imagine que l'opacité fonctionnerait bien pour ce genre de complot. Vous devrez peut-être fournir des perspectives différentes pour chaque tracé, mais rendre le tracé plus opaque là où la particule est susceptible de bien visualiser ces données.
Godric Seer
2
Comme il semble que vous utilisiez numpy, vous pouvez utiliser mayavi pour effectuer le tracé réel. Les documents contiennent un exemple de traçage de données scalaires en 3D .
jorgeca

Réponses:

13

F(X,y,z)

Il existe plusieurs façons de visualiser ce type de données et de nombreux outils qui vous aideront. Je vais vous montrer quelques styles de tracés que vous pouvez créer.

  1. F(X,y,z)=(const.)

    Dans Mathematica,

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

    Montrer les surfaces de probabilité constante 0,2, 0,5 et 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. Vous pouvez faire un certain type de visualisation de volume , éventuellement avec des découpes et des tranches. Vous pourrez attribuer une couleur et une opacité à chaque point en 3D. Des outils plus avancés vous permettront également de choisir une fonction de transfert.

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

    Le découpage est souvent utile, surtout si vous pouvez contrôler de manière interactive le découpage à afficher.

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

Ces exemples ont été conçus comme des idées pour les types de visualisations que vous pouvez essayer de créer. Il existe de nombreux outils gratuits et commerciaux que vous pouvez utiliser pour créer les parcelles.

Szabolcs
la source
9

L'approche traditionnelle pour les données scalaires basées sur le champ (température, amplitude de la vitesse, pression, densité, etc.) tracées sur deux ou trois dimensions d'espace utilise la couleur. Il est important de noter que le choix du schéma de couleurs peut fausser vos impressions sur les données. Pour cette raison, n'utilisez pas de jeu de couleurs arc-en-ciel. (Pour savoir pourquoi, voir ici , ici , ici et ici .) Malheureusement, arc-en-ciel est le jeu de couleurs par défaut dans MATLAB et matplotlib.

Si vous essayez de mettre en évidence des changements d'intensité, l'utilisation d'un schéma qui varie en saturation fonctionne bien, comme celui qui va du blanc (densité nulle) au noir (densité maximale). La transparence peut également bien fonctionner. Un problème délicat avec les tracés 3D lors de l'utilisation de la couleur est que vous devrez regarder les données sous plusieurs angles pour obtenir une image plus complète des tendances et des fonctionnalités; vous devrez peut-être également tracer des tranches.

Geoff Oxberry
la source
Oui, un tracé de couleur ne fera pas l'affaire, vous avez raison. Une idée du type de fonction que j'utiliserais pour cela alors?
navet
2
Voulez-vous dire une fonction en Python? Il existe quelques bibliothèques qui fonctionnent bien pour le traçage. Matplotlib est généralement utilisé pour les tracés 2D plutôt que pour les tracés 3D; ggplot et Bokeh ont des cas d'utilisation similaires. Mayavi2, comme l'a suggéré jorgeca, est bon pour le traçage 3D. J'ai tendance à préférer les progiciels de visualisation de données 3D, comme ParaView ou VisIt. Vous pouvez également regarder yt (qui est basé sur Python) et fait un bon travail de traçage des données 3D. Toute bibliothèque de visualisation intéressante devrait vous donner plusieurs options pour les échelles de couleurs, l'opacité, la saturation, etc.
Geoff Oxberry