如何基于DataFrame的两个关联列绘制堆叠直方图
按用户维度绘制License类型堆叠计数图
你可以通过交叉统计+pandas内置堆叠绘图的方式快速实现需求,不需要额外复杂处理:
注:你的场景是分类维度的计数堆叠,实际用堆叠柱状图实现即可,直方图适用于连续值分布展示。
实现步骤
- 先对原始DataFrame做透视统计,得到每个
User对应不同License_type的计数结果 - 调用pandas绘图接口,指定堆叠参数即可生成目标图表
完整可运行代码
import pandas as pd import matplotlib.pyplot as plt # 1. 加载/构造你的数据集 raw_data = [ ["A1", "U1"], ["A2", "U1"], ["A2", "U1"], ["A2", "U1"], ["A3", "U1"], ["A4", "U1"], ["A1", "U2"], ["A2", "U2"], ["A2", "U2"], ["A2", "U2"], ["A2", "U3"], ["A4", "U3"] ] df = pd.DataFrame(raw_data, columns=["License_type", "User"]) # 2. 交叉统计每个用户下各License类型的数量 license_count = pd.crosstab(index=df["User"], columns=df["License_type"]) # 3. 绘制堆叠柱状图 license_count.plot( kind="bar", stacked=True, figsize=(8, 6), edgecolor="white" # 可选:给堆叠块加白边,和示例图视觉效果一致 ) # 可选:调整图表标注 plt.ylabel("Count") plt.xlabel("User") plt.xticks(rotation=0) plt.legend(title="License_type", bbox_to_anchor=(1.02, 1), loc="upper left") plt.tight_layout() plt.show()
效果说明
运行代码后生成的图表X轴为U1/U2/U3三个用户分类,每个柱子由不同颜色的License类型计数块堆叠组成,数值和你提供的原始数据完全匹配,和参考示例效果一致。
内容的提问来源于stack exchange,提问作者Apoorva Singh
相关产品推荐
相关产品推荐


