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

如何在seaborn swarmplot中为hue显示分组图例?

解决颜色分组与图例合并的方法

要实现y4值的颜色分组,让图例只显示分组名称而非单个y4值,有两种常用方案:

方法一:先给数据添加分组列(推荐)

直接在原始数据中新增一个分组字段,把需要归为一组的y4值映射到同一组名,再用这个分组字段作为hue参数:

  1. 先处理数据(根据你的y4实际取值调整分组规则):
import pandas as pd

# 示例1:如果y4是数值型,按区间分组
result['y4_group'] = pd.cut(
    result['y4'],
    bins=[-float('inf'), 10, 20, float('inf')],  # 自定义区间
    labels=['低区间组', '中区间组', '高区间组']
)

# 示例2:如果y4是分类型,按指定类别合并
# result['y4_group'] = result['y4'].map({
#     '类别1': '甲组',
#     '类别2': '甲组',
#     '类别3': '乙组',
#     '类别4': '乙组'
# })
  1. 修改绘图代码,用新的分组字段作为hue:
import seaborn as sns
import matplotlib.pyplot as plt

ax1 = sns.swarmplot(
    x='y', y='Fos', data=result,
    hue="y4_group",  # 这里用分组字段
    palette="Spectral", alpha=0.8
)
plt.title('Y4')
# 调整图例位置到图外
sns.move_legend(ax1, "upper left", bbox_to_anchor=(1, 1))
plt.show()

方法二:自定义调色盘+手动修改图例(无需修改原始数据)

如果不想改动原始数据,可以给同一组的y4值分配相同颜色,再手动合并图例项:

import seaborn as sns
import matplotlib.pyplot as plt

# 定义y4值到分组和颜色的映射,按你的需求调整
group_color_map = {
    'y4值1': ('甲组', '#ff7f0e'),
    'y4值2': ('甲组', '#ff7f0e'),
    'y4值3': ('乙组', '#1f77b4'),
    'y4值4': ('乙组', '#1f77b4')
}

# 提取每个y4值对应的颜色
palette = {k: v[1] for k, v in group_color_map.items()}

# 绘制 swarmplot
ax1 = sns.swarmplot(
    x='y', y='Fos', data=result,
    hue="y4", palette=palette, alpha=0.8
)
plt.title('Y4')

# 合并相同分组的图例项
handles, labels = ax1.get_legend_handles_labels()
unique_groups = {}
for label, handle in zip(labels, handles):
    group_name = group_color_map[label][0]
    if group_name not in unique_groups:
        unique_groups[group_name] = handle

# 更新图例
ax1.legend(
    handles=list(unique_groups.values()),
    labels=list(unique_groups.keys()),
    loc="upper left", bbox_to_anchor=(1, 1)
)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:35:31