Jak wykreślić powierzchnię wykresu 4D?

11

Próbuję wykreślić funkcję fali dla cząstki w polu 3D. Wymaga to ode mnie wykreślenia 4 zmiennych: osi x, y, z oraz funkcji gęstości prawdopodobieństwa.

Funkcja gęstości prawdopodobieństwa to:

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

Używam np.arange()dla X, Y i Z.

Przeczytałem, że aby to zrobić, musisz narysować powierzchnię wykresu 4D. Oto jak powinno to wyglądać:

wprowadź opis zdjęcia tutaj

Rzepa
źródło
3
Co powiesz na użycie koloru do przedstawienia gęstości prawdopodobieństwa?
Shuhao Cao,
Wyobrażam sobie, że nieprzezroczystość działałaby dobrze dla tego rodzaju fabuły. Konieczne może być podanie różnych perspektyw dla każdego wykresu, ale uczynienie wykresu bardziej nieprzejrzystym w miejscu, w którym prawdopodobnie znajduje się cząstka, dobrze wizualizuje te dane.
Godric Seer,
2
Ponieważ wygląda na to, że używasz numpy, możesz użyć mayavi, aby wykonać rzeczywistą kreślenie. Dokumenty zawierają przykład drukowania danych skalarnych w 3D .
jorgeca

Odpowiedzi:

13

fa(x,y,z)

Istnieje kilka sposobów wizualizacji tego rodzaju danych i wiele narzędzi, które ci pomogą. Pokażę ci kilka stylów fabuły, które możesz wykonać.

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

    W Mathematica

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

    Pokaż powierzchnie o stałym prawdopodobieństwie 0,2, 0,5 i 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. Możesz zrobić jakąś wizualizację objętości , prawdopodobnie z wycięciami i krojeniem. Będziesz mógł przypisać kolor i krycie do każdego punktu w 3D. Bardziej zaawansowane narzędzia pozwolą również wybrać funkcję przesyłania.

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

    Krojenie często pomaga, zwłaszcza jeśli możesz interaktywnie kontrolować, który plasterek ma być wyświetlany.

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

Przykłady te miały służyć jako pomysły na rodzaje wizualizacji, które możesz spróbować stworzyć. Istnieje wiele różnych bezpłatnych i komercyjnych narzędzi, których można użyć do tworzenia wykresów.

Szabolcs
źródło
9

Tradycyjne podejście do danych opartych na polu skalarnym (temperatura, wielkość prędkości, ciśnienie, gęstość itp.) Wykreślonych w dwóch lub trzech wymiarach przestrzennych wykorzystuje kolor. Ważne jest, aby pamiętać, że wybór schematu kolorów może zniekształcać wrażenia związane z danymi. Z tego powodu nie należy używać schematu kolorów tęczy. (Po co, patrz tutaj , tutaj , tutaj i tutaj .) Niestety tęcza jest domyślnym schematem kolorów w MATLAB i matplotlib.

Jeśli próbujesz wyróżnić zmiany w intensywności, dobrze działa użycie schematu różniącego się nasyceniem, na przykład od białego (zerowa gęstość) do czarnego (maksymalna gęstość). Przejrzystość może również działać dobrze. Trudny problem z wykresami 3D przy użyciu koloru polega na tym, że trzeba spojrzeć na dane z wielu perspektyw, aby uzyskać pełniejszy obraz trendów i funkcji; być może będziesz musiał wydrukować plasterki.

Geoff Oxberry
źródło
Tak, kolorowy wykres nie da rady, masz rację. Masz pojęcie, jakiej funkcji użyłbym w tym celu?
rzepa
2
Czy masz na myśli funkcję w Pythonie? Istnieje kilka bibliotek, które działają dobrze przy drukowaniu. Matplotlib jest zwykle używany do wykresów 2D, a nie do wykresów 3D; ggplot i Bokeh mają podobne przypadki użycia. Mayavi2, jak sugeruje jorgeca, nadaje się do drukowania w 3D. Preferuję pakiety oprogramowania do wizualizacji danych 3D, takie jak ParaView lub VisIt. Możesz także spojrzeć na yt (który jest oparty na języku Python) i wykonuje dobrą pracę, drukując dane 3D. Każda opłacalna biblioteka wizualizacji powinna dawać wiele opcji skal kolorów, krycia, nasycenia itp.
Geoff Oxberry