Skip to content

Releases: JetBrains/lets-plot

v4.7.1rc1

12 Aug 16:24

Choose a tag to compare

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

v4.7.0

17 Jul 16:20

Choose a tag to compare

[4.7.0] - 2025-07-17

Added

  • Time Series Plotting [#278],
    [discussion],
    [#678],
    [LPK-129]:

    • Support for Python time and date objects.
    • Support for timezone-aware datetime objects and Pandas/Polars Series.

    See: example notebook.

  • Geometries:

  • Layer Labels (Annotations):

    • Support in geom_crossbar()

      See: example notebook.

    • Support in waterfall_plot() via relative_labels and absolute_labels parameters.

      See: example notebook.

    • New inherit_color() option in annotations configuration (see example notebooks above)

  • waterfall_plot() - support for combining waterfall bars with other geometry layers [#1344].

    See: example notebook.

  • Plot Layout:

    • New axis_text_spacing, axis_text_spacing_x, and axis_text_spacing_y parameters in theme() to control spacing between axis ticks and labels.
    • See new plot layout diagram notebook showing various layout options and their effects on plot appearance.
  • More variants to specify a color by name:

    • all HTML/CSS colors;
    • various naming styles, e.g., dark-gray, darkgrey, dark_grey, DARKGRAY, etc.;
    • grayscale colors from gray0 (black) to gray100 (white);

    See the complete list of named colors.

  • size_unit parameter in geom_point(), geom_text/label() and geom_pie() accepts two new values: 'min' and 'max' [#260].

    'min' sets the size unit to the smaller of the unit steps along the x and y axes, while 'max' sets it to the larger.

    This allows for more flexible relative sizing of points, pies and text in plots.

    See: example notebook.

Changed

  • Native support for PNG and PDF exports [#1268]:

    Exporting to PNG and PDF formats now uses the ImageMagick library bundled with Lets-Plot Python wheels and available out-of-the-box.

    This replaces the previous dependency on the CairoSVG library and comes with improved support for LaTeX labels rasterization.

    Related changes:

    • ggsave: the w and h parameters override plot size, allowing to specify the output image size independently of the plot size.
    • ggsave: the dpi default value changed to 300.
    • ggsave: the unit default value changed to in (inches).
  • Continuous data on discrete scales:

    Continuous data when used with discrete positional scales is no longer transformed to discrete data.

    Instead, it remains continuous, allowing for precise positioning of continuous elements relative to discrete ones.

    This resolves issues where combining discrete and continuous data in the same plot was difficult or impossible: [#1279].

    See: example notebook.

Tip

New way of handling continuous data on discrete scales could potentially break existing plots.
If you want to restore a broken plot to its original form, you can use the as_discrete() function to annotate continuous data as discrete.

  • [BREAKING] Dropped support for Python 3.8 as it is in the "end-of-life" of its release cycle.
  • [BREAKING] geom_boxplot(): when y-oriented, it now uses aesthetics xlower/xmiddle/xupper instead of lower/middle/upper [#1319].
  • [BREAKING] waterfall_plot(): special flow_type value for label=element_text(color=...) replaced with inherit. See label in the documentation.
  • [DEPRECATED] The position_dodgev() function and the 'dodgev' value for the position parameter are deprecated and will be removed in future releases.
  • Plot layout: reduced margins and spacing for title, caption, axes, and legend.
  • Updated RGB values for lightgray and green. To restore the previous colors, use gray75 and lime, respectively.
  • waterfall_plot(): the appearance of the legend has been improved.
  • geom_violin(): tooltips are not shown in the centerline of the violin if show_half != 0.
  • geom_crossbar(): the midline is not shown in the legend when fatten is set to 0, or when there is no mapping for it.
  • geom_pointrange(): the midpoint will not be drawn if the y aesthetic is set to None.
  • geom_band(): the alpha aesthetic only affects the inner part of the geometry, as in geom_rect().
  • geom_band(): show tooltip over the whole band, not just at the edges.

Fixed

  • AWT: plot prevents wheel events from bubbling up to the parent component.
  • Added tooltip for geom_hline and geom_vline on geom_livemap [#1056].
  • geom_boxplot: unable to draw a y-oriented plot with stat='identity' [#1319].
  • Can't add layer which uses continuous data to a plot where other layers use discrete input [#1323].
  • Multiline legend labels were not vertically centered with their keys [#1331].
  • Poor alignment in legend between columns [#1332].
  • Ordered data was re-ordered by geom_boxplot [#1342].
  • geom_rect: fixed data conversion for geom_livemap [#1347].
  • ggsave: incorrect output when exporting markdown demo to PNG [#1362].
  • as_discrete() does not work with aes addition [#1363].
  • Sec: CVE-2024-47554 (commons-io) [#1231]

v4.7.0rc3

14 Jul 19:40

Choose a tag to compare

v4.7.0rc3 Pre-release
Pre-release
Updated version v4.7.0rc3

v4.7.0rc2

14 Jul 15:22

Choose a tag to compare

v4.7.0rc2 Pre-release
Pre-release
Updated version v4.7.0rc2

v4.7.0rc1

11 Jul 16:15

Choose a tag to compare

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

v4.6.2

28 Mar 12:26

Choose a tag to compare

[4.6.2] - 2025-03-28

Fixed

  • macOS: incorrect system libraries linkage that may lead to Lets-Plot import failure:

     libc++abi: Terminating due to typed operator new being invoked before its static initializer in libcxx has been executed.
    
  • geom_livemap(): map zoom freezes after multiple rapid clicks on +/- buttons [#1315].

  • Misleading warnings when using CARTO 'base-midnight', 'base-antique' and 'base-flatblue' tilesets in livemap.

v4.6.1

07 Mar 18:17

Choose a tag to compare

[4.6.1] - 2025-03-07

Changed

  • [BREAKING] the height and height_unit parameters have been deprecated for the geom_errorbar.

  • the minimum distance between axis labels was reduced to avoid unsuitable layouts.

Fixed

  • geom_errorbar(): the plot domain is always stretched to zero, regardless of the data.

  • overlapped axis labels when using hjust/vjust or multiline text.

v4.6.0

03 Mar 17:20

Choose a tag to compare

[4.6.0] - 2025-03-03

Added

  • Grouping plots:

    • ggbunch() function: combining plots with custom layout.

      See example notebook.

    • Support for plot title, subtitle, caption, margins and insets in gggrid() and ggbunch().

  • Geometries:

  • Texts and labels:

  • In the nudge position adjustment -
    the ability to specify absolute shift values for nudge:

    • unit parameter in position_nudge().

    • nudge_unit parameter in geom_text() and geom_label()

      See example notebook.

  • Theme:

    • Parameters legend_ticks and legend_ticks_length for fine-grained control over colorbar tick marks [#1262].

      See: example notebook.

  • Parameter spacer in image_matrix() function.

  • transparent/blank/'' color [#1281].

Changed

  • [DEPRECATED] class GGBunch is deprecated. Please use ggbunch() function instead.
  • Axis breaks: changed default lower_exp_bound to -7 and upper_exp_bound to 6 (same as in theme(...)).
  • Axis labels: changed default justification for rotated labels.
  • Axis labels: changed orientation of automatic vertical labels.
  • [BREAKING] geoms tile, bin2d, contour, contourf, density2d, density2df : default coordinate system changed from 'fixed' to 'cartesian'.
  • [BREAKING] tiles in geom_bin2d() are sized according to the binwidth value, not the maximum possible.
  • [BREAKING] only Lets-Plot/JS users: signature of "buildPlotFromXXX" functions changed, see current Kotlin/JS declarations:
  • [BREAKING] Maven artifacts (doesn't affect Python users):
    • artifacts platf-awt, platf-batik, platf-jfx-swing are no longer published with a "-jvm" suffix.
      Before, these artifacts could be used in dependencies either with or without the "-jvm" suffix. Now only without suffix.
    • artifact "org.jetbrains.lets-plot:deprecated-in-v4-jvm" is removed.

Fixed

  • Incorrectly rendered Area chart [#1295].
  • Tooltip should not cover and hide the geometry that it provides info for [#1275].
  • General purpose scale_continuous: can't use the expand parameter [#1285].
  • Error when using stat='summary' if the data contains NaN values [#1301].
  • Broken plot_background in gggrid [#1124].
  • plot_background not inheriting from rect [#1278]
  • gggrid: allow title and other labels for the entire figure [#715].
  • ggbunch: overall title [#321].
  • Expand discrete axis according to tile size with geom_tile [#1284].
  • geom_bin2d implodes when the disparity in axes units is large [#1303].
  • Livemap: parameters nudge_x and nudge_y have no effect on geom_text or geom_label [#1048].
  • Livemap: Add zooming-in for geom_text()/geom_label() [#1059].

v4.6.0rc1

27 Feb 18:51

Choose a tag to compare

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

v4.5.2

13 Dec 18:39

Choose a tag to compare

[4.5.2] - 2024-12-13

Changed

  • Number formatting:
    • We have aligned our specifications with D3.js (rather than Python): g format type with ~ (e.g. ~g) now truncates trailing zeros, and without ~ it doesn't.
    • The default number formatter now respects theme(exponent_format=...) settings and does not use 's' format type for large numbers.
  • Legends with more than 200 items are now not rendered.

Fixed

  • Bad precision in the default tooltip format when using coord limits [#1134].
  • Display integer values without fractional part in tooltips [#1186].
  • Suboptimal tooltip positioning in facets [#1187].
  • Incorrect Y-axis layout with facets and panel_inset [#1194].
  • Grouped plot hits the limit of 1000 and doesn't render with not-friendly exception [#1224].
  • Kandy toPNG reports NullPointerException [#1228]
  • lets_plot_kotlin_bridge is unable to locate libc++.1.dylib, I am using Mac m2 [#1234].
  • Wrong formatting when type='g' for small values [#1238].
  • Formatting when type='g' for large values throws exception [#1239].
  • Wrong formatting when type='s' with explicit precision [#1240].
  • Extra trim in formatted number when type='g' [#1241].
  • Axis breaks are badly formatted if explicitly set [#1245].
  • Badly formatted zero break for the "~g" format [#1246].
  • How to adjust the vertical position of geom_text when using position_dodge [#1248].
  • Incorrect result for format(9.999, ".2f") [#1251].
  • Tooltips overlapping when not enough vertical space for them [#1254].
  • Plot limited to 1000 lines (Internal error: IllegalStateException : Too many groups: 1099) [#1261].
  • Nice to have tooltip to inherit formatting configured for axis [LPK-229].