sns.scatterplot图例异常求助:为何y_1会多出0标签?
问题分析与解决
嘿,这个问题其实是Seaborn处理hue参数的默认逻辑导致的,很容易搞明白:
核心原因
当你用sns.scatterplot()的hue参数区分数据点时,Seaborn会直接提取你传入数组的唯一值来生成图例标签:
- 你用
y_1的时候,它的唯一值是-1和+1,所以图例就显示这两个标签; - 换成
y_2后,数组里的取值变成了0和+1,Seaborn自然就把这两个值作为图例标签展示出来了。
你觉得“多出了0标签”,其实只是因为y_2本身的取值就是0和1,这完全是Seaborn按照你提供的数据生成的正常结果,不是什么bug哦。
如果想统一图例标签(比如把0改成-1)
要是你希望用y_2绘图时,图例仍然显示-1而不是0,有两种简单方法:
方法1:提前映射数组取值
在传入hue之前,把y_2里的0替换成-1就行:
y_2_mapped = np.where(y_2 == 0, -1, y_2) sns.scatterplot(x=x[:,1], y=x[:,0], hue=y_2_mapped)
方法2:手动修改图例
先绘图,然后获取图例对象直接修改标签文本:
ax = sns.scatterplot(x=x[:,1], y=x[:,0], hue=y_2) handles, labels = ax.get_legend_handles_labels() # 把对应0的第一个标签改成-1 ax.legend(handles=handles, labels=['-1', '+1'])
小提示
另外,你的代码在较新的Seaborn版本里可能会弹出警告,现在官方推荐用关键字参数明确指定x和y,这样能避免参数顺序搞混的问题:
# 更规范的写法 sns.scatterplot(x=x[:,1], y=x[:,0], hue=y_1)
内容的提问来源于stack exchange,提问作者Salomon Kabongo
相关产品推荐
相关产品推荐

