|
2 | 2 |
|
3 | 3 | ## NEW FEATURES & IMPROVEMENTS
|
4 | 4 |
|
5 |
| -* Upgraded to plotly.js v1.38.1. A _huge_ amount of features and improvements have been made since v1.29.2 (i.e., the version included in the last CRAN release of the R package - v4.7.1). Highlights include a complete re-write of `scattergl` to make it nearly feature complete with `scatter`, localization of text rendering (i.e., international translations), and two new trace types (`violin` & `table`). Read more about the v1.32.0 release [here](https://codeburst.io/notes-from-the-latest-plotly-js-release-b035a5b43e21) and the complete list of changes [here](https://github.com/plotly/plotly.js/releases). |
| 5 | +### plotly.js and `plot_ly()` specific improvements |
| 6 | + |
| 7 | +* Upgraded to plotly.js v1.38.2. A _huge_ amount of features and improvements have been made since v1.29.2 (i.e., the version included in the last CRAN release of the R package - v4.7.1). Highlights include a complete re-write of `scattergl` to make it nearly feature complete with `scatter`, localization of text rendering (i.e., international translations), and six new trace types (`cone`, `scatterpolar`, `scatterpolargl`, `splom`, `table`, & `violin`)! See [here](https://github.com/plotly/plotly.js/releases) for a complete list of plotly.js-specific improvements. |
6 | 8 | * Support for **sf** (simple feature) data structures was added to `plot_ly()`, `plot_mapbox()`, and `plot_geo()` (via the new `add_sf()` function). See [this blog post](https://blog.cpsievert.me/2018/03/30/visualizing-geo-spatial-data-with-sf-and-plotly) for an overview.
|
7 |
| -* New "special arguments" `stroke`, `strokes`, `alpha_stroke`, `span`, and `spans` were added for easier control over the stroke (i.e., outline) appearance of various (filled) graphical marks. For an overview, see the **sf** blog post linked to in the bullet point above and the new package demos (list all demos with `demo(package = "plotly")`). |
| 9 | +* Better control over the stroke (i.e., outline) appearance of various filled graphical marks via the new "special arguments" (`stroke`, `strokes`, `alpha_stroke`, `span`, and `spans`). For an overview, see the **sf** blog post linked to in the bullet point above and the new package demos (list all demos with `demo(package = "plotly")`). |
| 10 | + |
| 11 | +### `ggplotly()` specific improvements |
| 12 | + |
| 13 | +* `ggplotly()` now supports conversion of **ggplot2**'s `geom_sf()`. |
| 14 | +* One may now inform `ggplotly()` about the relevant **shiny** output size via `session$clientData`. This ensures `ggplotly()` sizing is closer to **ggplot2** sizing, even on window resize. For an example, run `plotly_example("shiny", "ggplotly_sizing")`. |
| 15 | + |
| 16 | +### Other improvements relevant for all **plotly** objects |
| 17 | + |
8 | 18 | * The selection (i.e., linked-brushing) mode can now switch from 'transient' to 'persistent' by holding the 'shift' key. It's still possible to _force_ persistent selection by setting `persistent = TRUE` in `highlight()`, but `persistent = FALSE` (the default) is now recommended since it allows one to switch between [persistent/transient selection](https://plotly-book.cpsievert.me/linking-views-without-shiny.html#transient-versus-persistent-selection) in the browser, rather than at the command line.
|
| 19 | +* The `highlight()` function gains a `debounce` argument for throttling the rate at which `on` events may be fired. This is mainly useful for improving user experience when `highlight(on = "plotly_hover")` and mousing over relevant markers at a rapid rate (#1277) |
9 | 20 | * The new `partial_bundle()` function makes it easy to leverage [partial bundles of plotly.js](https://github.com/plotly/plotly.js#partial-bundles) for reduced file sizes and faster render times.
|
10 |
| -* The `config()` function gains a `locale` argument for easily changing localization defaults (see #1270). This makes it possible localize date axes, and in some cases, modebar buttons (see #1270) |
11 |
| -* One may now inform `ggplotly()` about the relevant **shiny** output size via `session$clientData`. This ensures `ggplotly()` sizing is closer to **ggplot2** sizing, even on window resize. For an example, run `plotly_example("shiny", "ggplotly_sizing")`. |
12 |
| -* Instead of an error, `ggplotly(NULL, "message")` and `plotly_build(NULL, "message")` now returns `htmltools::div("message")`, making it easier to relay messages in shiny when data isn't yet ready to plot (see #1116) |
13 |
| -* The `animation_button()` function gains a `label` argument, making it easier to control the label of an animation button generated through the `frame` API (see #1205). |
| 21 | +* The `config()` function gains a `locale` argument for easily changing localization defaults (#1270). This makes it possible localize date axes, and in some cases, modebar buttons (#1270). |
| 22 | +* Instead of an error, `ggplotly(NULL, "message")` and `plotly_build(NULL, "message")` now returns `htmltools::div("message")`, making it easier to relay messages in shiny when data isn't yet ready to plot (#1116). |
| 23 | +* The `animation_button()` function gains a `label` argument, making it easier to control the label of an animation button generated through the `frame` API (#1205). |
| 24 | +* Support for async rendering of inside **shiny** apps using the [promises](https://rstudio.github.io/promises/) package (#1209). |
14 | 25 |
|
15 | 26 | ## CHANGES
|
16 | 27 |
|
| 28 | +### `plot_ly()` specific changes |
| 29 | + |
| 30 | +* The `name` attribute is now a "special `plot_ly()` argument" and behaves similar to `split` (it ensures a different trace for every unique value supplied). Although this leads to a breaking change (`name` was previously appended to an automatically generated trace name), it leads to a more flexible and transparent API. Those that wish to have the old behavior back should provide relevant mappings to the `name` attributes (e.g. `plot_ly(mtcars, x = ~wt, y = ~mpg, color = ~factor(vs), name = "a")` should become `plot_ly(mtcars, x = ~wt, y = ~mpg, color = ~factor(vs), name = ~paste(vs, "\na"))`) |
17 | 31 | * The `color` argument now maps to `fillcolor`, making it much easier to use polygon fills to encode data values (e.g., choropleth maps). For backwards-compatibilty reasons, when `color` maps to `fillcolor`, `alpha` defaults to 0.5 (instead of 1). For an example, `plot_mapbox(mn_res, color = ~INDRESNAME)` or `plot_mapbox(mn_res, split = ~INDRESNAME, color = ~AREA, showlegend = FALSE, stroke = I("black"))`.
|
18 | 32 | * The `color` argument no longer automatically add `"markers"` to the `mode` attribute for scatter/scattergl trace types. Those who wish to have the old behavior back, should add `"markers"` to the `mode` explicity (e.g., change `plot_ly(economics, x = ~pce, y = ~pop, color = ~as.numeric(date), mode = "lines")` to `plot_ly(economics, x = ~pce, y = ~pop, color = ~as.numeric(date), mode = "lines+markers")`).
|
19 | 33 | * The `size` argument now informs a default [error_[x/y].width](https://plot.ly/r/reference/#scatter-error_x-width) (and `span` informs [error_[x/y].thickness](https://plot.ly/r/reference/#scatter-error_x-thickness)). Note you can override the default by specifying directly (e.g. `plot_ly(x = 1:10, y = 1:10, size = I(10), error_x = list(value = 5, width = 0))`).
|
20 | 34 | * `layout.showlegend` now defaults to `TRUE` for a *single* pie trace. This is a more sensible default and matches pure plotly.js behavior.
|
21 |
| -* The `elementId` field is no longer populated, which fixes the "Ignoring explicitly provided widget ID" warning in shiny applications (see #985). |
| 35 | + |
| 36 | +### Other changes relevant for all **plotly** objects |
| 37 | + |
| 38 | +* The `elementId` field is no longer populated, which fixes the "Ignoring explicitly provided widget ID" warning in shiny applications (#985). |
22 | 39 |
|
23 | 40 | ## BUG FIXES
|
24 | 41 |
|
| 42 | +### `ggplotly()` specific fixes |
25 | 43 |
|
26 | 44 | * The default `height`/`width` that `ggplotly()` assumes is now more consistently correct in various context, but it also now requires access to one of the following devices: `Cairo::Cairo()`, `png()`, or `jpg()`.
|
27 |
| -* In RStudio, `ggplotly()` was ignoring a specified `height`/`width` (see #1190). |
28 |
| -* `ggplotly()` now uses fixed heights for facet strips meaning that their height is still correct after a window resize (see #1265). |
29 |
| -* Bug fix for linking views with crosstalk where the source of the selection is an aggregated trace (see #1218). |
30 |
| -* Fixed algorithm for coercing the proposed layout to the plot schema (see #1156). |
31 |
| -* `add_*()` no longer inherits `crosstalk::SharedData` key information when `inherit = FALSE` (see #1242). |
32 |
| -* The `limits` argument of `colorbar()` wasn't being applied to `line.color`/`line.cmin`/`line.cmax` (see #1236). |
| 45 | +* In RStudio, `ggplotly()` was ignoring a specified `height`/`width` (#1190). |
| 46 | +* `ggplotly()` now uses fixed heights for facet strips meaning that their height is still correct after a window resize (#1265). |
| 47 | + |
| 48 | +### `plot_ly()` specific fixes |
| 49 | + |
| 50 | +* The `limits` argument of `colorbar()` wasn't being applied to `line.color`/`line.cmin`/`line.cmax` (#1236). |
| 51 | +* The `legendgroup` can now properly map data values (#1148). |
| 52 | + |
| 53 | +### Other fixes relevant for all **plotly** objects |
| 54 | + |
| 55 | +* Bug fix for linking views with crosstalk where the source of the selection is an aggregated trace (#1218). |
| 56 | +* Resizing behavior, after updating `height`/`width` via **shiny** reactive values, is now correct (#1068). |
| 57 | +* Fixed algorithm for coercing the proposed layout to the plot schema (#1156). |
| 58 | +* `add_*()` no longer inherits `crosstalk::SharedData` key information when `inherit = FALSE` (#1242). |
| 59 | + |
33 | 60 |
|
34 | 61 | # 4.7.1
|
35 | 62 |
|
|
0 commit comments