2009-05-09 15 views
6

Necesito trazar algunos datos en varias formas. Actualmente estoy usando Matplotlib y estoy bastante contento con las tramas que puedo producir.Barchart (o plot) 3D en Python

Esta pregunta es sobre cómo trazar la última. Los datos son similares a la "tabla de distancia", como this (solo más grande, mi tabla es 128x128 y todavía tengo 3 o más números por elemento).

Ahora, mis datos están mucho mejor "estructurados" que una tabla de distancia (mis datos no varían "aleatoriamente" como en una tabla de distancia ordenada alfabéticamente), así un 3D barchart, o quizás 3 de ellos, serían Perfecto. Tengo entendido que tal tabla falta en Matplotlib.

Podría usar un Countor3d (de color) como these o algo en 2D como imshow, pero no es realmente muy representativo de lo que son los datos (los datos solo tienen significado en mis 128 puntos, no hay nada entre dos puntos). Y la altura de las barras es más legible que el color, IMO.

lo tanto las preguntas:

  1. es posible la creación de diagrama de barras 3D en Matplotlib? Debería estar claro que me refiero a un dominio 2D, no solo a una tabla de barras 2D con una representación 3D "falsa" con fines estéticos
  2. si la respuesta a la pregunta anterior es no, entonces ¿hay alguna otra biblioteca capaz de hacer eso? ? Realmente prefiero algo basado en Python, pero estoy de acuerdo con otras posibilidades compatibles con Linux
  3. si la respuesta a la pregunta anterior es no, entonces ¿tiene alguna sugerencia sobre cómo mostrar esa información? P.ej. crea una tabla con los valores, superpuesta a la imshow u otra forma coloreada?

Respuesta

5

MyavaVi2 puede hacer 3D barcharts (desplazarse un poco). Una vez que tenga MayaVi/VTK/ETS/etc. instalado todo funciona muy bien, pero puede ser algo de trabajo instalarlo todo. Ubuntu tiene todo empaquetado, pero es la única distribución de Linux que sé que hace.

+1

Se ve bien una que es un pedazo de pastel para instalar en Ubuntu, simplemente sudo apt-get install mayavi2 Desafortunadamente ese ejemplo no funcionan: de enthought.mayavi. Mlab importación * ImportError: sin módulo denominado Mlab tiempo (sugerencia de encontrar en línea) de importación * obras enthought.mayavi.tools.mlab, pero no proporcionan diagrama de barras() Sugerencias? – Davide

+0

¿qué versión de mayavi2 tienes? Creo que mlab fue revisado para la versión 3.1.0, y eso es lo que cubre la documentación. – Autoplectic

+0

"mayavi2 -V" da "MayaVi 2.0.2a1" – Davide

7

Desde hace algún tiempo, matplotlib no tenía soporte 3D, pero se ha agregado de nuevo recently. Tendrá que usar la versión svn, ya que no se ha realizado ninguna versión desde entonces, y la documentación es un poco escasa (vea ejemplos/mplot3d/demo.py). No sé si mplot3d admite gráficos de barras 3D reales, pero una de las demostraciones se parece un poco a que podría extenderse a algo así.

Editar: El código fuente de la demostración está en the examples pero por alguna razón el resultado no es. Me refiero a la función test_polys, y así es como se ve:

example figure http://www.iki.fi/jks/tmp/poly3d.png

La función test_bar2D sería aún mejor, pero ha comentado en la demo, ya que causa un error con la versión actual SVN. Puede ser un problema trivial, o algo que es más difícil de arreglar.

+0

¿Se puede ver el resultado de la demostración en algún lugar en línea? Si no, ¿puede ejecutarlo en su máquina local y editar su respuesta para mostrar el código fuente y la imagen resultante? – Davide

+0

Gracias, no estoy aceptando su respuesta, ya que no funciona en este momento, pero lo superé, y espero verlo funcionando – Davide

0

debes revisar Chart Director:

http://www.advsofteng.com

Tiene una muy amplia variedad de tablas y gráficos y tiene una bonita Python (y varios otros idiomas) de la API.

Hay dos ediciones: la versión gratuita pone una publicidad en la imagen generada, y la versión de pago tiene un precio bastante razonable.

He aquí una de las más interesantes en 3D que parece apilados gráficos de barras:

sample graph http://www.advsofteng.com/images/demo10.png

5

Una posibilidad más es Gnuplot, que puede sacar algún tipo de pseudo 3D bar charts y gnuplot.py permite la interconexión con GNUPlot desde Python. Aunque no lo he probado yo solo.

+2

+1 Vaya, gnuplot viene de la puerta de atrás en Python :-) I lo usé mucho en los 90 ... lo echaré un vistazo (pero los gráficos de barras pseudo 3D son feos, en comparación con las herramientas más nuevas ...) – Davide

1

Este es mi código para un simple 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

+0

Un poco tarde para la fiesta (ni siquiera recuerde lo que estaba tratando de trazar en ese entonces!) pero es bueno ver que esta característica finalmente implementada en matplotlib – Davide