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

Python中为合并数据后的分组箱线图添加两类图例

箱线图分组图例实现方案

直接合并DataFrame后绘制箱线图时,每列会自动生成单独的图例项,无法直接按原DataFrame分组显示图例。以下是两种可行的解决思路:

方法一:手动构建自定义图例

先绘制完整箱线图,为两组箱线设置对应颜色,再用matplotlib的Patch创建分组图例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib.patches import Patch

# 模拟数据(替换为你的真实数据)
df1 = pd.DataFrame(np.random.randn(60, 20))
df2 = pd.DataFrame(np.random.randn(60, 20))
df_combined = pd.concat([df1, df2], axis=1)

# 绘制箱线图,开启patch_artist以支持填充色
box_plot = plt.boxplot(df_combined.values, patch_artist=True)

# 为df1对应列(前20个)设置红色填充,df2对应列(后20个)设置金色填充
for patch in box_plot['boxes'][:20]:
    patch.set_facecolor('red')
for patch in box_plot['boxes'][20:]:
    patch.set_facecolor('gold')

# 创建自定义图例元素,仅保留分组标签
legend_elements = [
    Patch(facecolor='red', label='A'),
    Patch(facecolor='gold', label='B')
]
plt.legend(handles=legend_elements)

plt.show()

方法二:拆分DataFrame分别绘制

将两个原DataFrame分开绘制箱线图,指定位置避免重叠,直接用每组的第一个箱线元素生成图例:

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

# 模拟数据(替换为你的真实数据)
df1 = pd.DataFrame(np.random.randn(60, 20))
df2 = pd.DataFrame(np.random.randn(60, 20))

# 设置两组箱线的位置,确保不重叠
positions_df1 = np.arange(1, 21)
positions_df2 = np.arange(21, 41)

# 绘制df1的箱线图,红色填充
box1 = plt.boxplot(
    df1.values,
    positions=positions_df1,
    patch_artist=True,
    labels=[f'col_{i}' for i in range(1, 21)]
)
for patch in box1['boxes']:
    patch.set_facecolor('red')

# 绘制df2的箱线图,金色填充
box2 = plt.boxplot(
    df2.values,
    positions=positions_df2,
    patch_artist=True,
    labels=[f'col_{i}' for i in range(21, 41)]
)
for patch in box2['boxes']:
    patch.set_facecolor('gold')

# 用两组的第一个箱线元素创建图例
plt.legend([box1['boxes'][0], box2['boxes'][0]], ['A', 'B'])

plt.xticks(rotation=45)  # 可选:旋转x轴标签避免重叠
plt.show()

两种方案对比:

  • 方法一更适合已合并DataFrame的场景,无需调整位置,代码简洁。
  • 方法二更灵活,可单独控制两组箱线的样式和位置,适合需要对两组做差异化设置的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:31