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:注释线性回归方程的主要内容,如果未能解决你的问题,请参考以下文章