diff --git a/CHANGELOG.md b/CHANGELOG.md index fb18b11af..1c56bac9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). All scales should have the 'format' parameter. +## [4.8.0] - 2024-08-20 + +This release is 100% compatible with [Lets-Plot v 4.4.0](https://github.com/JetBrains/lets-plot/releases/tag/v4.4.0). + +### Added + +- Waterfall plot [[#975](https://github.com/JetBrains/lets-plot/issues/975)]: + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/waterfall_plot.ipynb). + +- `geomBand()` [[#733](https://github.com/JetBrains/lets-plot/issues/733)]: + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/us_unemployment.ipynb). + +- Custom legends [[#774](https://github.com/JetBrains/lets-plot/issues/774)]: + - `manualKey` parameter in plot layer + - `layerKey()` function + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/manual_legend.ipynb). + +- In legends: + - `title` parameter in `guideLegend()` and `guideColorbar()` functions + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/legend_title.ipynb). + + - override aesthetics in the `guideLegend()` function [[#807](https://github.com/JetBrains/lets-plot/issues/807)]: + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/legend_override_aes.ipynb). + +- `plotTitlePosition` and `plotCaptionPosition` parameters in `theme()` [[#1027](https://github.com/JetBrains/lets-plot/issues/1027)]. + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/theme_plot_title_position.ipynb). + +- `threshold` parameter in `geomHistogram()` [[#1122](https://github.com/JetBrains/lets-plot/issues/1122)]. + + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/geom_histogram_threshold.ipynb). + +### Changed + +- The triangular point shape is now anchored to the data point via the centroid + +### Fixed + +- ggsave (.svg) transforms geom_text integer to float [[#626](https://github.com/JetBrains/lets-plot/issues/626)]. +- Int DataFrame column names are being converted to float string representation [[#901](https://github.com/JetBrains/lets-plot/issues/901)]. +- `linetype` = 0 ("blank") should make lines invisible [[#712](https://github.com/JetBrains/lets-plot/issues/712)]. +- `geomDensity2D, geomDensity2DFilled`: support weight aesthetic [[#791](https://github.com/JetBrains/lets-plot/issues/791)]. +- Discrete axis labels unnecessarily rotate 90 degrees when applying coord system limits. +- Axis title via `labs()` breaks the date-time scale [[#1113](https://github.com/JetBrains/lets-plot/issues/1113)]. +- JavaFX IllegalArgumentException: Unsupported attribute `display` in Pane. + + ## [4.7.3] - 2024-05-30 This release is 100% compatible with [Lets-Plot v 4.3.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.3.3). diff --git a/README.md b/README.md index 8f6e49fcd..f5055ae14 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ See the "Quickstart" notebook in [Datalore](https://datalore.jetbrains.com/view/ - [Compose Multiplatform](#in-compose-multiplatform) - [JVM and Kotlin/JS](#in-jvm-js) - [Documentation](#documentation) -- [What is new in 4.7.0](#new) +- [What is new in 4.8.0](#new) - [Recent Updates in the Gallery](#recent_gallery_updates) - [Change Log](#change_log) - [Code of Conduct](#CoC) @@ -103,7 +103,7 @@ In this case the latest `library descriptor` will be pulled from the [Kotlin Jup #### Library Descriptor Parameters ``` -%use lets-plot(api=4.7.3, lib=4.3.3, js=4.3.3, isolatedFrame=false) +%use lets-plot(api=4.8.0, lib=4.4.0, js=4.4.0, isolatedFrame=false) ``` - `api` - version of the Lets-Plot Kotlin API. - `lib` - version of the Lets-Plot Multiplatform (JARs). @@ -134,51 +134,36 @@ Examples of using of the Lets-Plot Kotlin API in JVM and Kotlin/JS applications -## What is new in 4.7.0 +## What is new in 4.8.0 -- #### `coordPolar()` +- #### Waterfall Plot + f-24e/images/waterfall.png - The polar coordinate system is most commonly used for pie charts, but
- it can also be used for constructing **Spider or Radar charts** using the `flat` option. + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/waterfall_plot.ipynb). -
- f-24a/images/polar_coord_pie.png - f-24a/images/radar_chart.png - - See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.7.0/coord_polar.ipynb). - -- #### In the `theme()`: - - - `panelInset` parameter - primarily used for plots with polar coordinates. - See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.7.0/theme_panel_inset.ipynb). +- #### **`geomBand()`**: + f-24e/images/geom_band.png.png - - `panelBorderOntop` parameter - enables the drawing of panel border on top of the plot geoms. - - `panelGridOntop, panelGridOntopX, panelGridOntopY` parameters - enable the drawing of grid lines on top of the plot geoms. - -- #### `geomCurve()` + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/geom_band.ipynb). +- #### Custom Legends + - `manualKey` parameter in plot layer + - `layerKey()` function
- f-24a/images/curve_annotation.png - - See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.7.0/geom_curve.ipynb). + f-24e/images/custom_legend.png.png -- #### [**UNIQUE**] Visualizing Graph-like Data with `geomSegment()` and `geomCurve()` + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/manual_legend.ipynb). - - Aesthetics `sizeStart, sizeEnd, strokeStart` and `strokeEnd` enable better alignment of
- segments/curves with nodes of the graph by considering the size of the nodes. +- #### Customizing Legends Appearance + Override aesthetics in the `guideLegend()` function. - - The `spacer` parameter allows for additional manual fine-tuning. - -
- f-24a/images/graph_simple.png + See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.8.0/legend_override_aes.ipynb). - See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.7.0/graph_edges.ipynb). -- #### The `alphaStroke` Parameter in `geomLabel()` +- #### And More - Use the `alphaStroke` parameter to apply `alpha` to entire `label`. By default, `alpha` is only applied to the label background. + See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-kotlin/blob/master/CHANGELOG.md) for a full list of changes. - See: [example notebook](https://nbviewer.org/github/JetBrains/lets-plot-kotlin/blob/master/docs/examples/jupyter-notebooks/f-4.7.0/geom_label_alpha_stroke.ipynb). ## Recent Updates in the [Gallery](https://lets-plot.org/kotlin/gallery.html) diff --git a/USAGE_BATIK_JFX_JS.md b/USAGE_BATIK_JFX_JS.md index d74e040e3..f015bc1ab 100644 --- a/USAGE_BATIK_JFX_JS.md +++ b/USAGE_BATIK_JFX_JS.md @@ -52,9 +52,9 @@ plugins { dependencies { // Lets-Plot Kotlin API - implementation("org.jetbrains.lets-plot:lets-plot-kotlin-jvm:4.7.3") + implementation("org.jetbrains.lets-plot:lets-plot-kotlin-jvm:4.8.0") // Lets-Plot Multiplatform (Batik rendering) - implementation("org.jetbrains.lets-plot:lets-plot-batik:4.3.3") + implementation("org.jetbrains.lets-plot:lets-plot-batik:4.4.0") } ``` @@ -75,9 +75,9 @@ plugins { dependencies { // Lets-Plot Kotlin API - implementation("org.jetbrains.lets-plot:lets-plot-kotlin-jvm:4.7.3") + implementation("org.jetbrains.lets-plot:lets-plot-kotlin-jvm:4.8.0") // Lets-Plot Multiplatform (JFX Scene rendering) - implementation("org.jetbrains.lets-plot:lets-plot-jfx:4.3.3") + implementation("org.jetbrains.lets-plot:lets-plot-jfx:4.4.0") } ``` @@ -95,7 +95,7 @@ kotlin { named("jsMain") { dependencies { // Lets-Plot Kotlin API - implementation("org.jetbrains.lets-plot:lets-plot-kotlin-js:4.7.3") + implementation("org.jetbrains.lets-plot:lets-plot-kotlin-js:4.8.0") } } } @@ -193,7 +193,7 @@ val rawSpec = figure.toSpec() ```kotlin val html: String = PlotHtmlExport.buildHtmlFromRawSpecs( plotSpec = rawSpec, - scriptUrl = PlotHtmlHelper.scriptUrl(version="4.3.3"), + scriptUrl = PlotHtmlHelper.scriptUrl(version="4.4.0"), iFrame = true ) ``` diff --git a/build.gradle.kts b/build.gradle.kts index d6388a038..6729a9c7f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,8 +25,8 @@ if (project.file("local.properties").exists()) { allprojects { group = "org.jetbrains.lets-plot" version = when (name) { - "dokka" -> "4.7.4" - else -> "4.7.4-SNAPSHOT" + "dokka" -> "4.8.0" + else -> "4.8.1-SNAPSHOT" // else -> "0.0.0-SNAPSHOT" // for local publishing only } diff --git a/docs/examples/jupyter-notebooks/f-4.8.0/geom_histogram_threshold.ipynb b/docs/examples/jupyter-notebooks/f-4.8.0/geom_histogram_threshold.ipynb index ccb1a05c6..96db6a705 100644 --- a/docs/examples/jupyter-notebooks/f-4.8.0/geom_histogram_threshold.ipynb +++ b/docs/examples/jupyter-notebooks/f-4.8.0/geom_histogram_threshold.ipynb @@ -23,7 +23,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -283,7 +283,7 @@ { "data": { "text/plain": [ - "Lets-Plot Kotlin API v.0.0.0-SNAPSHOT. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.4.0." + "Lets-Plot Kotlin API v.4.8.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.4.0." ] }, "execution_count": 2, @@ -332,7 +332,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -588,17 +588,17 @@ " \n", " \n", " \n", - "
\n", + "
\n", "\n", "

DataFrame: rowsCount = 3, columnsCount = 12

\n", - "
untitledmanufacturermodeldisplyearcyltransdrvctyhwyflclass
1audia41,80000019994auto(l5)f1829pcompact
2audia41,80000019994manual(m5)f2129pcompact
3audia42,00000020084manual(m6)f2031pcompact
\n", + "
untitledmanufacturermodeldisplyearcyltransdrvctyhwyflclass
1audia41.80000019994auto(l5)f1829pcompact
2audia41.80000019994manual(m5)f2129pcompact
3audia42.00000020084manual(m6)f2031pcompact
\n", " \n", " \n", " " ] @@ -637,7 +637,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -280,7 +280,7 @@ { "data": { "text/plain": [ - "Lets-Plot Kotlin API v.0.0.0-SNAPSHOT. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.3.4.dev1." + "Lets-Plot Kotlin API v.4.8.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.4.0." ] }, "execution_count": 2, @@ -610,10 +610,10 @@ " \n", " \n", " \n", - "
\n", + "
\n", "\n", "

DataFrame: rowsCount = 3, columnsCount = 12

\n", - "
untitledmanufacturermodeldisplyearcyltransdrvctyhwyflclass
1audia41.80000019994auto(l5)f1829pcompact
2audia41.80000019994manual(m5)f2129pcompact
3audia42.00000020084manual(m6)f2031pcompact
\n", + "
untitledmanufacturermodeldisplyearcyltransdrvctyhwyflclass
1audia41.80000019994auto(l5)f1829pcompact
2audia41.80000019994manual(m5)f2129pcompact
3audia42.00000020084manual(m6)f2031pcompact
\n", " \n", " \n", " " ] @@ -658,7 +658,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -293,7 +293,7 @@ { "data": { "text/plain": [ - "Lets-Plot Kotlin API v.0.0.0-SNAPSHOT. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.4.0." + "Lets-Plot Kotlin API v.4.8.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.4.0." ] }, "execution_count": 2, @@ -623,17 +623,17 @@ " \n", " \n", " \n", - "
\n", + "
\n", "\n", "

DataFrame: rowsCount = 3, columnsCount = 12

\n", - "
untitledmanufacturermodeldisplyearcyltransdrvctyhwyflclass
1audia41,80000019994auto(l5)f1829pcompact
2audia41,80000019994manual(m5)f2129pcompact
3audia42,00000020084manual(m6)f2031pcompact
\n", + "
untitledmanufacturermodeldisplyearcyltransdrvctyhwyflclass
1audia41.80000019994auto(l5)f1829pcompact
2audia41.80000019994manual(m5)f2129pcompact
3audia42.00000020084manual(m6)f2031pcompact
\n", " \n", " \n", " " ] @@ -672,7 +672,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -282,7 +282,7 @@ { "data": { "text/plain": [ - "Lets-Plot Kotlin API v.0.0.0-SNAPSHOT. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.3.4.dev1." + "Lets-Plot Kotlin API v.4.8.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.4.0." ] }, "execution_count": 2, @@ -335,7 +335,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -318,14 +318,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "0532a832-c389-44af-bc36-05e7b4a549ed", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
\n", + "
\n", " " ] }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/examples/jupyter-notebooks/f-4.8.0/waterfall_plot.ipynb b/docs/examples/jupyter-notebooks/f-4.8.0/waterfall_plot.ipynb index 5699e5a94..2f4ba6713 100644 --- a/docs/examples/jupyter-notebooks/f-4.8.0/waterfall_plot.ipynb +++ b/docs/examples/jupyter-notebooks/f-4.8.0/waterfall_plot.ipynb @@ -21,7 +21,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", " " @@ -93,7 +93,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "