Pergunta

Eu preciso desenhar alguns dados de várias formas. Atualmente estou usando Matplotlib e estou bastante feliz com as parcelas que eu sou capaz de produtos.

Esta questão é sobre como traçar o último. Os dados é semelhante à "tabela de distância", como este (apenas maior, minha mesa é 128x128 e ainda tem 3 ou mais, o número per elemento).

Agora, os meus dados é muito melhor "estruturado" do que uma tabela de distâncias (meus dados não varia "ao acaso" como em uma tabela de distâncias por ordem alfabética), assim um 3D barchart , ou talvez 3 deles, seria perfeito. O meu entendimento é que tal gráfico de uma falta em Matplotlib.

Eu poderia usar um (colorido) Countor3d como estes ou algo em 2D como imshow, mas não é muito bem representativa do que os dados são (os dados tem significado apenas em meus 128 pontos, não há nada entre dois pontos). E a altura das barras é mais legível do que a cor, IMO.

Assim, as perguntas:

  1. É possível criar barchart 3D em Matplotlib? Deve ficar claro que quero dizer com um domínio 2D, não apenas um gráfico de barras 2D com um "fake" de renderização 3D para fins estéticos
  2. Se a resposta à pergunta anterior não é, então há alguma outra biblioteca capaz de fazer isso? Eu prefiro fortemente baseado em Python alguma coisa, mas eu estou bem com outras possibilidades Linux amigáveis ??
  3. Se a resposta à pergunta anterior não for, então você tem alguma sugestão sobre como mostrar que os dados? Por exemplo. criar uma tabela com os valores, sobreposto ao imshow ou outra maneira colorida?
Foi útil?

Solução

MyavaVi2 pode fazer 3D barcharts (rolagem para baixo um pouco). Depois de ter MayaVi / VTK / ETS / etc . instalado tudo funciona muito bem, mas pode ser algum trabalho ficando tudo instalado. Ubuntu tem tudo isso embalado, mas eles são a única distribuição Linux sei que faz.

Outras dicas

Há já algum tempo, matplotlib não tinha suporte a 3D, mas foi adicionado de volta recentemente . Você vai precisar usar a versão svn, uma vez que nenhuma versão foi feita desde então, e a documentação é um pouco escassa (ver exemplos / mplot3d / demo.py). Eu não sei se os gráficos de barras suportes mplot3d 3D real, mas um dos demos parece um pouco como ele poderia ser estendido para algo parecido.

Edit: O código fonte para o demo está em os exemplos mas por alguma razão, o resultado é não. Quero dizer a função test_polys, e aqui está como ele se parece com:

exemplo figura http://www.iki.fi/jks/tmp/poly3d.png

A função test_bar2D seria ainda melhor, mas é comentado na demo uma vez que provoca um erro com a versão atual do SVN. Pode haver algum problema trivial, ou algo que é mais difícil de corrigir.

Mais uma possibilidade é Gnuplot, que pode tirar algum tipo de pseudo gráficos de barras 3D , e gnuplot.py permite a interface com Gnuplot a partir do Python. Eu não tentei me, no entanto.

Este é meu código para um simples Bar-3d usando matplotlib.

import mpl_toolkits
from mpl_toolkits.mplot3d import Axes3D   
import matplotlib.pyplot as plt
%matplotlib inline

## The value you want to plot 
zval=[0.020752244,0.078514652,0.170302899,0.29543857,0.45358061,0.021255922,0.079022499,\
  0.171294169,0.29749654,0.457114286,0.020009631,0.073154019,0.158043498,0.273889264,0.419618287]    

fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111,projection='3d')
col=["#ccebc5","#b3cde3","#fbb4ae"]*5
xpos=[1,2,3]*5
ypos=range(1,6,1)*5
zpos=[0]*15
dx=[0.4]*15
dy=[0.5]*15
dz=zval

for i in range(0,15,1):
     ax.bar3d(ypos[i], xpos[i], zpos[i], dx[i], dy[i], dz[i],     
color=col[i],alpha=0.75)

ax.view_init(azim=120)
plt.show()      

http://i8.tietuku.com/ea79b55837914ab2.png

Você pode verificar Gráfico Diretor:

http://www.advsofteng.com

Ele tem uma variedade muito grande de tabelas e gráficos e tem um bom Python (e vários outros idiomas) API.

Há duas edições: Os puts versão livre uma sinopse sobre a imagem gerada, eo versão paga é bastante razoáveis.

Aqui está um dos mais interessantes 3d empilhados gráficos de barras que procuram:

gráfico de exemplo
(fonte: advsofteng.com )

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top