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

求助:使用plt.scatter绘制分类变量空心散点图失败

解决Matplotlib散点图facecolors='none'不生效的问题

嘿,我太懂你这种明明按参数设置了却出不来预期效果的挫败感了!你想基于gender分类,用ChildrenHeight和ParentHeight画带不同边缘色的空心圆散点图,但代码里设了facecolors='none'还是实心圆,问题出在**c=y参数会覆盖你的填充色设置**上。

咱们来拆解下原因:当你用c=y来让散点颜色对应分类变量时,Matplotlib默认会把这个颜色同时应用到点的填充色和边缘色上,这时候你单独设置的facecolors='none'就被覆盖了,自然还是实心圆。

给你几个靠谱的解决办法,任选其一都能搞定:

方法1:改用edgecolors指定分类颜色

直接把颜色映射从c换成edgecolors,同时保留facecolors='none',这样边缘色会跟着gender分类走,填充色完全透明:

plt.scatter(X[:, 0], X[:, 1], edgecolors=y, marker='o', facecolors='none', cmap=plt.cm.Set1)

这个方法最直接,也完全符合你“不同边缘色空心圆”的需求。

方法2:用单数facecolor配合linewidths

如果你更习惯用c=y参数,可以把facecolors='none'换成单数的facecolor='none'(注意是单数形式!),同时加个linewidths参数让边缘更清晰,避免细线条看起来像实心:

plt.scatter(X[:, 0], X[:, 1], c=y, marker='o', facecolor='none', cmap=plt.cm.Set1, linewidths=1.5)

在Matplotlib里,单数形式的facecolor比复数facecolors优先级更高,能覆盖c参数带来的填充色设置。

额外小提示

如果你的Matplotlib版本比较旧(比如2.x及以下),参数行为可能和新版本有差异,建议升级到3.x以上的版本,能减少不少这类奇怪的兼容性问题。

试试上面的方法,你就能得到按gender区分边缘色的空心圆散点图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:07:11