skills/seaborn/references/plotting_functions.md
Relational, distribution, categorical, regression, and matrix plots: which function to reach for, its key parameters, and worked examples.
Use for: Exploring how two or more variables relate to each other
scatterplot() - Display individual observations as pointslineplot() - Show trends and changes (automatically aggregates and computes CI)relplot() - Figure-level interface with automatic facetingKey parameters:
x, y - Primary variableshue - Color encoding for additional categorical/continuous variablesize - Point/line size encodingstyle - Marker/line style encodingcol, row - Facet into multiple subplots (figure-level only)# Scatter with multiple semantic mappings
sns.scatterplot(data=df, x='total_bill', y='tip',
hue='time', size='size', style='sex')
# Line plot with confidence intervals
sns.lineplot(data=timeseries, x='date', y='value', hue='category')
# Faceted relational plot
sns.relplot(data=df, x='total_bill', y='tip',
col='time', row='sex', hue='smoker', kind='scatter')
Use for: Understanding data spread, shape, and probability density
histplot() - Bar-based frequency distributions with flexible binningkdeplot() - Smooth density estimates using Gaussian kernelsecdfplot() - Empirical cumulative distribution (no parameters to tune)rugplot() - Individual observation tick marksdisplot() - Figure-level interface for univariate and bivariate distributionsjointplot() - Bivariate plot with marginal distributionspairplot() - Matrix of pairwise relationships across datasetKey parameters:
x, y - Variables (y optional for univariate)hue - Separate distributions by categorystat - Normalization: "count", "frequency", "probability", "density"bins / binwidth - Histogram binning controlbw_adjust - KDE bandwidth multiplier (higher = smoother)fill - Fill area under curvemultiple - How to handle hue: "layer", "stack", "dodge", "fill"# Histogram with density normalization
sns.histplot(data=df, x='total_bill', hue='time',
stat='density', multiple='stack')
# Bivariate KDE with contours
sns.kdeplot(data=df, x='total_bill', y='tip',
fill=True, levels=5, thresh=0.1)
# Joint plot with marginals
sns.jointplot(data=df, x='total_bill', y='tip',
kind='scatter', hue='time')
# Pairwise relationships
sns.pairplot(data=df, hue='species', corner=True)
Use for: Comparing distributions or statistics across discrete categories
Categorical scatterplots:
stripplot() - Points with jitter to show all observationsswarmplot() - Non-overlapping points (beeswarm algorithm)Distribution comparisons:
boxplot() - Quartiles and outliersviolinplot() - KDE + quartile informationboxenplot() - Enhanced boxplot for larger datasetsStatistical estimates:
barplot() - Mean/aggregate with confidence intervalspointplot() - Point estimates with connecting linescountplot() - Count of observations per categoryFigure-level:
catplot() - Faceted categorical plots (set kind parameter)Key parameters:
x, y - Variables (one typically categorical)hue - Additional categorical groupingorder, hue_order - Control category orderingnative_scale - Preserve numeric/datetime scale on the categorical axislog_scale - Apply log scaling without dropping down to matplotlibformatter - Control categorical tick labelsdodge, gap - Separate hue levels side-by-side and space dodged elementsorient - "x"/"y" or "v"/"h" to specify the categorical axislegend - True/False or "auto", "brief", "full"kind - Plot type for catplot: "strip", "swarm", "box", "violin", "boxen", "bar", "point", "count"# Swarm plot showing all points
sns.swarmplot(data=df, x='day', y='total_bill', hue='sex')
# Violin plot with split for comparison
sns.violinplot(data=df, x='day', y='total_bill',
hue='sex', split=True)
# Bar plot with error bars
sns.barplot(data=df, x='day', y='total_bill',
hue='sex', estimator='mean', errorbar=('ci', 95))
# Faceted categorical plot
sns.catplot(data=df, x='day', y='total_bill',
col='time', kind='box')
Use for: Visualizing linear regressions and residuals
regplot() - Axes-level regression plot with scatter + fit linelmplot() - Figure-level with faceting supportresidplot() - Residual plot for assessing model fitKey parameters:
x, y - Variables to regressorder - Polynomial regression orderlogistic - Fit logistic regressionrobust - Use robust regression (less sensitive to outliers)ci - Confidence interval width (default 95)scatter_kws, line_kws - Customize scatter and line properties# Simple linear regression
sns.regplot(data=df, x='total_bill', y='tip')
# Polynomial regression with faceting
sns.lmplot(data=df, x='total_bill', y='tip',
col='time', order=2, ci=95)
# Check residuals
sns.residplot(data=df, x='total_bill', y='tip')
Use for: Visualizing matrices, correlations, and grid-structured data
heatmap() - Color-encoded matrix with annotationsclustermap() - Hierarchically-clustered heatmapKey parameters:
data - 2D rectangular dataset (DataFrame or array)annot - Display values in cellsfmt - Format string for annotations (e.g., ".2f")cmap - Colormap namecenter - Value at colormap center (for diverging colormaps)vmin, vmax - Color scale limitssquare - Force square cellslinewidths - Gap between cells# Correlation heatmap
corr = df.select_dtypes(include='number').corr()
sns.heatmap(corr, annot=True, fmt='.2f',
cmap='coolwarm', center=0, square=True)
# Clustered heatmap
sns.clustermap(data, cmap='viridis',
standard_scale=1, figsize=(10, 10))