如何用Python绘制堆叠柱状图展示各时段事件计数?
Python实现堆叠柱状图展示各时段事件计数
步骤1:数据预处理
首先需要将原始数据转换为小时-事件的计数矩阵,每个单元格对应某小时内某事件的发生次数,缺失的事件计数自动补0。可以用pandas.crosstab快速实现:
import pandas as pd import matplotlib.pyplot as plt # 原始数据 df = pd.DataFrame() df['hour']=['00:00', '00:00','01:00', '01:00','01:00','02:00','02:00','03:00','03:00','03:00','03:00','03:00','04:00','05:00','05:00','05:00'] df['event']=['abc','def','abc','def','ghj','def','klm','mno','klm','ghj','pqr','stu','def', 'abc','pqr','mno' ] # 生成小时-事件的计数交叉表 count_df = pd.crosstab(df['hour'], df['event'])
步骤2:绘制堆叠柱状图
直接调用DataFrame的plot方法,指定kind='bar'和stacked=True即可生成堆叠柱状图,再添加必要的标签和图例优化可读性:
# 绘制堆叠柱状图 ax = count_df.plot(kind='bar', stacked=True, figsize=(10,6)) # 设置图表属性 ax.set_title('各时段事件计数堆叠图') ax.set_xlabel('小时') ax.set_ylabel('事件计数') ax.legend(title='事件类型', bbox_to_anchor=(1.05, 1), loc='upper left') # 自动调整布局避免元素遮挡 plt.tight_layout() plt.show()
关键说明
pd.crosstab会自动统计每个小时下各事件的出现次数,未出现的事件会填充0,保证数据结构适配堆叠绘图需求。stacked=True是实现堆叠效果的核心参数,让同一小时的不同事件计数在柱子上叠加展示。- 将图例放在图表外侧(
bbox_to_anchor参数)可以避免遮挡柱子,提升图表清晰度。
内容的提问来源于stack exchange,提问作者mainburnerone
相关产品推荐
相关产品推荐

