Seaborn Object Recipes#
Ok, while we’re big fans of the grammer-of-graphics model of seaborn.objects, development of additional features — a version of linear regression with confidence intervals, lowess regression — has been quite slow.
To help address this, with the help of an excellent MIDS student (Ofosu Osei), we’ve created a package of extra recipes that augments seaborn.objects called seaborn_object_recipes.
To use it, just run pip install seaborn_object_recipes
, then import it after seaborn:
import seaborn.objects as so
import seaborn_objects_recipes as sor
seaborn_objects_recipes Examples#
You can read about all the features of seaborn_object_recipes on the package website here, but here are a few examples of it in action.
import pandas as pd
import numpy as np
import seaborn.objects as so
import seaborn_objects_recipes as sor
import warnings
warnings.simplefilter(action="ignore", category=FutureWarning)
pd.set_option("mode.copy_on_write", True)
# Load the penguins dataset
import seaborn as sns
penguins = sns.load_dataset("penguins").dropna()
Regression with Confidence Intervals#
Here’s an example of using sor.PolyFitWithCI
to plot a regression with confidence intervals.
plot = (
so.Plot(penguins, x="bill_length_mm", y="body_mass_g")
.add(so.Dot())
.add(so.Line(), PolyFitWithCI := sor.PolyFitWithCI(order=2, gridsize=100, alpha=0.05))
.add(so.Band(), PolyFitWithCI)
.label(x="Bill Length (mm)", y="Body Mass (g)", title="PolyFit Plot with Confidence Intervals")
)
plot
Note the need for a .add(so.Band()...)
geometry. seaborn.objects thinks of the regression line as a so.Line()
geometry, while the confidence interval is a so.Band()
geometry.
To prevent having to fit the model twice, we use the “Walrus Operator” (:=
). The Walrus Operator (turn it sideways and imagine the colon dots are eyes and the bars of the equals sign are tusks) allows the user to BOTH pass a Python object as a function argument AND save it to a variable. Here, we’re passing sor.PolyFitWithCI(order=2, gridsize=100, alpha=0.05)
as the second argument in .add(so.Line(), ...)
and also assigning it to the variable PolyFitWithCI
, which we then use again to pass the same object in .add(so.Band(), ...)
. It’s a little clumsy, but works!
Lowess Regression with Confidence Intervals#
And here’s a lowess regression with confidence intervals!