web-dev-qa-db-fra.com

Tracer un histogramme à partir d'un dictionnaire

J'ai créé une dictionary qui compte les occurrences dans une list de chaque clé et j'aimerais maintenant tracer l'histogramme de son contenu.

Voici le contenu du dictionnaire que je veux tracer:

{1: 27, 34: 1, 3: 72, 4: 62, 5: 33, 6: 36, 7: 20, 8: 12, 9: 9, 10: 6, 11: 5, 12: 8, 2: 74, 14: 4, 15: 3, 16: 1, 17: 1, 18: 1, 19: 1, 21: 1, 27: 2}

Jusqu'ici j'ai écrit ceci:

import numpy as np
import matplotlib.pyplot as plt

pos = np.arange(len(myDictionary.keys()))
width = 1.0     # gives histogram aspect to the bar diagram

ax = plt.axes()
ax.set_xticks(pos + (width / 2))
ax.set_xticklabels(myDictionary.keys())

plt.bar(myDictionary.keys(), ******, width, color='g')
#                            ^^^^^^ what should I put here?
plt.show()

J'ai essayé en faisant simplement

plt.bar(myDictionary.keys(), myDictionary, width, color='g')

mais c'est le résultat:

enter image description here

et je ne sais pas pourquoi les 3 barres sont décalées et j'aimerais aussi que l'histogramme soit affiché de manière ordonnée.

Quelqu'un peut-il me dire comment le faire?

14
Matteo

Vous pouvez utiliser la fonction pour tracer des histogrammes comme ceci:

a = np.random.random_integers(0,10,20) #example list of values
plt.hist(a)
plt.show()

Ou vous pouvez utiliser myDictionary comme ceci:

plt.bar(myDictionary.keys(), myDictionary.values(), width, color='g')
23
Alvaro Fuentes

Avec Python 3, vous devez utiliser list(your_dict.keys()) au lieu de your_dict.keys() (sinon, vous obtenez TypeError: l'objet 'dict_keys' ne prend pas en charge l'indexation ):

import matplotlib.pyplot as plt

dictionary = {1: 27, 34: 1, 3: 72, 4: 62, 5: 33, 6: 36, 7: 20, 8: 12, 9: 9, 10: 6, 11: 5, 
              12: 8, 2: 74, 14: 4, 15: 3, 16: 1, 17: 1, 18: 1, 19: 1, 21: 1, 27: 2}
plt.bar(list(dictionary.keys()), dictionary.values(), color='g')
plt.show()

 enter image description here

Testé avec Matplotlib 2.0.0 et python 3.5.

FYI: Tracer un dict en python par ordre de valeurs clés

11
Franck Dernoncourt
values = [] #in same order as traversing keys
keys = [] #also needed to preserve order
for key in myDictionary.keys():
  keys.append(key)
  values.append(myDictionary[key])

Utilisez 'clés' et 'valeurs'. Cela garantit que l'ordre est préservé. 

1
mcsilvio