2014-01-17 270 views
8

我創建了一個dictionary,它計算每個鍵的list中的出現次數,現在我想繪製其內容的直方圖。從字典中繪製直方圖

這是字典的內容我想繪製:

{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} 

到目前爲止,我寫了這個:

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() 

我試圖通過簡單地做

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

但這是結果:

enter image description here

我不知道爲什麼3條線會移動,我也希望直方圖以有序方式顯示。

有人可以告訴我該怎麼做嗎?

+1

你可以張貼'myDictionary'值的例子嗎? –

+0

@xndrme - 更新了字典值的問題 – Matteo

回答

13

可以使用函數繪製直方圖是這樣的:

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

或者你可以使用myDictionary就像這樣:

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

使用'keys'和'values'。這確保了訂單被保存。

+0

在一個標準的Python實現中,你不需要這樣做,就像[在這裏]解釋的那樣(https://docs.python.org/2/library/stdtypes.html ?highlight = dict#dict.items) –

+0

我想他的意思是使用'x,y = zip(myDictionary.items())' – travelingbones

8

使用Python 3,您需要使用list(your_dict.keys())代替your_dict.keys()(否則你得到TypeError: 'dict_keys' object does not support indexing):

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

使用Matplotlib 2.0.0和python 3.5進行測試。

FYI:Plotting a python dict in order of key values