You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:27:35