Como plotar a superfície de um gráfico 4D?


11

Estou tentando traçar a função de onda para uma partícula em uma caixa 3D. Isso exige que eu plote 4 variáveis: eixos x, y, z e a função de densidade de probabilidade.

A função densidade de probabilidade é:

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

Estou usando np.arange()para o X, Y e Z.

Eu li que, para fazer isso, é necessário traçar a superfície de um gráfico 4D. Aqui está o que deve parecer:

insira a descrição da imagem aqui


3
Que tal usar uma cor para representar a densidade de probabilidade?
Shuhao Cao

Imagino que a opacidade funcionaria bem para esse tipo de enredo. Pode ser necessário fornecer perspectivas diferentes para cada plotagem, mas tornar a plotagem mais opaca onde a partícula provavelmente está, visualizaria bem esses dados.
Godric Seer

2
Como parece que você está usando numpy, você pode usar o mayavi para fazer a plotagem real. Os documentos têm um exemplo de plotagem de dados escalares em 3D .
Jorgeca

Respostas:


13

f(x,y,z)

Existem várias maneiras de visualizar esse tipo de dados e muitas ferramentas que o ajudarão. Vou mostrar alguns estilos de plotagem que você pode fazer.

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

    No Mathematica,

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

    Mostre as superfícies de probabilidade constante 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. Você pode fazer algum tipo de visualização de volume , possivelmente com recortes e fatias. Você poderá atribuir uma cor e uma opacidade a cada ponto em 3D. Ferramentas mais avançadas também permitem escolher uma função de transferência.

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

    O fatiamento geralmente ajuda, especialmente se você pode controlar interativamente qual fatia exibir.

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

Esses exemplos foram concebidos como idéias para quais tipos de visualizações você pode tentar criar. Existem muitas ferramentas gratuitas e comerciais diferentes que você pode usar para fazer os gráficos.


9

A abordagem tradicional para dados escalares baseados em campo (temperatura, magnitude da velocidade, pressão, densidade etc.) plotados em duas ou três dimensões espaciais usa cores. É importante observar que a escolha do esquema de cores pode distorcer suas impressões dos dados. Por esse motivo, não use um esquema de cores do arco-íris. (Por que, veja aqui , aqui , aqui e aqui .) Infelizmente, o arco-íris é o esquema de cores padrão no MATLAB e no matplotlib.

Se você estiver tentando destacar mudanças na intensidade, usar um esquema que varia na saturação funciona bem, como um que varia de branco (densidade zero) a preto (densidade máxima). A transparência também pode funcionar bem. Um problema complicado com gráficos 3D ao usar cores é que você precisará examinar os dados de várias perspectivas para obter uma imagem mais completa das tendências e recursos; também pode ser necessário plotar fatias.


Sim, uma plotagem de cores não funciona, você está certo. Alguma idéia de que tipo de função eu usaria para isso então?
nabo

2
Você quer dizer uma função em Python? Existem algumas bibliotecas por aí que funcionam bem para plotagem. O Matplotlib é geralmente usado para gráficos 2D em vez de gráficos 3D; ggplot e Bokeh têm casos de uso semelhantes. O Mayavi2, como sugeriu a jorgeca, é bom para plotagens em 3D. Costumo preferir pacotes de software para visualização de dados 3D, como ParaView ou VisIt. Você também pode olhar para o yt (que é baseado em Python) e faz um bom trabalho ao plotar dados 3D. Qualquer biblioteca de visualização de valor deve dar-lhe várias opções para escalas de cores, opacidade, saturação, etc.
Geoff Oxberry
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.