如何用Python绘制频率图:基于时段的行为频次可视化问题
如何用Python绘制基于时段的行为频率图
1. 数据准备与频次统计
先用pandas处理数据,通过交叉表统计每个时段(AM/PM)下不同行为(True/False)的频次:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 构造示例数据(替换为你的真实数据即可) data = { '时段': ['AM', 'AM', 'PM', 'AM', 'PM', 'PM', 'AM', 'PM', 'AM', 'PM'], '行为': [True, False, True, True, False, True, False, False, True, True] } df = pd.DataFrame(data) # 统计各时段-行为组合的频次 freq_table = pd.crosstab(df['时段'], df['行为']) print(freq_table)
运行后会输出如下统计结果:
行为 False True 时段 AM 2 3 PM 2 3
2. 绘制频率图
方法一:matplotlib分组条形图
直接基于统计好的频次表绘制,直观对比时段内的行为频次:
freq_table.plot(kind='bar', figsize=(8, 5), rot=0) plt.title('不同时段的行为频次分布') plt.xlabel('时段') plt.ylabel('频次') plt.legend(title='行为状态') plt.tight_layout() plt.show()
方法二:seaborn快速统计绘图
无需提前统计频次,直接基于原始数据生成美观的分组条形图:
plt.figure(figsize=(8, 5)) sns.countplot(data=df, x='时段', hue='行为') plt.title('不同时段的行为频次分布') plt.xlabel('时段') plt.ylabel('频次') plt.legend(title='行为状态') plt.tight_layout() plt.show()
3. 进阶:展示相对频率(占比)
如果需要查看各时段内行为的占比而非绝对频次,可对统计结果做归一化处理:
freq_percent = freq_table.div(freq_table.sum(axis=1), axis=0) * 100 freq_percent.plot(kind='bar', stacked=True, figsize=(8, 5), rot=0) plt.title('不同时段的行为占比分布') plt.xlabel('时段') plt.ylabel('占比 (%)') plt.legend(title='行为状态') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Rea101
相关产品推荐
相关产品推荐

