Lets-Plot

Lets-Plot is a multiplatform plotting library built on the principles of the Grammar of Graphics.
The library' design is heavily influenced by Leland Wilkinson work The Grammar of Graphics describing the deep features that underlie all statistical graphics.
This grammar [...] is made up of a set of independent components that can be composed in many different ways. This makes [it] very powerful because you are not limited to a set of pre-specified graphics, but you can create new graphics that are precisely tailored for your problem.
Grammar of Graphics for Python 
A bridge between R (ggplot2) and Python data visualization.
To learn more see the documentation site at lets-plot.org.
Grammar of Graphics for Kotlin 
Notebooks
Create plots in Kotlin Notebook,
Datalore, Jupyter with Kotlin Kernel
or any other notebook that supports Kotlin Kernel
.
To learn more see the Lets-Plot Kotlin API project at GitHub.
Compose Multiplatform
Embed Lets-Plot charts in Compose Multiplatform applications.
To learn more see the Lets-Plot Skia Frontend project at GitHub.
JVM and Kotlin/JS
Embed Lets-Plot charts in JVM (Swing, JavaFX) and Kotlin/JS applications.
To learn more see the Lets-Plot Kotlin API project at GitHub.
"Lets-Plot in SciView" plugin

Scientific mode in PyCharm and in IntelliJ IDEA provides support for interactive scientific computing and data visualization.
Lets-Plot in SciView plugin adds
support for interactive plotting to IntelliJ-based IDEs with the Scientific mode enabled.
Note: The Scientific mode is NOT available in communinty editions of JetBrains IDEs.
Also read:
What is new in 4.7.0
-
Time Series Plotting
- Support for Python
time
and date
objects.
- Support for timezone-aware
datetime
objects and Pandas/Polars Series
.
See example notebook.
-
Native support for PNG and PDF exports
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.
-
geom_sina()
Geometry
See example notebook.
-
geom_text_repel()
and geom_label_repel()
Geometries
See example notebook.
-
waterfall_plot()
Chart
-
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.

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.
-
Plot Layout
The default plot layout has been improved to better accommodate axis labels and titles.
Also, new theme()
options axis_text_spacing
, axis_text_spacing_x
, and axis_text_spacing_y
control spacing between axis ticks and labels.

See the plot layout diagram showing various layout options and their effects on plot appearance.
-
And More
See CHANGELOG.md for a full list of changes.
Recent Updates in the Gallery
Change Log
CHANGELOG.md
Code of Conduct
This project and the corresponding community are governed by the
JetBrains Open Source and Community Code of Conduct.
Please make sure you read it.
License
Code and documentation released under the MIT license.
Copyright © 2019-2025, JetBrains s.r.o.