skills/seaborn/references/grids_and_levels.md
FacetGrid, PairGrid, and JointGrid, and how figure-level and axes-level functions
differ in what they return and how they are composed with Matplotlib.
Seaborn provides grid objects for creating complex multi-panel figures:
Create subplots based on categorical variables. Most useful when called through figure-level functions (relplot, displot, catplot), but can be used directly for custom plots.
g = sns.FacetGrid(df, col='time', row='sex', hue='smoker')
g.map(sns.scatterplot, 'total_bill', 'tip')
g.add_legend()
Show pairwise relationships between all variables in a dataset.
g = sns.PairGrid(df, hue='species')
g.map_upper(sns.scatterplot)
g.map_lower(sns.kdeplot)
g.map_diag(sns.histplot)
g.add_legend()
Combine bivariate plot with marginal distributions.
g = sns.JointGrid(data=df, x='total_bill', y='tip')
g.plot_joint(sns.scatterplot)
g.plot_marginals(sns.histplot)
Understanding this distinction is crucial for effective seaborn usage:
Axes objectax= parameter for precise placementAxes objectscatterplot, histplot, boxplot, regplot, heatmapWhen to use:
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
sns.scatterplot(data=df, x='x', y='y', ax=axes[0, 0])
sns.histplot(data=df, x='x', ax=axes[0, 1])
sns.boxplot(data=df, x='cat', y='y', ax=axes[1, 0])
sns.kdeplot(data=df, x='x', y='y', ax=axes[1, 1])
col and row parametersFacetGrid, JointGrid, or PairGrid objectsheight and aspect for sizing (per subplot)relplot, displot, catplot, lmplot, jointplot, pairplotWhen to use:
# Automatic faceting
sns.relplot(data=df, x='x', y='y', col='category', row='group',
hue='type', height=3, aspect=1.2)