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's 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.
- Hadley Wickham, "ggplot2: Elegant Graphics for Data Analysis"
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/python.
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 Compose 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.
Documentation
Kotlin API documentation site: lets-plot.org/kotlin.
"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.8.0
geom_pointdensity()Geometry
See example notebook.
Explicit
groupaesthetic now overrides default grouping behavior instead of combining with it
[!IMPORTANT] BREAKING CHANGE:
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, matchingggplot2behavior. \ Usegroup=[var1, var2, ...]to group by multiple variables explicitly, \ andgroup=[]to disable any grouping.

See example notebook.
gggrid(): support for shared legends (parameterguides)
See example notebook.
Better handling of missing values in
geom_line(), geom_path(), geom_ribbon(), andgeom_area()
See example notebook.
geom_histogram(): custom bin bounds (parameterbreaks)See example notebook.
Legend automatically wraps to prevent overlap — up to 15 rows for vertical legends and 5 columns for horizontal ones
See example notebook.
flavor_standard()resets the theme's default color schemeUse to override other flavors or make defaults explicit.
See example notebook.
'left','right','top', and'bottom'legend justificationSee example notebook.
ggtb(): Addedsize_zoominandsize_basisparameters to control point size scaling behavior when zooming (works withgeom_pointand related layers).See: example notebook.
And More
See CHANGELOG.md for a full list of changes.
Recent Updates in the Gallery
Change Log
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.
