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

如何为堆叠条形图中特定的'None'分组分配自定义颜色

解决堆叠条形图中单独设置'None'合并症的颜色问题

问题分析

你之前的尝试失败原因:

  • 尝试1:pandas的堆叠条形图color参数是给每一列指定统一颜色,而非给每行的堆叠块单独传颜色列表,所以传入二维列表会触发格式错误。
  • 尝试2:循环里每次都直接覆盖colors变量,最终只会保留最后一个合并症对应的颜色,导致所有块都用默认色。

正确实现代码

要实现指定行的堆叠块单独变色,需要手动用matplotlib绘制每个堆叠部分,而非依赖pandas的plot直接传color参数:

import matplotlib.pyplot as plt
from matplotlib.patches import Patch

# 你的原有数据处理部分保持不变
comorbidity_counts_by_gender = df.groupby('sex_female')[comorbidity_columns].sum()
comorbidity_counts_by_gender = comorbidity_counts_by_gender[comorbidity_counts_by_gender.sum().sort_values(ascending=True).index].T

# 定义颜色规则:None项用特殊色,其他用默认色
color_rules = {
    'None': ('royalblue', 'lightcoral'),  # (男性颜色, 女性颜色)
    'default': ('lightskyblue', 'pink')
}

y_positions = range(len(comorbidity_counts_by_gender))
bar_width = 0.8

fig, ax = plt.subplots(figsize=(8, 8))

# 绘制男性的堆叠条形(左侧)
male_values = comorbidity_counts_by_gender.iloc[:, 0]
male_colors = [color_rules.get(idx, color_rules['default'])[0] for idx in comorbidity_counts_by_gender.index]
ax.barh(y_positions, male_values, bar_width, color=male_colors)

# 绘制女性的堆叠条形(右侧,基于男性条形的宽度堆叠)
female_values = comorbidity_counts_by_gender.iloc[:, 1]
female_colors = [color_rules.get(idx, color_rules['default'])[1] for idx in comorbidity_counts_by_gender.index]
ax.barh(y_positions, female_values, bar_width, left=male_values, color=female_colors)

# 配置图表元素
ax.set_yticks(y_positions)
ax.set_yticklabels(comorbidity_counts_by_gender.index)
ax.set_title('Distribution of Comorbidities by Gender')
ax.set_xlabel('Count')
ax.set_ylabel('')

# 自定义图例,区分常规性别色和None项的特殊色
legend_elements = [
    Patch(facecolor='lightskyblue', label='Male'),
    Patch(facecolor='pink', label='Female'),
    Patch(facecolor='royalblue', label='Male (No Comorbidity)'),
    Patch(facecolor='lightcoral', label='Female (No Comorbidity)')
]
ax.legend(handles=legend_elements, title='Gender & Status', loc="upper left", bbox_to_anchor=(1, 1), frameon=False)

plt.show()

代码说明

  1. 手动拆分男性和女性的数值,分别为每个合并症匹配对应颜色;
  2. 女性条形通过left参数基于男性条形的宽度实现堆叠;
  3. 自定义图例清晰区分常规性别颜色和无合并症的特殊颜色,符合你突出'None'项的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:24:58