All Versions
42
Latest Version
Avg Release Cycle
79 days
Latest Release
21 days ago

Changelog History
Page 1

  • v4.10.1 Changes

    May 20, 2026

    [4.10.1] - 2026-05-20

    🛠 Fixed

    • facet_wrap(), error when ncol or nrow parameter not specified: 'ncol' must be positive, was null
  • 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: %f formatting pattern — support for milliseconds when formatting datetime values, zero-padded to 3 digits [#1482].

    • In legends:

    • 🚚 Indication of removed records [LPK-81], [#686].

    • Alpha (transparency) component:

    • Facet strip labels now honor angle in element_text() for strip_text_* [#1383].

    • In geom_imshow(), new parameters for controlling the colorbar breaks and labels [#1486]:

    • geom_livemap(): the new interactive parameter controls map interactivity. Set interactive=False to 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 new overflow parameter 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 colorbar guide when used with continuous data.
      Previously they produced a legend guide 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

    [4.8.1] - 2025-12-01

    🛠 Fixed

    • saving plots as png takes a very long time [#1423].
    • stat_ecdf() takes a very long time for even moderately sized datasets [#1424].
    • lets-plot plots are not displayed in plots pane [PST-8170].
    • inconsistencies in theme/flavor inheritance in gggrid() subplots.
  • 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_zoomin and size_basis parameters for geometry scaling [#1369].

    🔄 Changed

    • 💥 [BREAKING] Explicit group aesthetic 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, matching ggplot2 behavior.
    👉 Use group=[var1, var2, ...] to group by multiple variables explicitly,
    and group=[] to disable any grouping.

    • Missing values in geom_line(), geom_path(), geom_ribbon(), and geom_area() create gaps in geometries instead of being interpolated over [#818], [#1406].

    • 0️⃣ theme: the exponent_format default 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_pie on geospatioal plot with map_join failes to render without explicit group aesthetic.
    • 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].