使用 seaborn regplot 扩展回归线

Kār*_*sts 6 python matplotlib pandas seaborn

我进行了搜索,但没有找到重新分级 seaborn 库的答案。我还检查了lmplot()和的文档regplot(),但也没有找到。是否可以扩展和控制回归线的长度?默认情况下,seaborn 根据 x 轴的长度拟合回归线的长度。另一种选择是使用参数truncate=True——这会将回归线限制在数据范围内。其他选择?

在我的示例中,我希望将下回归线向下延伸到 x=0。而上面的那条线一直延伸到与下面那条线的交点。

例子

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

file = 'cobbles.csv'
df = pd.read_csv(file, sep=',')

sns.regplot(x='downward_temp', y='downward_heat', data=df, ci=None)
sns.regplot(x='upward_temp', y='upward_heat', data=df, ci=None, order=2)


plt.xlim([0,25])
plt.ylim([0,100])
plt.show()
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您在绘图之前知道您的 x 限制,您可以set_xlim在调用之前获取轴,regplot然后 seaborn 会将回归线和 CI 扩展到 xlim 的范围内。

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

file = 'cobbles.csv'
df = pd.read_csv(file, sep=',')

fig, ax = plt.subplots()

xlim = [0,25]
ax.set_xlim(xlim)

sns.regplot(x='downward_temp', y='downward_heat', data=df, ci=None, ax=ax)
sns.regplot(x='upward_temp', y='upward_heat', data=df, ci=None, order=2, ax=ax)

ax.set_ylim([0,100])
plt.show()
Run Code Online (Sandbox Code Playgroud)

  • 您还需要在 regplot(...) 调用中设置 truncate=False 才能使其工作。 (2认同)

Cla*_*ire 5

简短回答:您只需要plt.xlim(start,end) Seaborn 绘图之前添加即可。


我想 Seaborn 从绘图限制自动确定长度可能更有意义。

同样的问题把我带到了这里,@Serenity 的回答启发了我,类似的事情xlims = ax.get_xlim()可能会有所帮助。

之后可以尝试修复并提交对 Seaborn 的更改。

  • 您还需要在 regplot(...) 调用中设置 truncate=False 才能使其工作。 (5认同)

Ser*_*ity 3

你必须scipy.stats.linregress像seaborn一样使用线性回归函数来计算。然后,您必须生成 x 数组以覆盖画布的新 x 轴限制,并在其扩展回归线上绘制。有关详细信息,请查看示例:

import numpy as np; np.random.seed(8)

import seaborn as sns
import matplotlib.pylab as plt
import scipy.stats

# test data
mean, cov = [4, 6], [(1.5, .7), (.7, 1)]
x, y = np.random.multivariate_normal(mean, cov, 80).T
ax = sns.regplot(x=x, y=y, color="g")

# extend the canvas
plt.xlim([0,20])
plt.ylim([0,15])

# calculate linear regression function
slope, intercept, r_value, p_value, std_err = \
 scipy.stats.linregress(x=x,y=y)

# plot the regression line on the extended canvas
xlims = ax.get_xlim()
new_x = np.arange(xlims[0], xlims[1],(xlims[1]-xlims[0])/250.)
ax.plot(new_x, intercept + slope *  new_x, color='g', linestyle='-', lw = 2.5)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述