4D grafiğinin yüzeyini nasıl çizerim?


11

3D kutudaki bir parçacık için dalga işlevini çizmeye çalışıyorum. Bu 4 değişken çizmemi gerektiriyor: x, y, z eksenleri ve olasılık yoğunluk fonksiyonu.

Olasılık yoğunluğu fonksiyonu:

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

np.arange()X, Y ve Z için kullanıyorum .

Bunu yapmak için 4D grafiğinin yüzeyini çizmeniz gerektiğini okudum. İşte böyle görünmesi gerekiyor:

resim açıklamasını buraya girin


3
Olasılık yoğunluğunu temsil etmek için bir renk kullanmaya ne dersiniz?
Shuhao Cao

Opaklığın bu tür bir arsa için iyi çalışacağını düşünürdüm. Her bir komplo için farklı perspektifler sağlamanız gerekebilir, ancak parçacığın muhtemel olduğu yerlerde komployu daha opak hale getirmek bu verileri iyi bir şekilde görselleştirecektir.
Godric Seer

2
Numpy kullanıyor gibi göründüğünden , gerçek çizimi yapmak için mayavi kullanabilirsiniz . Dokümanlar, skaler verileri 3B olarak çizmeye bir örnektir .
jorgeca

Yanıtlar:


13

f(x,y,z)

Bu tür verileri görselleştirmenin birkaç yolu ve size yardımcı olacak birçok araç vardır. Size yapabileceğiniz birkaç çizim stili göstereceğim.

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

    Mathematica'da,

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

    Sabit olasılık 0.2, 0.5 ve 0.8 yüzeylerini gösterin:

    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. Muhtemelen kesikler ve dilimleme ile bir tür hacim görselleştirmesi yapabilirsiniz . 3B'deki her noktaya bir renk ve opaklık atayabilirsiniz. Daha gelişmiş araçlar ayrıca bir aktarım işlevi seçmenizi sağlar.

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

    Dilimleme, özellikle hangi dilimin görüntüleneceğini etkileşimli olarak denetleyebiliyorsanız, genellikle yardımcı olur.

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

Bu örnekler, ne tür görselleştirmeler oluşturmaya çalışabileceğinize yönelik fikirler anlamına geliyordu. Arsa yapmak için kullanabileceğiniz birçok farklı ücretsiz ve ticari araç var.


9

İki veya üç boşluk boyutu üzerine çizilen skaler alan tabanlı veriler (sıcaklık, hız büyüklüğü, basınç, yoğunluk vb.) İçin geleneksel yaklaşım renk kullanır. Renk şeması seçiminin veri izlenimlerinizi bozabileceğini unutmamak önemlidir. Bu nedenle, gökkuşağı renk şeması kullanmayın. (Neden için buraya , buraya , buraya ve buraya bakın .) Ne yazık ki, gökkuşağı MATLAB ve matplotlib'deki varsayılan renk şemasıdır.

Yoğunluktaki değişiklikleri vurgulamaya çalışıyorsanız, doygunlukta değişen bir şema kullanmak, beyazdan (sıfır yoğunluk) siyaha (maksimum yoğunluk) kadar olan gibi iyi çalışır. Şeffaflık da iyi sonuç verebilir. Renk kullanırken 3-B grafiklerle ilgili zor bir sorun, eğilimlerin ve özelliklerin daha kapsamlı bir resmini elde etmek için verilere birden çok açıdan bakmanız gerektiğidir; dilimleri çizmeniz de gerekebilir.


Evet, bir renk grafiği yapmaz, haklısın. Bunun için ne tür bir işlev kullanacağım hakkında bir fikrin var mı?
şalgam

2
Python'da bir işlev mi demek istediniz? Orada çizim için iyi çalışan birkaç kütüphane var. Matplotlib genellikle 3B grafikler yerine 2B grafikler için kullanılır; ggplot ve Bokeh benzer kullanım durumlarına sahiptir. Mayavi2, jorgeca'nın önerdiği gibi, 3D çizim için iyidir. ParaView veya VisIt gibi 3D verilerin görselleştirilmesi için yazılım paketlerini tercih etme eğilimindeyim. Ayrıca yt'ye (Python tabanlı) bakabilir ve 3D verileri çizmek için iyi bir iş yapabilirsiniz. Değerli bir görselleştirme kütüphanesi size renk ölçekleri, opaklık, doygunluk, vb. İçin birden fazla seçenek
sunmalıdır
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.