2016-05-16 51 views
-1

我的詞典列表:直方圖從詞典列表

list_of_dicts = [{'user':user1, 'yob':1984, 'saves':24, 'hidden':28}, 
{'user':user2, 'yob':1989, 'saves':7, 'hidden':51}, {...}, ...] 

我想使保存和隱藏在y軸和yob在x軸的堆疊柱狀圖。因此,直方圖應該按yob排序,並對列表中每個字典的保存或隱藏數量進行求和。例如,如果有3個字典,其中1998年的普通年份爲8,19和4,那麼1998年的總存款量應該是31,而1998年的存檔的存檔量應該是31高。因此,諸如:

plt.hist([list_of_dicts['yob']['saves'], list_of_dicts['yob']['hidden']], 
bins=45, stacked=True) 
plt.show() 

不確定在語法上做到這一點或如何正確訪問列表中的元素,任何人都可以幫助嗎?謝謝 *編輯:我知道你不能使用一個字符串(list_of_dicts ['yob'])爲一個列表建立索引,但那是我卡住並提出問題的地方。

回答

3

可以先把一切都在一個單一的字典,

master_dict = {} 
# initialize the arrays first 
for key in list_of_dicts[0]: 
    master_dict[key] = [d[key] for d in list_of_dicts] 

然後,通過'yob'使用pandas來斌:

import pandas as pd 
df = pd.DataFrame(master_dict) 
bins = numpy.linspace(df.yob.min(), df.yob.max(), 45) 
cut = pd.cut(df.yob, bins) 
group = df.groupby(cut) 

以下行給你其他每個字典的總和物品通過yob裝箱:

nsaves = group.saves.sum() 
nhidden = group.hidden.sum() 

然後您可以使用plt.stepplt.barplt.bar與上面定義的垃圾箱進行繪圖:

plt.step(bins[:-1], nsaves, color='r', where='pre') 
plt.step(bins[:-1], nhidden, color='b', where='pre')