reaborn is a faithful R port of Python’s seaborn, built on ggplot2. It mirrors seaborn’s public API exactly — same function names, same argument names, same defaults — so the plotting code you already know runs in R with little to no translation. The defaults that make seaborn plots look good out of the box (the styles, the palettes, the spacing) come along for the ride, because reaborn reproduces them rather than approximating them.

The part seaborn can’t match: every reaborn plot is
a ggplot object. A call like scatterplot(...)
returns a ggplot, so you can keep building with the full
grammar of graphics — add facet_wrap(), swap in
scale_x_log10(), layer extra geoms, override the theme. You
get seaborn’s defaults as a starting point and ggplot2’s composability
as the ceiling.
In most cases you change nothing but the language
host. After library(reaborn), the
sns. aliases, the global theme, and the
True/False/None literals are all
in scope, so a seaborn snippet pasted into R runs as-is.
library(reaborn) # sets seaborn theme + palette globally, like sns.set_theme()
# This is literally seaborn code — it runs verbatim in R:
sns.scatterplot(data = penguins, x = "bill_length_mm", y = "bill_depth_mm",
hue = "species")| Python (seaborn) | R (reaborn) | Note |
|---|---|---|
import seaborn as sns |
library(reaborn) |
Sets theme/palette globally, exposes sns. aliases |
sns.set_theme() |
automatic on load | |
sns.scatterplot(data=df, x="a", y="b", hue="g") |
same line, verbatim | sns. alias + = kwargs both work |
True / False / None |
True / False / None |
Bound to TRUE / FALSE /
NULL |
string columns: x="col" |
x = "col" |
seaborn’s string-column API is preserved |
ax.set(...) (matplotlib) |
+ ggplot2::labs(...), + theme(...) |
You now get the ggplot grammar |
You already love the grammar of graphics. reaborn doesn’t ask you to
give it up — it hands you seaborn’s defaults and statistics as a
starting layer, returned as an ordinary ggplot
that you keep building.
histplot(data, x="x", hue="g") gets you seaborn’s binning,
palette, and theme in one call — then
+ facet_wrap(~year) + scale_x_log10() is yours.ggplot, so patchwork, custom scales,
extra geoms, and your theme tweaks all keep working.