122 votes

Tracer une barre avec matplotlib en utilisant un dictionnaire

Existe-t-il un moyen de tracer un diagramme à barres en utilisant matplotlib en utilisant des données provenant directement d'un dict ?

Ma dictée ressemble à ça :

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 fonctionner, mais ce n'est pas le cas.

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

7voto

anil Points 63

Je charge souvent le dict dans un DataFrame pandas puis j'utilise la fonction plot du DataFrame.
Voici la phrase clé :

pandas.DataFrame(D, index=['quantity']).plot(kind='bar')

resulting plot

6voto

rwilsker Points 89

Pourquoi ne pas simplement :

import seaborn as sns

sns.barplot(list(D.keys()), list(D.values()))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X