我有一个包含 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/