Tracer une barre à l'aide de matplotlib à l'aide d'un dictionnaire

Est-il possible de tracer un diagramme en barres à l'aide de matplotlib en utilisant les données directement à partir d'un dict?

Mon dict ressemble à ceci:

D = {u'Label1':26, u'Label2': 17, u'Label3':30}

Je m'attendais à

fig = plt.figure(figsize=(5.5,3),dpi=300)
ax = fig.add_subplot(111)
bar = ax.bar(D,range(1,len(D)+1,1),0.5)

pour travailler, mais il ne le fait pas.

Voici l'erreur:

>>> ax.bar(D,range(1,len(D)+1,1),0.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 4904, in bar
    self.add_patch(r)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1570, in add_patch
    self._update_patch_limits(p)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1588, in _update_patch_limits
    xys = patch.get_patch_transform().transform(vertices)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 580, in get_patch_transform
    self._update_patch_transform()
  File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 576, in _update_patch_transform
    bbox = transforms.Bbox.from_bounds(x, y, width, height)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/transforms.py", line 786, in from_bounds
    return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found
  • Pouvez-vous nous expliquer plus précisément ce qui ne fonctionne pas? Ne vous obtenez une exception? Ce que l'exception? Partager autant d'informations que possible.
  • désolé, j'ai mis à jour la question avec l'erreur, il montre... quelque chose au sujet de chaîne ou de tampon... je ne comprends pas ce message d'erreur.
  • Il n'est pas clair ce que vous voulez atteindre, mais dans ax.bar(D,range(1,len(D)+1,1),0.5) le premier argument doit être une liste de nombres, dans votre cas D.values().
  • Je sais que ça ne marche pas... mais ce que j'ai essayé de faire est de simplement tracer un graphique à barres avec une seule ligne, en lui donnant les chaînes et les valeurs à la fois. J'difficile peut-être il ya un moyen d'ajouter des données et des étiquettes en même temps... mais D.values() était aussi nouveau pour moi et c'est plutôt cool.
  • Un one-liner n'est pas possible pour ce, au moins à ma connaissance.
  • Vous pourriez présenter une demande de fonctionnalité pour la page github pour cela, parce qu'il semble utile.
  • Utile ou pas, il semble "naturel" 🙂

InformationsquelleAutor otmezger | 2013-04-15