How to plot statsmodels linear regression (OLS) cleanly
As I mentioned in the comments, seaborn
is a great choice for statistical data visualization.
import seaborn as snssns.regplot(x='motifScore', y='expression', data=motif)
Alternatively, you can use statsmodels.regression.linear_model.OLS
and manually plot a regression line.
import statsmodels.api as sm# regress "expression" onto "motifScore" (plus an intercept)model = sm.OLS(motif.expression, sm.add_constant(motif.motifScore))p = model.fit().params# generate x-values for your regression line (two is sufficient)x = np.arange(1, 3)# scatter-plot dataax = motif.plot(x='motifScore', y='expression', kind='scatter')# plot regression line on the same axes, set x-axis limitsax.plot(x, p.const + p.motifScore * x)ax.set_xlim([1, 2])
Yet another solution is statsmodels.graphics.regressionplots.abline_plot
which takes away some of the boilerplate from the above approach.
import statsmodels.api as smfrom statsmodels.graphics.regressionplots import abline_plot# regress "expression" onto "motifScore" (plus an intercept)model = sm.OLS(motif.expression, sm.add_constant(motif.motifScore))# scatter-plot dataax = motif.plot(x='motifScore', y='expression', kind='scatter')# plot regression lineabline_plot(model_results=model.fit(), ax=ax)