Ответ 1
Seaborn API не позволяет напрямую изменять модель линейной регрессии.
Цепочка вызовов:
- в какой-то момент вызывается
_RegressionPlotter.plot()
для создания сюжета - который вызывает
_RegressionPlotter.lineplot()
для выполнения графика соответствия - который сам по себе вызывает fit_regression, который находится в модуле
regression
- который, в свою очередь, вызывает много методов регрессии морского происхождения, таких как
self.fit_fast(grid)
в вашем случае.
Чтобы использовать другую регрессионную модель, вы можете:
- Обезьяна исправит класс
_RegressionPlotter
и изменит поведениеlineplot()
- Обезьяна исправляет метод
fit_regression()
илиfit_fast()
в модуле регрессии
Чтобы сделать такой патч на морскую обезьяну, вы можете сослаться на ответ, который я недавно дал, который делает такой же взлом. Это плохо, и Санта не может быть счастливым. Это означает, что вы динамически модифицируете seaborn для вашей цели.
Конечно, вам нужно будет реализовать собственную регрессионную модель, чтобы иметь закон в for y = a * x
вместо y = (a * x) + b
.
Важность beingernest уже указана в комментарии к этому такому вопросу.
Изящным способом было бы построить собственный сюжет, но вы уже ответили на этот вопрос в своем собственном вопросе.
Цитирую свой вопрос (я не проверял предоставленный код):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.formula.api as sfa
np.random.seed(2016)
x = np.linspace(0, 10, 32)
y = 0.3 * x + np.random.randn(len(x))
df = pd.DataFrame({'x': x, 'y': y})
r = sfa.ols('y ~ x + 0', data=df).fit()
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x=x, y=y)
ax.plot(x, r.fittedvalues)