Python matplotlib -> 3D diagramme en barres -> réglage de tique position de l'étiquette, transparent bars
Je suis en train de créer un histogramme à barres 3D en Python à l'aide de bar3d() dans Matplotlib.
J'en suis arrivé au point où je peux afficher mon histogramme sur l'écran après le passage de quelques données, mais je suis coincé sur les points suivants:
- L'affichage des étiquettes d'axes correctement (actuellement en manque de finale (ou initiale?) étiquettes de graduation)
- Soit à la fabrication de tiques sur chaque axe (par exemple pour 'Mon') soit point à la correspondante de la barre bleue, ou de la position de l'étiquette de graduation entre les graduations principales.
- Faire les barres semi-transparent.
l'image de l'intrigue téléchargé ici
J'ai essayé de passer plusieurs arguments à l' 'ax' instance, mais n'avons rien eu à travailler malgré et me soupçonne d'avoir mal compris ce que de lui fournir. Je serai très reconnaissant pour toute aide sur ce.
Voici un exemple de code, je suis en train de travailler sur:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
#from IPython.Shell import IPShellEmbed
#sh = IPShellEmbed()
data = np.array([
[0,1,0,2,0],
[0,3,0,2,0],
[6,1,1,7,0],
[0,5,0,2,9],
[0,1,0,4,0],
[9,1,3,4,2],
[0,0,2,1,3],
])
column_names = ['a','b','c','d','e']
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
fig = plt.figure()
ax = Axes3D(fig)
lx= len(data[0]) # Work out matrix dimensions
ly= len(data[:,0])
xpos = np.arange(0,lx,1) # Set up a mesh of positions
ypos = np.arange(0,ly,1)
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)
xpos = xpos.flatten() # Convert positions to 1D array
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)
dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = data.flatten()
ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b')
#sh()
ax.w_xaxis.set_ticklabels(column_names)
ax.w_yaxis.set_ticklabels(row_names)
ax.set_xlabel('Letter')
ax.set_ylabel('Day')
ax.set_zlabel('Occurrence')
plt.show()
OriginalL'auteur Dman | 2012-02-24
Vous devez vous connecter pour publier un commentaire.
Pour faire les barres semi-transparent, il vous suffit d'utiliser le paramètre alpha. alpha=0 signifie que 100% transparent, tandis que alpha=1 (par défaut) correspond à 0% transparente.
Essayer cela, il va travailler à faire de l'bars semi-transparent:
Concernant les tiques emplacement, vous pouvez le faire en utilisant quelque chose comme ceci (la première liste sur plt.xticks ou plt.yticks contient les "valeurs" où voulez-vous localiser les tiques, et la deuxième liste contient ce que vous voulez l'appeler les tiques):
En fin de compte, je reçois cette figure:
File "matrix_to_3D_histogram.py", line 43, in <module> ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=0.5) TypeError: bar3d() got an unexpected keyword argument 'alpha'
C'est bizarre, je n'ai pas de problème du tout, et je viens de copier votre code et changé la ligne je vous l'ai dit. Quelle version utilisez-vous? Je suis à l'aide de matplotlib 1.1.0.
pour tester la version de matplotlib tapez ceci:
import matplotlib; print matplotlib.__version__
Bonjour encore une fois, on dirait que vous avez réussi à obtenir que la figure de recherche, juste la façon dont je voulais, c'est excellent, merci! J'ai regardé ma version de Matplotlib, et comme je suis sur Ubuntu 10.04) j'ai la version 0.99.1.1 installé à partir de synaptic par défaut. J'ai juste essayé d'installer Matplotlib la version 1.1.0 de la source, mais Python pense toujours que j'ai la version 0.99.1.1. Pourrais-je besoin de désinstaller l'ancienne version, ou de modifier une variable de chemin quelque part?
valeur alpha n'est pas plus de travail 🙁
OriginalL'auteur carla