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

nabo
fonte
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.

Szabolcs
fonte
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.

Geoff Oxberry
fonte
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