Releases: JetBrains/lets-plot
v4.7.1
[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
andunit
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 newdrop
parameter, i.e.,drop=False
.See: example notebook.
-
Removed extra spacing between facet strips and plot panels in
facet_wrap()
andfacet_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]
v4.7.1rc1
Updated version v4.7.1rc1
v4.7.0
[4.7.0] - 2025-07-17
Added
-
Time Series Plotting [#278],
[discussion],
[#678],
[LPK-129]:- Support for Python
time
anddate
objects. - Support for timezone-aware
datetime
objects and Pandas/PolarsSeries
.
See: example notebook.
- Support for Python
-
Geometries:
-
geom_sina()
[#1298].See: example notebook.
-
geom_text_repel()
andgeom_label_repel()
[#1092].See: example notebook.
-
-
Layer Labels (Annotations):
-
Support in
geom_crossbar()
See: example notebook.
-
Support in
waterfall_plot()
viarelative_labels
andabsolute_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
, andaxis_text_spacing_y
parameters intheme()
to control spacing between axis ticks and labels. - See new plot layout diagram notebook showing various layout options and their effects on plot appearance.
- New
-
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) togray100
(white);
-
size_unit
parameter ingeom_point()
,geom_text/label()
andgeom_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 theCairoSVG
library and comes with improved support for LaTeX labels rasterization.
Related changes:ggsave
: thew
andh
parameters override plot size, allowing to specify the output image size independently of the plot size.ggsave
: thedpi
default value changed to 300.ggsave
: theunit
default value changed toin
(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 aestheticsxlower
/xmiddle
/xupper
instead oflower
/middle
/upper
[#1319]. - [BREAKING]
waterfall_plot()
: specialflow_type
value forlabel=element_text(color=...)
replaced withinherit
. Seelabel
in the documentation. - [DEPRECATED] The
position_dodgev()
function and the'dodgev'
value for theposition
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
andgreen
. To restore the previous colors, usegray75
andlime
, respectively. waterfall_plot()
: the appearance of the legend has been improved.geom_violin()
: tooltips are not shown in the centerline of the violin ifshow_half != 0
.geom_crossbar()
: the midline is not shown in the legend whenfatten
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 toNone
.geom_band()
: thealpha
aesthetic only affects the inner part of the geometry, as ingeom_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
andgeom_vline
ongeom_livemap
[#1056]. geom_boxplot
: unable to draw a y-oriented plot withstat='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 forgeom_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
Updated version v4.7.0rc3
v4.7.0rc2
Updated version v4.7.0rc2
v4.7.0rc1
Updated version v4.7.0rc1
v4.6.2
[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
[4.6.1] - 2025-03-07
Changed
-
[BREAKING] the
height
andheight_unit
parameters have been deprecated for thegeom_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
[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()
andggbunch()
.
-
-
Geometries:
-
geom_hex()
[#556].See: example notebook.
-
Parameters
width_unit
andheight_unit
ingeom_errorbar()
,geom_boxplot()
,geom_crossbar()
,geom_tile()
andgeom_hex()
[#1288]:See example notebook.
-
Parameters
start
anddirection
ingeom_pie()
[#1280].See example notebook.
-
-
Texts and labels:
-
hjust
andvjust
parameters for axis labels [#1227],[#1230].See: example notebook.
-
multiline support for axis labels [#948].
See: example notebook.
-
Markdown support for plot title, subtitle, caption, and axis labels [#1256].
See example notebook.
-
-
In the
nudge
position adjustment -
the ability to specify absolute shift values fornudge
:-
unit
parameter inposition_nudge()
. -
nudge_unit
parameter ingeom_text()
andgeom_label()
See example notebook.
-
-
Theme:
-
Parameters
legend_ticks
andlegend_ticks_length
for fine-grained control over colorbar tick marks [#1262].See: example notebook.
-
-
Parameter
spacer
inimage_matrix()
function. -
transparent
/blank
/''
color [#1281].
Changed
- [DEPRECATED] class
GGBunch
is deprecated. Please useggbunch()
function instead. - Axis breaks: changed default
lower_exp_bound
to -7 andupper_exp_bound
to 6 (same as intheme(...)
). - 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 thebinwidth
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.
- artifacts
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 theexpand
parameter [#1285]. - Error when using
stat='summary'
if the data contains NaN values [#1301]. - Broken
plot_background
ingggrid
[#1124]. plot_background
not inheriting fromrect
[#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
orgeom_label
[#1048]. - Livemap: Add zooming-in for
geom_text()/geom_label()
[#1059].
v4.6.0rc1
Updated version v4.6.0rc1