Changelog
Source:NEWS.md
plotly 4.12.1
CRAN release: 2026-07-22
Completed the
plot_ly()documentation for what happens whentypeis not specified (#2362).Removed the dependency on the
{lazyeval}package.
Bug fixes
Closed #2483:
save_image()no longer embeds Windows file paths directly into Python source passed toreticulate, fixing static image export with Kaleido on Windows.#2495:
ggplotly()now keeps merged legend titles in sync with their legend entries, fixing a case where an upstream change in rlang’s hashing could silently reorder combined legend titles (e.g.factor(vs)<br />factor(cyl)) out of step with the entries they label.
plotly 4.12.0
CRAN release: 2026-01-24
Changes to plotly.js
Upgrades plotly.js from v2.11.1 to v2.25.2 (35 releases). Key new features now available:
-
Multiple legends: Support for
legend2,legend3, etc. with separate positioning and visibility control -
Shape labels: New
labelattribute for shapes andlabel.texttemplatefor parametric shapes -
Marker direction: New
marker.angle,marker.angleref, andmarker.standoffproperties for directional markers -
Y-axis positioning:
shiftandautoshiftproperties to avoid y-axis overlapping in multi-axis plots -
Mapbox clustering: Clustering options and bounds support for
scattermapboxtraces - Equal Earth projection: New map projection option for geo subplots
- Pattern fills: Pattern support extended to pie, funnelarea, sunburst, icicle, and treemap charts
-
Editable selections: Persistent and editable selections over cartesian subplots with
editSelectionconfig option -
Axis label aliases:
labelaliasfor simplified axis label customization -
Grid styling:
griddashproperty and minor tick/grid line styling options
Also includes a security fix for prototype pollution and ~90KB bundle size reduction.
See the plotly.js releases page for the full changelog.
Improvements
-
save_image()now works with kaleido v1.0 and higher. (#2447)
Bug fixes
-
plotly_build()now works withggmatrixobjects (e.g., fromGGally::ggpairs()). (#2447) - Closed #2415:
ggplotly()now shows variables named ‘group’ in tooltips when mapped to aesthetics likecolour. - Closed #2455, #2460:
ggplotly()no longer creates empty shapes whenpanel.borderiselement_blank()(ggplot2 4.0.0 compatibility). - Closed #2466:
ggplotly()no longer errors whenscale_*_manual()has unused aesthetics (e.g.,aesthetics = c("colour", "fill")when only colour is used). - Closed #2305:
ggplotly()now respectsgeom_boxplot(outlier.shape = NA)to hide outlier points. - Closed #2467:
ggplotly()now correctly shows legends and splits traces when scales have multiple aesthetics. - Closed #2407, #2187:
ggplotly()now translateslegend.positiontheme element to plotly layout (supports “bottom”, “top”, “left”, and numeric positions). - Closed #2281:
ggplotly()no longer drops legends whengeom_blank()is present in the plot.
plotly 4.11.0
CRAN release: 2025-06-19
New features
-
ggplotly()now supports the ggridges package. (#2314)
Improvements
- Various updates to
ggplotly()to better support recent versions of ggplot2. (#2315, #2368, #2442, thanks @teunbrand).
Bug fixes
- Closed #2337: Creating a new
event_data()handler no longer causes a spurious reactive update of existingevent_data()s. (#2339) - Closed #2376: Removes errant boxmode warning for grouped boxplot. (#2396)
- Closed #2392: Trivial warning about RColorBrewer minimal n value is no longer thrown (#1999)