如何绘制多个列表的直方图?

时间:2015-09-20 12:35:27

标签: python pandas matplotlib

我有一个包含13k Kickstarter项目的数据集及其在项目期间的推文。每个项目都包含一个列表,其中包含每天的推文数量,    例如[10, 2, 4, 7, 2, 4, 3, 0, 4, 0, 1, 3, 0, 3, 4, 0, 0, 2, 3, 2, 0, 4, 5, 1, 0, 2, 0, 2, 1, 2, 0]

我通过在31天内设置项目的持续时间来获取数据的子集,以便每个列表具有相同的长度,包含31个值。

这段代码打印了每条推文列表:

    for project in data:
        data[project]["tweets"] 

使用matplotlib绘制直方图的最简单方法是什么?我需要每天推文总数的频率分布。如何计算每个索引的值?使用Pandas这是一个简单的方法吗?

这些列表也可以在Pandas数据框中访问:

    df = pd.DataFrame.from_dict(data, orient='index')
    df1 = df[['tweets']]

1 个答案:

答案 0 :(得分:2)

直方图可能不是您需要的。如果你有一个数字列表(例如,人的智商)并且你想将每个数字归为一个类别(f.e.79-,80-99,100 +),这是一个很好的解决方案。将有3个箱子,每个箱子的高度将代表适合相应类别的数量。

在你的情况下,你已经拥有每个bin的高度,所以(据我所知)你想要的是一个看起来像直方图的 plot 。这个(据我所知)不受matplotlib的支持,并且需要使用matplotlib而不是它的预期用途。

如果你可以使用图而不是直方图,那就是你可以做的。

import matplotlib.pyplot as plt

lists = [data[project]["tweets"] for project in data] # Collect all lists into one
sum_list = [sum(x) for x in zip(*lists)] # Create a list with sums of tweets for each day

plt.plot(sum_list) # Create a plot for sum_list
plt.show() # Show the plot

如果你想使情节看起来像直方图,你应该这样做:

plt.bar(range(0, len(sum_list)), sum_list)

而不是plt.plot。