[4.9.0] - 2026-03-11
Added
-
Python 3.14 support.
-
Python 3.14 free-threading support [#1454].
-
Plot Annotations:
-
New
labelsparameter ingeom_smooth()designed to display statistical summaries of the fitted model directly on the plot.
This parameter accepts asmooth_labels()object, which provides access to model-specific variables like$R^2$ , the regression equation and others.See: example notebook.
-
Plot tags. A tag can be specified via
labs(tag=...)and styled using theme parameters [#1407].See: example notebook and updated plot layout scheme.
-
Plot tags customization parameters in
theme():-
plot_tag- sets the tag style viaelement_text(). -
plot_tag_location- specifies the area used for positioning the tag. -
plot_tag_position- specifies the position of the tag within the selected area. -
plot_tag_prefix- text added before the tag value. -
plot_tag_suffix- text added after the tag value.
See: example notebook.
-
-
-
Geometries:
-
New
geom_bracket(),geom_bracket_dodge()[#1114].See: example notebook.
-
geom_imshow():-
Support for custom colormaps [#780].
-
New
cguideparameter: use to customize the colorbar for grayscale images.See: example notebook.
-
-
-
Color Scales:
-
New
palette()method for color scales: generates a list of hex color codes that can be used withscale_color_manual()to maintain consistent colors across multiple plots [#1444].See: example notebook.
-
New
overflowparameter inscale_color_brewer()/scale_fill_brewer(): controls how colors are generated when more colors are needed than the palette provides.
Options:'interpolate'('i'),'cycle'('c'),'generate'('g').See: example notebook.
-
-
Positional Scales:
-
New
break_widthparameter that specifies a fixed distance between axis breaks.See examples:
-
Support for axis minor ticks via
axis_minor_ticksandaxis_minor_ticks_lengthparameters intheme()[#1379].See: example notebook.
-
-
gggrid(): interactive pan/zoom now propagates across subplots with shared axes (sharex/sharey) [#1413].See: example notebook.
Changed
-
[BREAKING]: ColorBrewer palettes: changed default behavior when the requested number of colors exceeds the palette's maximum size.
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:
- Upgraded the Kotlin version to 2.2.20 (was 1.9.25).
- New artifact for JVM Swing applications:
org.jetbrains.lets-plot:lets-plot-swing.
This artifact provides theSwingPlotPanelclass, which can be used to display plots in Swing applications instead of the now-obsoleteDefaultPlotPanelBatik.
For details, see the jvm-swing-app example in the "lets-plot-mini-apps" repository. - [BREAKING]: Removed JavaFX artifacts.
Theorg.jetbrains.lets-plot:lets-plot-jfxartifact is no longer available.
Replace it with neworg.jetbrains.lets-plot:lets-plot-swingdependency and useSwingPlotPanelinstead ofDefaultPlotPanelJfx.
For details, see the jvm-javafx-app example in the "lets-plot-mini-apps" repository. - [BREAKING]: Removed
plot-image-exportmodule.
Theorg.jetbrains.lets-plot:lets-plot-image-exportartifact is no longer available.
ThePlotImageExportutility has been moved to theplatf-awtmodule.
The requiredorg.jetbrains.lets-plot:platf-awtdependency is likely already present in your project.
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.