Skip to content

Releases: JetBrains/lets-plot

v4.8.2

19 Dec 13:44

Choose a tag to compare

[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.2rc1

18 Dec 16:13

Choose a tag to compare

v4.8.2rc1 Pre-release
Pre-release
Updated version v4.8.2rc1

v4.8.1

01 Dec 19:17

Choose a tag to compare

[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.1rc1

27 Nov 13:49

Choose a tag to compare

v4.8.1rc1 Pre-release
Pre-release
Updated version v4.8.1rc1

v4.8.0

05 Nov 13:20

Choose a tag to compare

[4.8.0] - 2025-11-05

Added

  • Geometries:

    • geom_pointdensity() [#1370].

      See: example notebook.

    • Geoms with 1-to-1 statistics (such as geom_qq(), geom_sina()) preserve the mapping to original data after statistical transformation.

      See: example notebook.

    • geom_histogram(): custom bin bounds (parameter breaks) [#1382].

      See: example notebook.

  • Plot Layout:

    • The legend automatically wraps to prevent overlap - up to 15 rows for vertical legends and 5 columns for horizontal ones [#1235].

      See: example notebook.

    • gggrid(): support for shared legends (parameter guides).

      See: example notebook.

  • Plot Theme:

    • flavor_standard() sets the theme's default color scheme [#1277].

      Use to override other flavors or make defaults explicit.

      See: example notebook.

    • theme_gray() as an alias for theme_grey().

    • legend_justification parameter of theme() accepts additional string values: 'left', 'right', 'top', and 'bottom'.

      See: example notebook.

    • Support for inward axis ticks.

      See: example notebook.

  • Markdown:

    • Support for target attribute for links.
    • Links now open in a new tab by default [#1397].
  • ggtb(): size_zoomin and size_basis parameters for geometry scaling [#1369].

    See: example notebook.

Changed

  • [BREAKING] Explicit group aesthetic now overrides default grouping behavior instead of combining with it [#1401].

    See: example notebook.

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].

    See: example notebook.

  • 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].

v4.8.0rc1

31 Oct 20:09

Choose a tag to compare

v4.8.0rc1 Pre-release
Pre-release
Updated version v4.8.0rc1

v4.7.3

12 Sep 17:28

Choose a tag to compare

[4.7.3] - 2025-09-12

Changed

  • ggsave(): Large plot dimensions without units now require explicit unit specification.

    When plot size exceeds 20 without specifying units (e.g., ggsave(p, 300, 400)),

    we ask to specify units explicitly:

    ggsave(p, 300, 400, unit='px') or ggsave(p, 3, 4, unit='in').

Fixed

  • ggtb() support in Swing/Batik frontend.
  • Multiline support for axis labels in polar coordinates.
  • When the plot size in ggsave() is specified in pixels, dpi now affects

    only the physical size, not the pixel dimensions as before.
  • Blocking SwingUtilities.invokeAndWait() call in plot image export (AWT backend)

v4.7.2

01 Sep 16:00

Choose a tag to compare

[4.7.2] - 2025-09-01

Added

  • Plot Layout:

    • New strip_spacing, strip_spacing_x, and strip_spacing_y parameters in theme() to control spacing between the facet strip (title bar) and the plot panel.
    • New panel_spacing, panel_spacing_x, and panel_spacing_y parameters in theme() to control spacing between plot panels in faceted plots, [#1380].

    See: example notebook.

  • Image resolution is saved in the metadata of PNG files created with ggsave().

Changed

  • plot-image-export: switched from Batik to Graphics2D API

Fixed

  • ggsave(): memory leak when using geom_raster().
  • Incorrect physical image size when exporting PDF with ggsave() without specifying dpi.

v4.7.2rc1

28 Aug 13:10

Choose a tag to compare

v4.7.2rc1 Pre-release
Pre-release
Updated version v4.7.2rc1

v4.7.1

13 Aug 17:25

Choose a tag to compare

[4.7.1] - 2025-08-13

Added

  • ggsave():
    • support font synthesis for italic and bold styles.
    • px unit support for PNG and PDF formats.
    • w, h and unit parameters support for SVG [#1368].

Changed

  • facet_wrap() now drops factor levels that do not appear in the data (i.e., empty panels) by default [#1322].

    To keep unused factor levels, use the new drop parameter, i.e., drop=False.

    See: example notebook.

  • Removed extra spacing between facet strips and plot panels in facet_wrap() and facet_grid().

Fixed

  • geom_livemap: can't draw a path crossing the antimeridian [#649].
  • Tooltip for a line have higher priority than points, even if the point is specified first in the layer list [#1060].
  • geom_ribbon(): tooltip appears in the wrong place on flipped ribbon [#1334].
  • Arrow crossing -180 longitude is split into two arrows [#1364].
  • Coordinate limits do not work on reversed scales [#1365]
  • Misaligned axis labels and ticks in polar coordinates.
  • Display order of fill categories not being set correctly in stacked plots? [#1367]
  • Polars: add handling for Enum values [#1373]
  • Unclear error when using geom_rect with discrete scales [#1287]
  • xlim() breaks default scale_x_datetime() [#1348]
  • scale_x_reverse breaks datetime formatting [#1257]
  • theme(plot_title="blank") doesn't work with gggrid [#1349]
  • theme: error parsing color value pen [#1216]
  • Incorrect appearance of stacked density plot in polar coordinates [#1375]