如何在seaborn线性回归联合图中更改线条颜色

20
根据Seaborn API所述,以下代码将生成一个线性回归图。
import numpy as np, pandas as pd; np.random.seed(0)
import seaborn as sns; sns.set(style="white", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg')
sns.plt.show()

然而,当数据点很多时,回归线就不再清晰可见了。我该如何更改它的颜色?我找不到内置的seaborn命令。

如果线在背景中(即在点的后面),我还想问如何将其移到前面。


如果seaborn返回了艺术家,那么这将非常容易。如果函数API中没有旋钮,则最好的方法是查看g.lines以尝试猜测回归线中的哪个艺术家,然后执行ln.set_color('k') - tacaswell
@tcaswell 感谢提示!不幸的是,AttributeError: 'JointGrid' object has no attribute 'lines' - n1000
1个回答

43

正如mwaskom所指出的那样,有几种方法。您可以将参数传递给联合绘图,但是在那里设置color会影响整个散点图:

import numpy as np, pandas as pd; np.random.seed(0)
import seaborn as sns#; sns.set(style="white", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg',
                  joint_kws={'color':'green'}) # Scatter and regression all green

在此输入图片描述

或者将线绘图关键字的字典传递给散点图关键字的字典。我阅读了 seaborn/linearmodels.py 来找出在哪里进行此操作,这本身就是有趣而且富有启发性的。嵌套字典:

g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg',
                  joint_kws={'line_kws':{'color':'cyan'}}) # Only regression cyan

在此输入图像描述

或者您可以访问绘制后的线并直接更改它。这取决于回归线是第一条绘制的线,因此可能会随着 seaborn 的更新而中断。这也在审美和教学上有所不同,因为您不会重新着色不确定性扩散。这是熟悉 JointGrid 对象及其其他交互方式的好方法。(也许有一些属性不能通过函数调用参数设置,尽管我想不出任何例外。)

g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg')
regline = g.ax_joint.get_lines()[0]
regline.set_color('red')
regline.set_zorder(5)

这里输入图片描述


1
这个可以运行,但最好使用 joint_kws 选项将颜色传递到绘图中。 - mwaskom
我认为这就是所有的方法了,@mwaskom。还有其他需要记录的吗? :) - cphlewis
我该如何使用最新的seaborn版本获得这个输出? - seralouk
现在可以与seaborn 0.11.1一起使用了;唯一的更改是最后一个选项,即红线。 - cphlewis
为什么它没有显示pearsonrp值? - Mehdi Abbassi
1
Seaborn曾经自动执行该操作,但现在不再支持了,@Mehdi Abassi。 (感谢您指出这一点; 我已更新图形。)最佳实践似乎是使用统计函数计算系数,然后自己添加文本字符串。 - cphlewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接