我搜索了但是我没有找到重新调整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()
答案 0 :(得分:2)
如果您在绘图之前知道x限制,则在调用set_xlim
之前可以regplot
为轴,然后seaborn会在xlim范围内扩展回归线和CI。
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()
答案 1 :(得分:1)
你必须使用scipy.stats.linregress
计算线性回归函数,如seaborn do。然后你必须生成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()
答案 2 :(得分:1)
简短回答:您只需在 Seaborn图之前添加plt.xlim(start,end)
。
我想Seaborn可以更自觉地从情节限制中自动确定长度。
同样的问题把我带到了这里,@ Serenity的回答激发了我xlims = ax.get_xlim()
之类的东西可能有所帮助。
之后可以尝试修改并对Seaborn进行更改。
答案 3 :(得分:1)
将 truncate 设置为 False 即可完成这项工作。在此处添加此答案,可能会对某人有所帮助