arman
arman

Reputation: 342

Control order of plotting on Seaborn plot in Python

I am trying to plot residuals on a linear regression plot. It works, with only one caveat. There is an unpleasant looking overlap between residuals and data points. Is there a way to tell matplotlib to plot the residuals first followed by Seaborn plot. I tried changing the order of code, but it didn't help.

import numpy as np
import pandas as pd
import seaborn as sns
from pylab import *
from sklearn.linear_model import LinearRegression

x = np.array([1, 2, 3, 4, 5, 7, 8, 9, 10])
y = np.array([-3, 0, 4, 5, 9, 5, 7, 7, 12])
dat = pd.DataFrame({'x': x, 'y': y})
x = x.reshape(-1,1)
y = y.reshape(-1,1)

linear_model = LinearRegression()
linear_model.fit(X=x, y=y)
pred = linear_model.predict(x)

for ix in range(len(x)):
    plot([x[ix], x[ix]], [pred[ix], y[ix]], '#C9B97D')

g = sns.regplot(x='x', y='y', data=dat, ci=None, fit_reg=True)
sns.set(font_scale=1.1)
g.figure.set_size_inches(6, 6)
sns.set_style('ticks')
sns.despine()

Upvotes: 2

Views: 4722

Answers (1)

DavidG
DavidG

Reputation: 25371

The argument you are looking for is zorder. This allows you to control which object appears on top in your figure.

For regplot you have to use the argument scatter_kws which is a dictionary of arguments to be passed to plt.scatter which is used under the hood.

Your sns.regplot becomes:

g = sns.regplot(x='x', y='y', data=dat, ci=None, fit_reg=True,
                scatter_kws={"zorder":10, "alpha":1})

Note that I've set alpha to 1 so that the markers are not transparent

enter image description here

Upvotes: 4

Related Questions