2009-05-09 11 views
6

J'ai besoin de tracer des données sous différentes formes. Actuellement, j'utilise Matplotlib et je suis assez satisfait des parcelles que je suis capable de produire.Barchart (o plot) 3D en Python

Cette question est sur la façon de tracer le dernier. Les données sont similaires à la "table de distance", comme this (juste plus grande, ma table est 128x128 et a toujours 3 ou plus nombre par élément). Maintenant, mes données sont beaucoup mieux «structurées» qu'une table de distance (mes données ne varient pas «aléatoirement» comme dans une table de distance triée par ordre alphabétique), ainsi une 3D barchart, ou peut-être 3 d'entre elles, serait parfait. Ma compréhension est qu'un tel tableau est manquant dans Matplotlib.

Je pourrais utiliser un Countor3d (coloré) comme these ou quelque chose en 2D comme imshow, mais il n'est pas vraiment représentatif de ce que sont les données (les données ont un sens juste dans mes 128 points, il n'y a rien entre deux points). Et la hauteur des barres est plus lisible que la couleur, IMO.

Ainsi, les questions suivantes:

  1. est-il possible de créer barchart 3D dans Matplotlib? Il devrait être clair que je veux dire avec un domaine 2D, pas seulement un graphique 2D avec un rendu 3D "faux" à des fins esthétiques
  2. si la réponse à la question précédente est non, alors y at-il une autre bibliothèque capable de le faire ? Je préfère fortement quelque chose basé sur Python, mais je suis OK avec d'autres possibilités Linux-friendly
  3. Si la réponse à la question précédente est non, alors avez-vous des suggestions sur la façon d'afficher ces données? Par exemple. créer une table avec les valeurs, superposées à l'imshow ou autre manière colorée?

Répondre

5

MyavaVi2 peut faire 3D barcharts (défiler vers le bas un peu). Une fois que vous avez MayaVi/VTK/ETS/etc. installé tout fonctionne magnifiquement, mais il peut être un peu de travail pour tout installer. Ubuntu a tout emballé, mais c'est la seule distribution Linux que je connaisse.

+1

On dirait bien une, il est un morceau de gâteau à installer dans Ubuntu, juste sudo apt-get install mayavi2 Malheureusement cet exemple ne fonctionne pas: de enthought.mayavi. mLab import * ImportError: Aucun module nommé mLab while (suggestion disponible en ligne) d'importation enthought.mayavi.tools.mlab * œuvres, mais ne fournissent pas barchart() Suggestions? – Davide

+0

quelle version de mayavi2 avez-vous? Je crois que mlab a été révisé pour la version 3.1.0, et c'est ce que la documentation couvre. – Autoplectic

+0

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

7

Depuis quelque temps, matplotlib n'a pas de support 3D, mais il a été ajouté recently. Vous devrez utiliser la version svn, puisque aucune version n'a été faite depuis, et la documentation est un peu éparse (voir examples/mplot3d/demo.py). Je ne sais pas si mplot3d supporte de vrais diagrammes à barres 3D, mais l'une des démos ressemble un peu à une extension de ce genre. Edit: Le code source de la démo est the examples mais pour une raison quelconque, le résultat ne l'est pas. Je veux dire la fonction test_polys, et voici comment il ressemble:

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

La fonction test_bar2D serait encore mieux, mais il est commenté dans la démo car il provoque une erreur avec la version actuelle de svn. Peut-être un problème trivial, ou quelque chose qui est plus difficile à résoudre.

+0

Le résultat de la démo peut-il être vu quelque part en ligne? Si non, pouvez-vous l'exécuter sur votre machine locale et éditer votre réponse pour montrer le code source et l'image résultante? – Davide

+0

Merci, je n'accepte pas votre réponse car elle ne fonctionne pas pour le moment, mais je l'ai upvoted, et j'ai hâte de le voir fonctionner – Davide

0

Vous pouvez consulter Graphique Réalisateur:

http://www.advsofteng.com

Il a une très grande variété de tableaux et de graphiques et a une API Python agréable (et plusieurs autres langues).

Il existe deux éditions: La version gratuite met un texte de présentation sur l'image générée, et la version payante est assez raisonnable.

est ici l'un des plus de recherche intéressant graphiques 3d barres empilées:

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

5

Un autre possibilité est Gnuplot, qui peut tirer une sorte de pseudo 3D bar charts et gnuplot.py permet l'interface avec GNUplot de Python. Je ne l'ai pas essayé moi-même, cependant.

+2

+1 Wow, gnuplot vient de la porte arrière en python :-) Je Je l'ai beaucoup utilisé dans les années 90 ... Je vais y jeter un coup d'oeil (mais les pseudo-graphiques 3D sont laids, comparés aux nouveaux outils ...) – Davide

1

Ceci est mon code pour un simple Bar-3d en utilisant 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 peu tard à la fête (je ne sais même pas souvenez-vous de ce que j'essayais de tracer à l'époque!) mais agréable de voir cette fonctionnalité finalement implémentée dans matplotlib – Davide