Seaborn:注释线性回归方程

Posted

技术标签:

【中文标题】Seaborn:注释线性回归方程【英文标题】:Seaborn: annotate the linear regression equation 【发布时间】:2018-02-04 18:19:37 【问题描述】:

我尝试为波士顿数据集拟合 OLS。我的图表如下所示。

如何在直线上方或图中某处标注线性回归方程?如何在 Python 中打印方程式?

我对这个领域相当陌生。目前正在探索python。如果有人可以帮助我,它将加快我的学习曲线。

非常感谢!

我也试过这个。

我的问题是 - 如何以方程式格式在图表中注释上述内容?

【问题讨论】:

【参考方案1】:

更简单的语法.. 相同的结果。

    import seaborn as sns
    import matplotlib.pyplot as plt
    from scipy import stats
        
    slope, intercept, r_value, pv, se = stats.linregress(df['alcohol'],df['magnesium'])
        
    sns.regplot(x="alcohol", y="magnesium", data=df, 
      ci=None, label="y=0:.1fx+1:.1f".format(slope, intercept)).legend(loc="best")

【讨论】:

这里当然也可以为python3使用f字符串【参考方案2】:

要在使用seaborn lmplot 的情况下注释多条线性回归线,您可以执行以下操作。

 import pandas as pd 
 import seaborn as sns
 import matplotlib.pyplot as plt 

df = pd.read_excel('data.xlsx')
# assume some random columns called EAV and PAV in your DataFrame 
# assume a third variable used for grouping called "Mammal" which will be used for color coding
p = sns.lmplot(x=EAV, y=PAV,
        data=df, hue='Mammal', 
        line_kws='label':"Linear Reg", legend=True)

ax = p.axes[0, 0]
ax.legend()
leg = ax.get_legend()
L_labels = leg.get_texts()
# assuming you computed r_squared which is the coefficient of determination somewhere else
slope, intercept, r_value, p_value, std_err = stats.linregress(df['EAV'],df['PAV'])
label_line_1 = r'$y=0:.1fx+1:.1f'.format(slope,intercept)
label_line_2 = r'$R^2:0:.2f$'.format(0.21) # as an exampple or whatever you want[!
L_labels[0].set_text(label_line_1)
L_labels[1].set_text(label_line_2)

结果:

【讨论】:

我不明白为什么你在 label_line_2 中放入 0.21(“或任何你想要的”,用你的话来说),而不是 stats.linregress 提供的实际 r_value**2。 因为这是一个例子 :) 当然你可以这样做。问题是注释线性回归线,而不是如何在注释中写 R 平方值。【参考方案3】:

您可以使用线性拟合系数来制作图例,如下例所示:

import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

tips = sns.load_dataset("tips")

# get coeffs of linear fit
slope, intercept, r_value, p_value, std_err = stats.linregress(tips['total_bill'],tips['tip'])

# use line_kws to set line label for legend
ax = sns.regplot(x="total_bill", y="tip", data=tips, color='b', 
 line_kws='label':"y=0:.1fx+1:.1f".format(slope,intercept))

# plot legend
ax.legend()

plt.show()

如果您使用更复杂的拟合功能,您可以使用乳胶通知:https://matplotlib.org/users/usetex.html

【讨论】:

你怎么知道 regplot 线反映了 scipy.stats 回归参数?令人惊讶的是,seaborn 没有提供它计算出来的参数来制作他们的情节...... @joaquin 不幸的是,他们也不打算这样做***.com/a/47062135/1831518

以上是关于Seaborn:注释线性回归方程的主要内容,如果未能解决你的问题,请参考以下文章

什么是线性回归方程?

一元线性回归模型和一元线性回归方程之间的区别

多元线性回归方程公式

一元线性回归方程的计算步骤

seaborn 的 lmplot 的输出没有绘制散点图和线性回归

如何对已经拟出的一元线性回归方程进行检验?标准化残差图怎么判断?