The lmplot
in seaborn fit regression models with intercept. However, sometimes I want to fit regression models without intercept, i.e. regression through the origin.
For example:
In [1]: import numpy as np
...: import pandas as pd
...: import seaborn as sns
...: import matplotlib.pyplot as plt
...: import statsmodels.formula.api as sfa
...:
In [2]: %matplotlib inline
In [3]: np.random.seed(2016)
In [4]: x = np.linspace(0, 10, 32)
In [5]: y = 0.3 * x + np.random.randn(len(x))
In [6]: df = pd.DataFrame({'x': x, 'y': y})
In [7]: r = sfa.ols('y ~ x + 0', data=df).fit()
In [8]: sns.lmplot(x='x', y='y', data=df, fit_reg=True)
Out[8]: <seaborn.axisgrid.FacetGrid at 0xac88a20>
The figure what I wanted:
In [9]: fig, ax = plt.subplots(figsize=(5, 5))
...: ax.scatter(x=x, y=y)
...: ax.plot(x, r.fittedvalues)
...:
Out[9]: [<matplotlib.lines.Line2D at 0x5675a20>]