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:
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?
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')
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()
Testé avec Matplotlib 2.0.0 et python 3.5.
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é.