All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning. All scales should have the 'format' parameter.
BREAKING CHANGES: Due to refactorings performed in the source code, the v4.0.0 is no longer backward compatible with earlier versions of the Lets-Plot Kotlin API.
- All previously deprecated API were removed.
- The prefix "org" was added to all package names in the project.
- Some API elements were moved from package
org.jetbrains.letsPlot
to a more specific subpackages:- Plot theme elements were moved to subpackage
themes
- Coordinate system functions were moved to subpackage
coord
- Position adjustment functions were moved to subpackage
pos
- Plot theme elements were moved to subpackage
- Deprecated API:
- Position adjustment constants:
identity, stack, fill, dodge, nudge
andjitterdodge
(defined in thePos
object), are now deprecated in favor of the correspondent top level elements defined in the (new)org.jetbrains.letsPlot.pos
package:positionIdentity, positionStack, positionFill, positionDodge(), positionNudge()
andpositionJitterDodge()
.
- Position adjustment constants:
In Kotlin project
- Update import statements:
import jetbrains.letsPlot..
→import org.jetbrains.letsPlot..
- In all the other places where the code need to be updated, IntelliJ will show
WARNING
and will offer you to fix this automatically.
In Jupyter notebook
- As soon as you start using 4.0.0 in you notebook, the only thing you will want to do is to manually replace all
deprecated
Pos.abc
expressions with their new equivalents:Pos.identity
→positionIdentity
Pos.stack
→positionStack
Pos.fill
→positionFill
Pos.dodge
→positionDodge()
Pos.nudge
→positionNudge()
Pos.jitterdodge
→positionJitterDodge()
NOTE: If your notebook also uses another Kotlin library which depends on an older version of Lets-Plot, then the classloader may refuse to load classes from both libraries. If this is the case, then you will want to do NOT update your notebook to Lets-Plot v4.0.0 as yet:
- Make sure your notebook doesn't use the
%useLatestDescriptors
line magic- Make sure you are using Kotlin Jupyter Kernel version 0.11.0.95 (or earlier), which bundles a previous version of Lets-Plot.
-
Global theme configuring with
LetsPlot.theme
property.See: example notebook.
-
Quantile-Quantile (Q-Q) plot:
- geometries:
geomQQ()
geomQQLine()
geomQQ2()
geomQQ2Line()
- stats:
statQQ()
statQQLine()
statQQ2()
statQQ2Line()
- quick Q-Q:
qqPlot()
See: example notebook.
- geometries:
-
Marginal plots: the
ggmarginal()
function.See: example notebook.
-
Parameter
orientation
in geoms:bar, boxplot, density, histogram, freqpoly, smooth, violin
.See: example notebook.
-
New in plot theme:
-
face
parameter inelementText()
.See: example notebook.
-
panelBorder
parameter intheme()
[#542].See: example notebook.
-
Tooltip theme options, new parameters in
theme()
:tooltip
- tooltip rectangle options;tooltipText, tooltipTitleText
- tooltip text options;axisTooltipText, axisTooltipTextX, axisTooltipTextY
- axis tooltip text options.
See: example notebook.
-
-
scaleColorGradientN()
andscaleFillGradientN()
functions [#504].See: example notebook.
-
kotlinx.datetime
support. -
arrow
parameter ingeomSegment
- specification for arrow heads, as created byarrow()
function.
- Potentially breaking change: deprecation level for all deprecated API raised to the ERROR level.
geomImage()
removed as it is not yet production ready.- Default sampling type for
geom_violin
switched fromsystematic
topick
.
- Labels out of plot when axisTextY="blank" [#525].
- Outliers are not shown when boxplot' alpha=0.
- JFX rendering issue that causes tooltips to stuck [#539].
- Support trim parameter in
density
andydensity
stats [#62]. geom_violin
: add missing parameterskernel
,bw
,adjust
,n
,fs_max
to signature and docstring.
-
New geometries:
geomViolin()
See: example notebook.
geomDotplot()
See: example notebook.
geomYDotplot()
See: example notebook.
-
Plot subtitle and caption:
subtitle
parameter inggtitle()
andlabs()
,caption
parameter inlabs()
,plotSubtitle
andplotCaption
parameters intheme()
.See: example notebook.
-
Multi-line labels: The 'newline' character (
\n
) now works asline break
in plot title, subtitle and caption, in legend's title and in tooltips. -
In tooltip customization API: the
title()
option defines a tooltip "title" text which will always appear above the rest of the tooltip content.See: example notebook.
-
Parameter
scales
infacetGrid()/facetWrap()
[#451, #479].See: example notebook.
- New tooltip style: rounded corners, bold label, colored marker inside the tooltip.
- Deprecated tooltip customization API: function
color()
will be removed in one of the future releases. - 'Auto shrink': plots automatically shrink when necessary to fit width of the output (notebook) cell [#488].
- Automatic detection of DateTime series [#99].
- Too limited mapping options in GenericAesMapping [#82]
- scaleColorManual Divide by Zero with 1 mapping [#506].
- LinearBreaksHelper$Companion.computeNiceBreaks out of memory error [#105].
- CVE-2021-23792 in org.jetbrains.lets-plot:lets-plot-image-export@2.2.1 [#497].
- Fix tooltips for
geom_histogram(stat='density')
. - The axis tooltip overlaps the general tooltip [#515].
- The multi-layer tooltip detection strategy will only be used if more than one layer provides tooltips.
-
scaleXTime()
andscaleYTime()
.See: example notebook.
-
plotBackground, legendBackground
parameters intheme()
[#485]. -
axisOntop, axisOntopX, axisOntopY
parameters intheme()
- It should automatically stringify enums [#97].
- Coord system limits do not work with x/y scale with transform [#474].
- Provide 0-23 hour formatting [#469].
- No tooltip shown when I'm trying to add an empty line [#382].
coord_fixed()
should adjust dimensions of "geom" panel accordingly [#478].- The tooltip dependence on number of factors works separately by layers [#481].
- Tooltip on y-axis looks wrong [#393].
- Is kotlin-reflect really needed for lets-plot? [#471].
-
coordFlip()
.See: example notebook .
-
Date-time formatting support:
- using date-time format pattern in tooltip format();
- date/time scales apply date-time formatting to the
breaks
.
See
Out[7, 8, 10]
in the example notebook . -
Pre-configured themes:
- Standard ggplot2 themes:
themeGrey(), themeLight(), themeClassic(), themeMinimal()
; - Other themes:
themeMinimal2()
- the default theme,themeNone()
.
- Standard ggplot2 themes:
-
Theme modification: more parameters were added to the
theme()
function.See: example notebook.
Note: fonts size, family and face still can not be configured.
-
CorrPlot()
function now also accepts pre-computed correlation coefficients. -
Kotlin/JS IR:
xxx.klib
artifacts are now available.
- The size of fonts on plot was slightly increased all across the board.
- The default plot size was increased by 20%, it's now 600x400 px.
- Deprecated API: all
Theme.xxxBlank()
functions. Please use corresponding parameters intheme()
.
- Ordering facets - the "order" value 0 disables facet ordering [#454].
- Tooltips for discrete variables: add the dependence of the tooltip on the number of factors. The X-axis tooltip is always shown for discrete data.
- Unreadable breaks on axis [#430].
-
Ordering categories:
New parameters added to the
asDiscrete()
function:orderBy
- name of the variable by which the ordering will be performed;order
- ordering direction: 1 for ascending direction and -1 for descending (default).
See: as_discrete.
- Upgraded dependencies:
- Kotlin: 1.5.21
- Lets-Plot: 2.1.0 (see Lets-Plot CHANGELOG)
- Apache Batik: 1.14 [#398]
- The 'format' parameter in all scales [76].
- Upgraded
kotlinx.html
version to 0.7.3 (was 0.7.2)
In JVM projects it's no longer necessary to add
https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven
repository to the project configuration.
-
In tooltip customization API:
layerTooltips(variables)
- the new parametervariables
defines a list of variable names, which values will be placed in the general multiline tooltip. See: Tooltip Customization.
-
lets-plot-mini-apps GitHub repository containing examples of using the Lets-Plot Kotlin API in JVM and Kotlin/JS projects.
-
[BREAKING CHANGE]: The CDN for delivering the Lets-Plot JavaScript library is now JSDELIVR (was CDNJS).
New URLs:
-
The project has been converted to a "multiplatform" project targeting JVM and JS platforms.
To use Lets-Plot Kotlin API in your project, include dependencies:
- JVM:
implementation "org.jetbrains.lets-plot:lets-plot-kotlin-jvm:3.0.0"
- JS:
implementation "org.jetbrains.lets-plot:lets-plot-kotlin-js:3.0.0"
See README_DEV.md for more details.
- JVM:
-
[BREAKING CHANGE] The JVM artifact
lets-plot-kotlin-api
is no longer deployed: replaced with the equivalentlets-plot-kotlin-jvm
. -
The artifact
lets-plot-kotlin-api-kernel
renamed tolets-plot-kotlin-kernel
(this change only concerns Kotlin Jupyter Kernel)
- Poor font rendering in Swing/Batik. Related to: [#364]
- Exclude slf4j implementation from lets-plot-common [#374]
- geom_boxplot: should be possible to create boxplot without specifying x-series [#325]
- geom_hline: graph plotted outside of coordinate plane visible part [#334]
- Draw geometry only once if layer has no aes mapping specified [#73]
- Can't build plot: "Uncaught SyntaxError: Unexpected string" in a console [#371]
- [BREAKING CHANGE]: The groupId of all maven artifacts is now "org.jetbrains.lets-plot" (was " org.jetbrains.lets-plot-kotlin")
- Built with Lets-Plot v2.0.2 (was v2.0.2).
- All snake_case symbols were deprecated and replaced with equivalent camelCase symbols [#53].
- Maven artifacts published to Maven Central (due to shutting down of Bintray, JCenter)
-
facet_wrap()
function. -
in
facet_grid()
function:- Ascending/descending ordering of faceting values.
- Formatting of faceting values.
See: Facets demo
-
The
format
parameter in positional scales: formatting tick labels on X/Y axis. Supported types arenumber
anddate/time
.Example:
scale_x_datetime(format="%b %Y") scale_x_continuous(format="is {.2f}")
Demo: Formatting demo
See also: Formatting
-
The
guides()
function [#52]. -
In tooltip customization API:
- option
color
overrides the default tooltip color:geom_xxx(tooltips=layer_tooltips().color("red"))
See: Tooltip Customization.
- option
- Built with Lets-Plot v2.0.1 (was v1.5.6).
- All Java Swing demos were updated to use new
plot components
(new in Lets-Plot v2.0.1). - The "Minimal demo" was updated:
The majority of fixes in the core Lets-Plot vv 2.0.0, 2.0.1 are also applicable to this release.
See the Lets-Plot CHANGELOG.md.
-
Correlation plot builder.
Example: correlation_plot.ipynb
-
The
gggrid()
plot layout utilityExample: correlation_plot.ipynb
-
In tooltip customization API:
- options:
center
andmiddle
(anchor). - option 'minWidth'.
Example: tooltip_config.ipynb
- options:
-
The
naText
parameter ingeom_text()
-
Built with Lets-Plot v1.5.6 (was v1.5.4).
See Lets-Plot CHANGELOG.md for changes and fixes in 1.5.5, 1.5.6.
- GeoTools support (see geotools.md).
- API for tooltip customization ( see tooltips.md).
geom_map()
.labelFormat
parameter ingeom_text()
.reverse
parameter inscale_x/y_discrete()
.scale_x_discrete_reversed()
,scale_y_discrete_reversed()
-
Built with Lets-Plot v1.5.4 (was v1.5.2).
See Lets-Plot CHANGELOG.md for changes and fixes in 1.5.3, 1.5.4.
ggsave()
ignores raster format file extension.as_discrete()
: if more than one is used in the same mapping block, then all but one of them are ignored.
- The first public release.
- Maven artifact group id has changed.
- was before:
org.jetbrains.lets-plot
- since now :
org.jetbrains.lets-plot-kotlin
- was before: