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

如何自定义Seaborn散点图中颜色分组的图例标记样式

修改Seaborn散点图中Hue分组的图例标记样式

当使用Seaborn的scatterplot同时通过hue(对应Set列)和style(对应Test_Type列)区分数据时,默认Hue分组的图例标记会沿用Style的样式。要单独将Hue分组的图例标记改为方形,同时保留Style分组的标记样式,可以通过手动修改图例元素实现,以下是完整解决方案:

完整代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 构造数据(修正了原数据中"Set 1 "的空格问题)
d = {'x': [1, 2, 3, 4], 
     'y': [2,4,6,8], 
     'Set': ["Set 1", "Set 1", "Set 2", "Set 2"], 
     "Test_Type": ["Direct", "Natural","Direct", "Natural"]}
df = pd.DataFrame(data=d)

# 绘制散点图并获取Axes对象
ax = sns.scatterplot(data=df, x="x", y="y", hue="Set", style="Test_Type")

# 设置坐标轴和标签
plt.axis(ymin=0)
plt.xlabel("x values")
plt.ylabel("y values")

# 获取图例的手柄和标签
handles, labels = ax.get_legend_handles_labels()

# 筛选出Hue分组(Set)对应的图例索引
hue_label_indices = [idx for idx, label in enumerate(labels) if "Set" in label]

# 将Hue分组的图例标记改为方形(marker='s'代表方形)
for idx in hue_label_indices:
    handles[idx].set_marker('s')

# 更新图例
ax.legend(handles=handles, labels=labels)

plt.show()

关键步骤说明

  1. 获取图例元素:通过ax.get_legend_handles_labels()获取所有图例的图形手柄和对应标签。
  2. 筛选目标图例:根据标签内容识别出属于Hue分组(Set)的图例条目,避免误修改Style分组的元素。
  3. 修改标记样式:遍历目标图例条目,使用set_marker('s')将标记改为方形(Matplotlib中s对应方形标记)。
  4. 更新图例:用修改后的手柄和标签重新设置图例,确保样式生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:04:58