如何避免缩小 lmplot 中的回归线截断?

How to avoid regression line truncation in zoomed-out lmplot?

我遇到这个情节有 2 个问题:

  1. 我试图在我的代码中添加其他功能,但是回归线在 lmplot().
  2. 中仍然被截断
  3. 当我添加图例设置时,在左下方添加了另一个图例。但是,该设置确实将原始图例移到了我的绘图之外。

这是我的代码:

g = sns.lmplot(x="fico", y="int.rate", col="not.fully.paid", data=loans, hue = 'credit.policy', palette = 'Set1', truncate = False, scatter_kws={"s": 10}, legend_out = True)

g.set(xlim = (550, 850))
g.set(ylim = (0, 0.25))

g.fig.tight_layout()
plt.legend(bbox_to_anchor=(1.3, 0), loc='upper right')

Link 我的情节:github link

lmplot() 有一个选项 truncate=,默认为 True,即将回归线截断到第一个点和最后一个点。 truncate=False 将扩展它们,直到它们在绘图时触及 x 限制。您不需要默认的 xlims,并且 lmplot() 似乎没有提供预先设置这些限制的方法。一种方法是将默认的 x 边距设置得非常高(通过 rcParams),然后将 x 限制缩小。

移动一个传说是相当困难的。通常需要删除旧的并创建一个新的。在这种情况下,您可以在创建过程中设置legend=False。然后再创建(有些图例比较复杂,需要手动参数较多)。

可以使用 ax 创建图例,在本例中是最后一个子图的 ax。该位置以“轴坐标”给出,从左下角的 0,0 到右上角的 1,1。稍微超出该范围的坐标将位于主绘图区域之外。给定一个位置后,loc= 参数会告知涉及图例 的哪个角 。所以loc='upper left'就是图例的左上角

这是一些示例代码:

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl

sns.set_theme(style="ticks")
tips = sns.load_dataset('tips')
mpl.rcParams['axes.xmargin'] = 0.5  # set very wide margins: 50% of the actual range
g = sns.lmplot(x="total_bill", y="tip", col="smoker", hue="time", data=tips, truncate=False, legend=False)
mpl.rcParams['axes.xmargin'] = 0.05 # set the margins back to the default
# add the legend just outside the last subplot
g.fig.axes[-1].legend(bbox_to_anchor=(1.02, 1.01), loc='upper left', title='Time')
g.set(xlim = (0, 80)) # set the limits to the desired ones
plt.tight_layout() # fit labels and legend
plt.show()