繁体   English   中英

字典列表中python中的直方图

[英]Histogram in python from a list of dictionaries

我有一个字典列表:

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

我想制作一个保存的堆叠直方图,并在y轴上隐藏,在x轴上隐藏yob。 因此,直方图应按yob进行分类,并对列表中每个字典的保存或隐藏数目进行求和。 例如,如果有3个具有共同yob 1998的字典,且保存数分别为8、19和4,则yob 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'])为列表建立索引,但这就是我遇到的问题。

您可以先将所有内容放在一个字典中,

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

然后,使用pandas通过'yob'进行'yob'

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的其他每个字典项的yob

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

然后您可以使用plt.stepplt.bar使用上面定义的plt.step plt.bar

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM