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

如何使用Matplotlib绘制含大量类别的堆叠柱状图并区分各类别

解决方案

你直接给所有柱子传入统一的hatch参数会导致所有类别使用相同纹理,只要给每个类别单独分配不同纹理+自定义配色即可实现高区分度,具体实现代码如下:

import matplotlib.pyplot as plt
import pandas as pd

# 示例数据
dfa = pd.DataFrame({
    'type' : ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'],
    'value' : [2,3,4,2,5,3,6,5,3,1,3,5,7,5,3,5,4],
    'date' : [pd.to_datetime('2021-01-01')]*17
})

# 自定义17种不同填充纹理,刚好匹配17个类别
hatches = ['/', '\\', '|', '-', '+', 'x', 'o', 'O', '.', '*', '//', '\\\\', '||', '--', '++', 'xx', 'oo']
# 可选:自定义17种不同基础配色,搭配纹理区分度更高
colors = plt.get_cmap('tab20').colors[:17]

# 绘制堆叠柱状图
ax = dfa.set_index(['date','type']).unstack().plot.bar(
    stacked = True, 
    figsize=(12, 7),
    color=colors
)

# 给每个类别的柱子分配对应纹理
for container, hatch in zip(ax.containers, hatches):
    for patch in container:
        patch.set_hatch(hatch)

# 调整图例到图外避免遮挡
plt.legend(bbox_to_anchor=(1.01, 1), loc='upper left', borderaxespad=0)
plt.tight_layout()
plt.show()

优化提示

  • 如果类别数量超过17种,可以通过纹理+颜色+透明度组合的方式进一步扩展区分维度
  • 纹理密度可以通过重复符号调整,比如///比/密度更高,可根据视觉效果灵活调整

内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:09