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

标签 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']]

最佳答案

直方图可能不是您所需要的。如果您有一个数字列表(例如,人的智商)并且希望将每个数字归属于一个类别(例如 79-、80-99、100+),那么这是一个很好的解决方案。将有 3 个容器,每个容器的高度将代表适合相应类别的数字数量。

就您而言,您已经有了每个箱的高度,因此(据我了解)您想要的是一个看起来像直方图的。这(据我所知)不受 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。

关于python - 如何绘制多个列表的直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679481/

相关文章:

python - 为什么将一个列表连接到另一个列表会在内存中创建另一个对象,而其他操作会导致突变?

python - 添加重复序列值的列

python - 在行 pandas python 上使用部分字符串匹配返回 DataFrame 项

python - 将发散颜色居中至零

python - 使用 matplotlib 绘制热图

python - SQLAlchemy 使用关系()

python - 带空格的django查询参数

python - 绘制双曲面

python - 使用 keras、tensorflow 和 python 编写这种异国情调的神经网络架构

python - 查找 DataFrame 中相邻元素(行和列)的平均值