如何在Matplotlib中合并子图并绘制单张堆叠直方图?
实现单张堆叠直方图替代多子图分组直方图
你原来的df['created'].hist(by=df['gadgetTypeId'])会按gadgetTypeId生成独立子图,要得到单张堆叠直方图,不需要依赖pandas的by参数,而是先手动分组数据,再用Matplotlib的hist()函数实现堆叠效果,具体步骤如下:
1. 按分组字段提取数据
用groupby按gadgetTypeId分组,把每个组的created列数据单独提取出来,同时收集对应的分组标签:import pandas as pd import matplotlib.pyplot as plt # 从MongoDB获取数据并转为DataFrame cursor = db.gadgets.find() df = pd.DataFrame(cursor) # 按gadgetTypeId分组,提取各组的created数据 groups = df.groupby('gadgetTypeId')['created'] data_list = [] label_list = [] for type_id, group_data in groups: data_list.append(group_data) label_list.append(f"Type {type_id}")2. 绘制堆叠直方图
调用plt.hist()时,传入分组后的数据集列表,设置stacked=True开启堆叠模式,再添加图例、坐标轴标签等:plt.figure(figsize=(16,10)) # 绘制堆叠直方图,传入数据列表和标签 plt.hist(data_list, stacked=True, label=label_list) # 配置图表元素 plt.legend(title="Gadget Type ID") plt.xlabel("Created Date") plt.ylabel("Count") plt.title("Stacked Histogram of Creation Dates by Gadget Type") plt.show()
关键说明
- 不需要使用
by参数,手动分组后直接给Matplotlib传多组数据即可实现分组效果 stacked=True是实现堆叠的核心参数,它会把不同组的直方图在同一坐标区域内堆叠显示- 如果
created是日期类型,Matplotlib会自动处理日期轴的显示,若需要自定义格式,可额外配置plt.gcf().autofmt_xdate()来优化日期标签排版
内容的提问来源于stack exchange,提问作者Irina Rapoport
相关产品推荐
相关产品推荐

