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

如何为Matplotlib箱线图设置交替自定义填充色及中位数线颜色

问题

已通过以下代码生成数据与画布:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.DataFrame(np.random.normal(size=(15,4)))

# 重命名列
data.set_axis(['Column A', 'Column B', 'Column C', 'Column D'], axis=1, inplace=True)

# 创建画布
fig, axs = plt.subplots(2, figsize = (15,15))

# 指定颜色
colors = ['#002072', '#00BDF2'] 

需在axs[0]子图绘制箱线图,实现箱体按指定十六进制颜色交替填充,同时修改深蓝色箱体的中位数/均值线颜色以提升辨识度。

解决方案

利用matplotlib箱线图返回的组件对象,可直接修改箱体和线条样式,完整代码如下:

# 在axs[0]绘制箱线图,开启patch_artist以支持箱体填充色修改
boxplot = axs[0].boxplot(
    data.values,
    patch_artist=True,
    labels=data.columns,
    showmeans=True  # 可选:显示均值线
)

# 交替设置箱体填充色
for idx, patch in enumerate(boxplot['boxes']):
    patch.set_facecolor(colors[idx % len(colors)])

# 修改深蓝色箱体的中位数线颜色
# 将十六进制颜色转为matplotlib识别的RGB元组(0-1区间)
dark_blue_rgb = tuple(np.array([0, 32, 114])/255)
for idx, median_line in enumerate(boxplot['medians']):
    if boxplot['boxes'][idx].get_facecolor()[0] == dark_blue_rgb:
        median_line.set_color('#FFFFFF')  # 白色与深蓝色形成高对比度

# 可选:修改深蓝色箱体的均值线颜色
for idx, mean_line in enumerate(boxplot['means']):
    if boxplot['boxes'][idx].get_facecolor()[0] == dark_blue_rgb:
        mean_line.set_color('#FFFFFF')

plt.show()

关键说明

  • patch_artist=True:这是修改箱体填充色的前提,必须开启该参数,否则箱体无法设置填充色。
  • 颜色交替逻辑:通过idx % len(colors)实现循环使用指定的两种颜色,适配任意数量的列。
  • 线条颜色匹配:将十六进制深蓝色转为matplotlib识别的RGB元组,精准匹配对应箱体,再将中位数/均值线改为高对比度的白色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30