如何自定义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()
关键步骤说明
- 获取图例元素:通过
ax.get_legend_handles_labels()获取所有图例的图形手柄和对应标签。 - 筛选目标图例:根据标签内容识别出属于Hue分组(
Set)的图例条目,避免误修改Style分组的元素。 - 修改标记样式:遍历目标图例条目,使用
set_marker('s')将标记改为方形(Matplotlib中s对应方形标记)。 - 更新图例:用修改后的手柄和标签重新设置图例,确保样式生效。
内容的提问来源于stack exchange,提问作者innakigc
相关产品推荐
相关产品推荐

