Come posso tracciare la superficie di un diagramma 4D?


11

Sto cercando di tracciare la funzione d'onda per una particella in una scatola 3D. Questo mi richiede di tracciare 4 variabili: assi x, y, z e la funzione di densità di probabilità.

La funzione di densità di probabilità è:

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

Sto usando np.arange()per X, Y e Z.

Ho letto che per fare questo è necessario tracciare la superficie di un diagramma 4D. Ecco come dovrebbe apparire:

inserisci qui la descrizione dell'immagine


3
Che ne dici di usare un colore per rappresentare la densità di probabilità?
Shuhao Cao,

Immagino che l'opacità funzionerebbe bene per questo tipo di trama. Potrebbe essere necessario fornire diverse prospettive di ciascun grafico, ma rendere il diagramma più opaco in cui è probabile che la particella sia visualizzata visualizzerebbe bene questi dati.
Godric Seer,

2
Dal momento che sembra che tu stia usando numpy, potresti usare mayavi per fare la vera trama. I documenti hanno un esempio di stampa di dati scalari in 3D .
Jorgeca,

Risposte:


13

f(X,y,z)

Esistono diversi modi per visualizzare questo tipo di dati e molti strumenti che ti aiuteranno. Ti mostrerò alcuni stili di trame che puoi creare.

  1. f(X,y,z)=(Cost.)

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

    Mostra le superfici di probabilità costante 0,2, 0,5 e 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. È possibile eseguire alcuni tipi di visualizzazione del volume , possibilmente con ritagli e tagli. Sarai in grado di assegnare un colore e un'opacità a ciascun punto in 3D. Strumenti più avanzati ti permetteranno anche di scegliere una funzione di trasferimento.

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

    L'affettatura spesso aiuta, soprattutto se puoi controllare in modo interattivo quale fetta visualizzare.

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

Questi esempi erano intesi come idee per quali tipi di visualizzazioni puoi provare a creare. Esistono molti strumenti gratuiti e commerciali che puoi utilizzare per creare le trame.


9

L'approccio tradizionale per i dati scalari basati sul campo (temperatura, ampiezza della velocità, pressione, densità, ecc.) Tracciati su due o tre dimensioni dello spazio utilizza il colore. È importante notare che la scelta della combinazione di colori può distorcere le impressioni dei dati. Per questo motivo, non utilizzare una combinazione di colori arcobaleno. (Per questo, vedi qui , qui , qui e qui .) Sfortunatamente, arcobaleno è la combinazione di colori predefinita in MATLAB e matplotlib.

Se stai cercando di evidenziare i cambiamenti di intensità, usare uno schema che varia in saturazione funziona bene, come uno che va dal bianco (densità zero) al nero (densità massima). Anche la trasparenza può funzionare bene. Un problema complicato con i grafici 3D quando si usa il colore è che dovrai guardare i dati da più prospettive per avere un quadro più completo di tendenze e caratteristiche; potrebbe anche essere necessario tracciare sezioni.


Sì, una trama a colori non lo farà, hai ragione. Hai idea di quale tipo di funzione userei per questo allora?
Rapa

2
Intendi una funzione in Python? Ci sono alcune librerie là fuori che funzionano bene per la stampa. Matplotlib viene solitamente utilizzato per grafici 2D anziché grafici 3D; ggplot e Bokeh hanno casi d'uso simili. Mayavi2, come suggerito da Jorgeca, è ottimo per la stampa 3D. Tendo a preferire i pacchetti software per la visualizzazione di dati 3D, come ParaView o VisIt. Potresti anche guardare yt (che è basato su Python) e fare un buon lavoro nel tracciare dati 3D. Qualsiasi libreria di visualizzazione utile dovrebbe darti più opzioni per scale di colori, opacità, saturazione, ecc.
Geoff Oxberry,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.