Changelog History
Page 1
-
v4.10.1 Changes
May 20, 2026[4.10.1] - 2026-05-20
🛠 Fixed
- facet_wrap(), error when
ncolornrowparameter not specified: 'ncol' must be positive, was null
- facet_wrap(), error when
-
v4.10.0 Changes
May 20, 2026[4.10.0] - 2026-05-20
➕ Added
ggdeck()— a new function for overlaying multiple independent plots in a single unified view.👍 Datetime:
%fformatting pattern — support for milliseconds when formatting datetime values, zero-padded to 3 digits [#1482].In legends:
Alpha (transparency) component:
Facet strip labels now honor
angleinelement_text()forstrip_text_*[#1383].In
geom_imshow(), new parameters for controlling the colorbar breaks and labels [#1486]:geom_livemap(): the newinteractiveparameter controls map interactivity. Setinteractive=Falseto disable panning and zooming and hide map controls.Memo for Kotlin API users:
🔄 Changed
💥 [BREAKING] Dropped support for Python 3.9 as it is in the "end-of-life" of its release cycle. The minimum supported Python version is now 3.10.
🗄 Swing-Batik components are deprecated. Use the Swing/AWT components instead (doesn't affect Python users).
🛠 Fixed
- ➕ Add 'synchronized tooltips' feature [#1415].
- 👍 Alpha is not supported in element_text() [#1462].
- scale_alpha: conflict of constant and mapped values of alpha aesthetic [#706].
- geom_imshow(): should render transparency for NaNs when all other pixel values are identical [#1485].
scale_color_gradient():guide='legend'is rendered as a colorbar [#1489].
-
v4.10.0.rc1
May 14, 2026 -
v4.9.0 Changes
March 11, 2026[4.9.0] - 2026-03-11
➕ Added
👍 Python 3.14 support.
👍 Python 3.14 free-threading support [#1454].
Plot Annotations:
Geometries:
Color Scales:
Positional Scales:
gggrid(): interactive pan/zoom now propagates across subplots with shared axes (sharex/sharey) [#1413].
🔄 Changed
💥 [BREAKING]: ColorBrewer palettes: changed default behavior when the requested number of colors exceeds the palette's maximum size.
0️⃣ Now defaults to'interpolate'for sequential/diverging palettes and'generate'for qualitative palettes.
Previously, depending on the palette type, this either resulted in duplicate colors or random additional colors.
👉 Use the newoverflowparameter to explicitly control this behavior.⬇️ Reduced import overhead by nearly two orders of magnitude (from ~1.2s down to ~0.02s) [#1469].
Missing values in
geom_area_ridges()create gaps in geometries instead of being interpolated over.Discrete color scales (Brewer, Manual) now produce a
colorbarguide when used with continuous data.
Previously they produced alegendguide regardless of the data type.🔄 Changes affecting users on the JVM platform:
🛠 Fixed
- ⬇️ Drop commons-io dependency [#1421].
- Unexpected replacement of double curly brackets with a single curly bracket [#1433].
- ⬆️ Upgrade to a newer version of ws [#1150].
- geom_imshow: unclear error message when mixing transparencies [#1088].
- geom_imshow and scale_y_reverse [#1210].
- Nice to be able to get a list of colors from a color scale object [#1444].
- 👍 Allow tooltips param to accept list [#1455].
- 👍 Allow grouped tooltips for plots with multiple univariate geoms [#1460].
- Fixed a regression in geom_text_repel() / geom_label_repel(): points with empty labels were incorrectly skipped
🏗 before building the repel obstacle set, so they were not included in collision avoidance and labels could overlap
dense point clusters.
-
v4.9.0.rc1
March 05, 2026 -
v4.8.2 Changes
December 19, 2025[4.8.2] - 2026-12-19
🛠 Fixed
- 👍 Hyperlinks support for lets-plot-compose.
- Colab no longer rendering lets-plot with empty setup HTML [#1436]
-
v4.8.2.rc1
December 18, 2025 -
v4.8.1 Changes
December 01, 2025 -
v4.8.1.rc1
November 27, 2025 -
v4.8.0 Changes
November 05, 2025[4.8.0] - 2025-11-05
➕ Added
Geometries:
Plot Layout:
Plot Theme:
Markdown:
ggtb():size_zoominandsize_basisparameters for geometry scaling [#1369].
🔄 Changed
- 💥 [BREAKING] Explicit
groupaesthetic now overrides default grouping behavior instead of combining with it [#1401].
Important
Previously, setting
group='variable'would group by both the explicit variable AND any discrete
aesthetics (color, shape, etc.).
Now it groups ONLY by the explicit variable, matchingggplot2behavior.
👉 Usegroup=[var1, var2, ...]to group by multiple variables explicitly,
andgroup=[]to disable any grouping.Missing values in
geom_line(), geom_path(), geom_ribbon(), andgeom_area()create gaps in geometries instead of being interpolated over [#818], [#1406].0️⃣
theme: theexponent_formatdefault value changed to'pow'- superscript powers of 10 (was e-notation).The multi-layer line plot now shows tooltips for each series simultaneously, in the same way that a single-layer plot with color mapped to series does.
🛠 Fixed
geom_pieon geospatioal plot withmap_joinfailes to render without explicitgroupaesthetic.- geom_density2d: NullPointerException when weight aesthetic contains None values [#1399].
- Tooltip shows duplicate lines when as_discrete is applied twice to the same var [#1400].
- geom_sina: incorrect shape in legend [#1403].
- geom_density2d: Incorrect processing of weighted statistics when None value occurs in the x or y column.
- facet_wrap: indescriptive error when the specified facet variable is not present in the dataset [#1409].
- Integer numbers in facet strip titles are displayed as float [#1386].
- Error when using scale_identity(aesthetic="shape") [#1212].
- ggsave: theme option face="italic" doesn't work [#1391].
- Fail early if string format is incorrect [#1410].