Fix Python – How to set some xlim and ylim in Seaborn lmplot facetgrid


Asked By – exp1orer

I’m using sns.lmplot to plot a linear regression, dividing my dataset into two groups with a categorical variable.

For both x and y, I’d like to manually set the lower bound on both plots, but leave the upper bound at the Seaborn default.
Here’s a simple example:

import pandas as pd
import seaborn as sns
import numpy as np

n = 200
base_x = np.random.rand(n)
base_y = base_x * 2
errors = np.random.uniform(size=n)
y = base_y + errors

df = pd.DataFrame({'X': base_x, 'Y': y, 'Z': ['A','B']*(100)})

mask_for_b = df.Z == 'B'
df.loc[mask_for_b,['X','Y']] = df.loc[mask_for_b,] *2


This outputs the following:
enter image description here

But in this example, I’d like the xlim and the ylim to be (0,*) . I tried using sns.plt.ylim and sns.plt.xlim but those only affect the right-hand plot.


enter image description here

How can I access the xlim and ylim for each plot in the FacetGrid?

Now we will see solution for issue: How to set some xlim and ylim in Seaborn lmplot facetgrid


The lmplot function returns a FacetGrid instance. This object has a method called set, to which you can pass key=value pairs and they will be set on each Axes object in the grid.

Secondly, you can set only one side of an Axes limit in matplotlib by passing None for the value you want to remain as the default.

Putting these together, we have:

g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))

enter image description here


  • Positional arguments, sharex and sharey are deprecate beginning in seaborn 0.11
g = sns.lmplot(x='X', y='Y', data=df, col='Z', facet_kws={'sharey': False, 'sharex': False})
g.set(ylim=(0, None))

This question is answered By – mwaskom

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0