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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:47:32