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

如何在同一图表中分组绘制子类别互异的多组堆叠条形图

不等分段类别堆叠条形图实现方案

常规堆叠条形图教程默认所有条形的子类别完全对齐,是为了满足跨组同类别对比的需求,你这个场景属于单组构成展示,不需要跨组对齐行政区类别,不用硬套宽表逻辑,按下面的步骤实现即可:

  • 第一步:用长表结构存储数据
    不要做「土地区域为行、行政区为列」的宽表,也不需要给不同区域的行政区补空对齐,直接存三字段的长表即可:

    • 土地区域名称:对应x轴上的5个独立条形
    • 行政区名称:对应每个条形内的分段标签
    • 统计数值:对应该分段的长度
      参考数据格式如下:
    土地区域,行政区,统计值
    西北片区,张庄,124
    西北片区,李村,89
    西北片区,王店,156
    东南片区,赵屯,97
    东南片区,钱集,132
    ...
    

    每个土地区域对应多少个行政区,就存多少行数据即可,没有行数限制。

  • 第二步:逐段计算位置绘制条形
    不要直接调用封装好的固定类别堆叠绘图函数,不管你用Python的matplotlib/plotly、R的ggplot2还是Excel、BI工具,核心逻辑都是手动计算每个分段的起始位置:

    1. 按土地区域分组,拆分出每个区域对应的行政区、数值列表
    2. 对单个区域的数值做累计计算,每个分段的底部起始坐标 = 该区域内排在它前面所有分段的数值之和,第一个分段的底部坐标为0
    3. 循环绘制每个分段:传入对应分段的高度、底部坐标,同步给每个分段绑定对应的行政区标签
      以Python matplotlib为例,最小实现代码如下:
    import matplotlib.pyplot as plt
    import pandas as pd
    
    # 读入长表格式数据
    df = pd.read_csv("你的数据文件.csv")
    fig, ax = plt.subplots(figsize=(10, 7))
    region_list = df["土地区域"].unique()
    x_position = range(len(region_list))
    
    for x_idx, region in enumerate(region_list):
        region_subset = df[df["土地区域"] == region].reset_index(drop=True)
        current_bottom = 0
        for _, row in region_subset.iterrows():
            seg_val = row["统计值"]
            # 绘制单个分段
            ax.bar(x_idx, seg_val, bottom=current_bottom, edgecolor="white", width=0.6)
            # 分段中心位置添加行政区标签
            ax.text(x_idx, current_bottom + seg_val/2, row["行政区"], ha="center", va="center", fontsize=8)
            current_bottom += seg_val
    
    ax.set_xticks(x_position)
    ax.set_xticklabels(region_list)
    plt.tight_layout()
    plt.show()
    
  • 第三步:标签展示优化
    因为各区域分段数量不等,部分分段宽度可能较窄,可根据实际效果调整展示方式:

    • 对数值过小、内部放不下文字的分段,把标签移到条形外侧,用细引线连接对应分段
    • 同一土地区域下的分段使用同色系不同深浅的颜色填充,不同区域的色系做明显区分,降低视觉混淆
    • 如果行政区总数量较多,静态图内标签拥挤的话,可以加交互效果:悬浮到对应分段时显示行政区名称和具体数值;静态输出则配套按区域分组的图例即可。

这个方案没有子类别数量限制,不管每个区域下辖5个还是9个行政区,都能自动适配堆叠,不需要提前对齐类别。

内容的提问来源于stack exchange,提问作者PhDavey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:15:30