Bagaimana saya memplot permukaan plot 4D?

11

Saya mencoba merencanakan fungsi gelombang untuk sebuah partikel dalam kotak 3D. Ini mengharuskan saya untuk memplot 4 variabel: sumbu x, y, z dan fungsi kepadatan probabilitas.

Fungsi kepadatan probabilitas adalah:

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

Saya menggunakan np.arange()untuk X, Y dan Z.

Saya telah membaca bahwa untuk melakukan ini, Anda perlu memplot permukaan plot 4D. Ini seharusnya terlihat seperti:

masukkan deskripsi gambar di sini

lobak
sumber
3
Bagaimana kalau menggunakan warna untuk mewakili kerapatan probabilitas?
Shuhao Cao
Saya akan membayangkan opacity akan bekerja dengan baik untuk plot semacam ini. Anda mungkin perlu memberikan perspektif yang berbeda dari setiap plot, tetapi membuat plot lebih buram di mana partikel cenderung akan memvisualisasikan data ini dengan baik.
Godric Seer
2
Karena sepertinya Anda menggunakan numpy, Anda bisa menggunakan mayavi untuk melakukan plot yang sebenarnya. Docs memiliki contoh memplot data skalar dalam 3D .
jorgeca

Jawaban:

13

f(x,y,z)

Ada beberapa cara untuk memvisualisasikan data semacam ini, dan banyak alat yang akan membantu Anda. Saya akan menunjukkan kepada Anda beberapa gaya plot yang dapat Anda buat.

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

    Dalam Mathematica,

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

    Tampilkan permukaan probabilitas konstan 0,2, 0,5 dan 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. Anda dapat melakukan beberapa jenis visualisasi volume , mungkin dengan potongan dan irisan. Anda dapat menetapkan warna dan opacity ke setiap titik dalam 3D. Alat yang lebih canggih juga akan memungkinkan Anda memilih fungsi transfer.

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

    Mengiris sering membantu, terutama jika Anda dapat secara interaktif mengontrol irisan yang akan ditampilkan.

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

Contoh-contoh ini dimaksudkan sebagai ide untuk jenis visualisasi apa yang dapat Anda coba buat. Ada banyak alat komersial dan gratis yang dapat Anda gunakan untuk membuat plot.

Szabolcs
sumber
9

Pendekatan tradisional untuk data berbasis bidang skalar (suhu, besaran kecepatan, tekanan, kepadatan, dll.) Diplot lebih dari dua atau tiga dimensi ruang menggunakan warna. Penting untuk dicatat bahwa pilihan skema warna dapat mengubah kesan Anda terhadap data. Karena alasan ini, jangan gunakan skema warna pelangi. (Untuk alasannya, lihat di sini , di sini , di sini , dan di sini .) Sayangnya, pelangi adalah skema warna default di MATLAB dan matplotlib.

Jika Anda mencoba menyoroti perubahan intensitas, menggunakan skema yang bervariasi dalam saturasi berfungsi dengan baik, seperti yang berkisar dari putih (kepadatan nol) hingga hitam (kepadatan maksimum). Transparansi juga dapat bekerja dengan baik. Masalah rumit dengan plot 3-D saat menggunakan warna adalah bahwa Anda harus melihat data dari berbagai perspektif untuk mendapatkan gambaran tren dan fitur yang lebih lengkap; Anda juga mungkin perlu merencanakan irisan.

Geoff Oxberry
sumber
Ya, plot warna tidak akan berfungsi, Anda benar. Adakah yang tahu fungsi apa yang akan saya gunakan untuk ini?
lobak
2
Apakah maksud Anda suatu fungsi dengan Python? Ada beberapa perpustakaan di luar sana yang berfungsi dengan baik untuk merencanakan. Matplotlib biasanya digunakan untuk plot 2D daripada plot 3D; ggplot dan Bokeh memiliki kasus penggunaan yang serupa. Mayavi2, seperti yang disarankan jorgeca, bagus untuk merencanakan 3D. Saya cenderung lebih suka paket perangkat lunak untuk visualisasi data 3D, seperti ParaView atau VisIt. Anda juga bisa melihat yt (yang berbasis Python), dan melakukan pekerjaan yang baik dalam merencanakan data 3D. Setiap perpustakaan visualisasi yang berharga harus memberi Anda banyak pilihan untuk skala warna, opacity, saturation, dll.
Geoff Oxberry