Seaborn residplot无法识别scatter_kws中的hue参数问题
解决Seaborn residplot使用hue参数的报错问题
错误原因
你碰到的AttributeError是因为scatter_kws是用来传递给matplotlib底层scatter()函数的参数,而hue是Seaborn特有的分组参数,matplotlib的PathCollection.set()方法并不支持这个参数,所以把hue嵌套进scatter_kws里必然会报错。
正确写法(Seaborn 0.11.0及以上版本)
从Seaborn 0.11.0版本开始,residplot已经原生支持hue参数,不需要放在scatter_kws里,直接作为顶层参数传入即可:
tips = sns.load_dataset("tips") sns.residplot(data=tips, x="total_bill", y="tip", hue="sex")
旧版本兼容方案(Seaborn低于0.11.0)
如果你的Seaborn版本较旧,还不支持hue参数,可以用以下两种方式实现需求:
方式1:手动计算残差后用scatterplot
先拟合回归模型算出残差,再用支持hue的scatterplot绘制:
import seaborn as sns from sklearn.linear_model import LinearRegression tips = sns.load_dataset("tips") # 拟合线性回归模型计算残差 lr = LinearRegression().fit(tips[["total_bill"]], tips["tip"]) tips["residual"] = tips["tip"] - lr.predict(tips[["total_bill"]]) # 绘制带分组的残差图 sns.scatterplot(data=tips, x="total_bill", y="residual", hue="sex") # 添加残差参考线 plt.axhline(y=0, color="red", linestyle="--") plt.show()
方式2:循环分组绘制residplot
遍历sex的不同类别,分别绘制残差图并添加图例:
import seaborn as sns import matplotlib.pyplot as plt tips = sns.load_dataset("tips") # 按性别分组绘制残差图 for sex in tips["sex"].unique(): subset = tips[tips["sex"] == sex] sns.residplot(data=subset, x="total_bill", y="tip", label=sex) plt.legend(title="Sex") plt.show()
内容的提问来源于stack exchange,提问作者montoisky
相关产品推荐
相关产品推荐

