# lets-plot-kotlin **Repository Path**: mirrors_JetBrains/lets-plot-kotlin ## Basic Information - **Project Name**: lets-plot-kotlin - **Description**: Grammar of Graphics for Kotlin - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-08-09 - **Last Updated**: 2025-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Lets-Plot Kotlin API A **Grammar of Graphics** for Kotlin. [![official JetBrains project](http://jb.gg/badges/official-flat-square.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) [![License MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/JetBrains/lets-plot-kotlin/master/LICENSE) [![Latest Release](https://img.shields.io/github/v/release/JetBrains/lets-plot-kotlin)](https://github.com/JetBrains/lets-plot-kotlin/releases/latest) **Lets-Plot Kotlin API** is a Kotlin API for [Lets-Plot Multiplatform](https://github.com/JetBrains/lets-plot) plotting library, \ which is built on the principles of layered graphics first described in the \ Leland Wilkinson work [The Grammar of Graphics](https://www.goodreads.com/book/show/2549408.The_Grammar_of_Graphics).
book cover

Lets-Plot Kotlin API is largely based on the API
provided by ggplot2 package well-known to data scientists who use R.

To learn more about the Grammar of Graphics,
we recommend an excellent book called
“ggplot2: Elegant Graphics for Data Analysis”.

This will be a good prerequisite for further exploration of the Lets-Plot library.

### Quickstart Inside [Kotlin Notebook](https://plugins.jetbrains.com/plugin/16340-kotlin-notebook), [Datalore](https://datalore.jetbrains.com/) or [Jupyter with Kotlin Kernel](https://github.com/Kotlin/kotlin-jupyter#readme): ``` %use lets-plot ``` ```kotlin val rand = java.util.Random() val data = mapOf( "rating" to List(200) { rand.nextGaussian() } + List(200) { rand.nextGaussian() * 1.5 + 1.5 }, "cond" to List(200) { "A" } + List(200) { "B" } ) var p = letsPlot(data) p += geomDensity(color = "dark_green", alpha = .3) { x = "rating"; fill = "cond" } p + ggsize(700, 350) ``` Couldn't load quickstart_notebook.png
See the "Quickstart" notebook in [Datalore](https://datalore.jetbrains.com/view/notebook/aTA9lQnPkRwdCzT6uy95GZ) or [Jupyter nbviewer](https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/kotlin_examples/cookbook/quickstart.ipynb). ## Table of Contents - [Usage](#usage) - [Notebooks](#in-notebook) - [Compose Multiplatform](#in-compose-multiplatform) - [JVM and Kotlin/JS](#in-jvm-js) - [Documentation](#documentation) - [What is new in 4.11.0](#new) - [Recent Updates in the Gallery](#recent_gallery_updates) - [Change Log](#change_log) - [Code of Conduct](#CoC) - [License](#license) ## Usage ### Notebooks With the help of Lets-Plot Kotlin API you can easily create plots in [Kotlin Notebook](https://plugins.jetbrains.com/plugin/16340-kotlin-notebook), [Datalore](https://datalore.jetbrains.com/), [Jupyter with Kotlin Kernel](https://github.com/Kotlin/kotlin-jupyter#readme) \ or any other notebook that supports `Kotlin Kernel`. #### "Line Magics" ``` %use lets-plot ``` This "line magic" will apply **Lets-Plot library descriptor** which adds to your notebook all the boilerplate code necessary to create plots. By default, `library descriptor` is bundled with the Kotlin Jupyter Kernel installed in your environment. \ However, you can override the default settings using: ``` %useLatestDescriptors ``` In this case the latest `library descriptor` will be pulled from the [Kotlin Jupyter Libraries](https://github.com/Kotlin/kotlin-jupyter-libraries) repository. #### Library Descriptor Parameters ``` %use lets-plot(v=4.11.2, isolatedFrame=false) ``` - `v` - version of the Lets-Plot Kotlin API. - `isolatedFrame` - If `false`: load JS just once per notebook (default in Jupyter). If `true`: include Lets-Plot JS in each output (default in [Datalore](https://datalore.jetbrains.com/) notebooks). ### Compose Multiplatform To learn how to embed Lets-Plot charts in [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform) applications, please check out the [Lets-Plot Compose Frontend](https://github.com/JetBrains/lets-plot-compose) project at GitHub. ### JVM and Kotlin/JS To learn more about creating plots in JVM or Kotlin/JS environment, please read [USAGE_SWING_JFX_JS.md](https://github.com/JetBrains/lets-plot-kotlin/blob/master/USAGE_BATIK_JFX_JS.md). #### Examples Examples of using the Lets-Plot Kotlin API in JVM and Kotlin/JS applications are available in the [Lets-Plot Kotlin Mini Apps (Demos)](https://github.com/alshan/lets-plot-mini-apps) GitHub repository. ## Documentation * _Lets-Plot Kotlin API_ documentation and API reference: [**Lets-Plot for Kotlin**](https://lets-plot.org/kotlin) * A quick introduction to the _Grammar of Graphics_ and _Lets-Plot Kotlin API_: [Lets-Plot Usage Guide](https://nbviewer.jupyter.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/guide/user_guide.ipynb) ## What is new in 4.11.0 - #### Time Series Plotting - Support temporal data types from `kotlinx.datetime`, `java.time`, and `java.util`. - Support for timezone-aware `java.time.ZonedDateTime` and `java.time.OffsetDateTime` objects. f-25b/images/time_date_datetime.png See [Date-time](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.11.0/time_date_datetime.ipynb) cookbook.

f-4.11.0/images/bitcoin_trading.png See [Bitcoin trading](https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/kotlin_examples/demo/trading_chart.ipynb) demo.

- #### `geomSina()` Geometry f-25b/images/geom_sina.png See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.11.0/geom_sina.ipynb). - #### `geomTextRepel()` and `geomLabelRepel()` Geometries f-25b/images/geom_repel.png See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.11.0/ggrepel.ipynb). - #### `waterfallPlot()` Chart - Annotations support via `relativeLabels` and `absoluteLabels` parameters.

f-25b/images/waterfall_plot_annotations.png See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.11.0/waterfall_plot_annotations.ipynb).

- Support for combining waterfall bars with other geometry layers.

f-25b/images/waterfall_plot_layers.png See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.11.0/waterfall_plot_layers.ipynb). - #### 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.

f-25b/images/combo_discrete_continuous.png See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.11.0/numeric_data_on_discrete_scale.ipynb). > [!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 [`asDiscrete()`](https://lets-plot.org/kotlin/as-discrete.html) 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 `axisTextSpacing`, `axisTextSpacingX`, and `axisTextSpacingY` control spacing between axis ticks and labels.

f-25b/images/plot_layout_diagram.png See new [Plot Layout Diagrams](https://lets-plot.org/kotlin/presentation-options.html#plot-layout-diagrams) showing various layout options and their effects on plot appearance. - #### And More See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-kotlin/blob/master/CHANGELOG.md) for a full list of changes. ## Recent Updates in the [Gallery](https://lets-plot.org/kotlin/gallery.html) Raincloud plot Lets-Plot GeoTools with texts and labels Bitcoin daily trend visualization Creating magnifier inset effect with ggbunch() Customize legend appearance Zoom and Pan interactivity The observable LP-verse Sunshine hours ## Change Log See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-kotlin/blob/master/CHANGELOG.md). ## Code of Conduct This project and the corresponding community are governed by the [JetBrains Open Source and Community Code of Conduct](https://confluence.jetbrains.com/display/ALL/JetBrains+Open+Source+and+Community+Code+of+Conduct). Please make sure you read it. ## License Code and documentation released under the [MIT license](https://github.com/JetBrains/lets-plot-kotlin/blob/master/LICENSE). Copyright © 2019-2025, JetBrains s.r.o.