2014-01-31 68 views
12

我有一個包含1000個元素及其各自的頻率的數據集。我需要繪製排名前10的元素的直方圖。
我所做的:無法使用彈性類型執行縮小plt.hist

top_words = Counter(my_data).most_common() 
    top_words_10 = top_words[:10] 
    plt.hist(top_words_10,label='True')  

,並得到這個錯誤:

TypeError         
    Traceback (most recent call last) 
<ipython-input-29-ff974b3a2354> in <module>() 
     5 print top_words[:10] 
     6 
----> 7 plt.hist(top_words_10)  
C:\Anaconda\lib\site-packages\numpy\core\_methods.pyc in _amin(a, axis, out, keepdims) 
    12 def _amin(a, axis=None, out=None, keepdims=False): 
    13  return um.minimum.reduce(a, axis=axis, 
---> 14        out=out, keepdims=keepdims) 
    15 
    16 def _sum(a, axis=None, dtype=None, out=None, keepdims=False): 


TypeError: cannot perform reduce with flexible type 

任何想法?我的數據是這樣的:

[(' whitefield', 65299), (' bellandur', 57061), (' kundalahalli', 51769), (' marathahalli', 50639), (' electronic city', 44041), (' sarjapur road junction', 34164), (' indiranagar 2nd stage', 32459), (' malleswaram', 32171), (' yelahanka main road', 28901), (' domlur', 28869)] 

回答

19

由於您需要將數據轉換爲數值類型,因此會出現此錯誤。你的數組包含字符串。

import matplotlib.pyplot as plt 
import numpy as np 

data = [(' whitefield', 65299), (' bellandur', 57061), (' kundalahalli', 51769), (' marathahalli', 50639), 
(' electronic city', 44041), (' sarjapur road junction', 34164), (' indiranagar 2nd stage', 32459), 
(' malleswaram', 32171), (' yelahanka main road', 28901), (' domlur', 28869)] 

freequency = [] 
words = [] 

for line in data: 
    freequency.append(line[1]) 
    words.append(line[0]) 

y_axis = np.arange(1, len(words) + 1, 1) 

plt.barh(y_axis, freequency, align='center') 
plt.yticks(y_axis, words) 
plt.show() 
+0

thanx a ton ..it works awesome ..我怎麼能交換軸???我想它在垂直方式..並pleaase解釋for循環.. –

+0

看到這個答案[link](http://stackoverflow.com/questions/17074772/using-text-on-y-axis-in-matplotlib- INSTEAD-OF-數)。在for循環中,我只是用元組解析列表:'('whitefield',65299)',通過索引獲取元素並將它們存儲在列表中。 –

+0

應該有一些圖表將分類值列表作爲輸入並繪製計數。這應該是開箱即用的,它是人們可以想象的最簡單的圖表。 – ketan

0

的問題是,plt.hist嘗試使用nmupy.hist,使從你在傳遞數據直方圖

你只想使用bar

import matplotlib.pyplot as plt 
fig, ax = plt.subplots(1, 1) 
words, counts = zip(*data32) # unpack pairs into two lists 
ax.bar(range(len(counts)), words, align='center') 
ax.set_xticks(range(len(counts)) 
ax.set_xticklabels(words) # this is about the _only_ use for set_xticklabels 
plt.draw 

。見this exampledocumentation

+0

hi..thnx但我得到一個錯誤文件 「」,第6個 ax.set_xticklabels(字)#這是關於_only_使用用於set_xticklabels ^ 的SyntaxError :無效的語法 –

+0

有缺少的) – tacaswell

+0

它在哪裏丟失?對不起,但我是一個新手,所以這一切註冊第一個tym;) –

相關問題