Skip to content

Commit 4b4886b

Browse files
author
wfr
committed
Merge branch 'v4.0' into Add_bottom-up_and_right-left_orientation_for_Sankey
2 parents 789ae0c + aac9239 commit 4b4886b

66 files changed

Lines changed: 116127 additions & 263079 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,54 @@ To see all merged commits on the master branch that will be part of the next plo
99

1010
where X.Y.Z is the semver of most recent plotly.js release.
1111

12+
## [4.0.0-rc.0] -- 2026-07-21
13+
14+
### Added
15+
- Add `minscale`, `maxscale` geo plot attributes [[#7371](https://github.com/plotly/plotly.js/pull/7371)], with thanks to @mojoaxel for the contribution!
16+
- Enable TypeScript compatibility within the library and start exporting types [[#7680](https://github.com/plotly/plotly.js/pull/7680)]
17+
- Add `quiver` trace type to visualize vector fields using arrows [[#7710](https://github.com/plotly/plotly.js/pull/7710)], with thanks to @degzhaus for the contribution!
18+
- Use dashed markers in legend for shape traces with dash configured [[#7845](https://github.com/plotly/plotly.js/pull/7845)]
19+
- Add `sort` option to Sankey links and nodes [[#7873](https://github.com/plotly/plotly.js/pull/7873)], with thanks to @adamreeve for the contribution!
20+
- Add support for MathJax v4 [[#7898](https://github.com/plotly/plotly.js/pull/7898)]
21+
22+
### Removed
23+
- **Breaking**: Remove `scattermapbox`, `choroplethmapbox`, `densitymapbox` trace types, the `mapbox` subplot, and the `mapboxAccessToken` config option [[#7860](https://github.com/plotly/plotly.js/pull/7860)]
24+
- These traces have been deprecated since v3. Use the equivalent `*map` traces going forward.
25+
- **Breaking**: Drop support for MathJax v2 [[#7898](https://github.com/plotly/plotly.js/pull/7898)]
26+
- MathJax v3 and v4 are now supported in plotly.js
27+
- Remove config attributes `showLink`, `linkText`, `sendData`, `showSources`, and `showEditInChartStudio`, as well as trace attribute `stream`, since all of these were associated with Chart Studio and are no longer needed [[#7812](https://github.com/plotly/plotly.js/pull/7812)]
28+
- Remove all `*src` attributes, as well as `layout.hidesources` attribute, from the schema [[#7829](https://github.com/plotly/plotly.js/pull/7829)]
29+
- Remove internal `trace._fullInput` property and other dead code related to the removed `transforms` feature. No user-facing changes expected [[#7834](https://github.com/plotly/plotly.js/pull/7834)]
30+
31+
### Changed
32+
- **Breaking**: Switch color processing library from [TinyColor](https://github.com/bgrins/TinyColor) to [color](https://github.com/Qix-/color) [[#7536](https://github.com/plotly/plotly.js/pull/7536)]
33+
- `rgb()`/`rgba()` strings with decimal 0–1 fractions are no longer supported
34+
- `hsv()` color strings are no longer permitted
35+
- Color calculations may differ slightly (by a few RGB units)
36+
- New color formats are now supported: '#ff0000aa', '#f00a', 'rgb(255 0 0)', 'rgba(255 0 0 / 0.5)', 'hsl(0 100% 50% / 0.5)', 'hsla(0, 100%, 50%, 0.5)', 'hwb(0, 0%, 0%)'
37+
- **Breaking**: Set default `layout.axis.tickmode` to `'sync'` when axis is overlaying [[#7684](https://github.com/plotly/plotly.js/pull/7684)]
38+
- **Breaking**: Change `splom.axis.matches` default from `false` to `true` [[#7843](https://github.com/plotly/plotly.js/pull/7843)]
39+
- **Breaking**: Replace `country-regex` with `country-iso-search` to search for country names in choropleth, scattergeo traces [[#7856](https://github.com/plotly/plotly.js/pull/7856)]
40+
- The vast majority of country names are handled exactly the same with the new library; a small number of legacy entries have been removed
41+
- **Breaking**: Update minimum required Node version to 22 [[#7861](https://github.com/plotly/plotly.js/pull/7861)]
42+
- **Breaking:** Change `layout.geo.fitbounds` default from `false` to `'locations'` [[#7895](https://github.com/plotly/plotly.js/pull/7895)]
43+
- `geo` subplots will now auto-fit the initial view to the trace data
44+
- Set `fitbounds: false` explicitly to opt out
45+
- Enable `scattermap` icons to render in color, upgrade Maki icons version to 8.2, and standardize scattermap legend icons to circles [[#7825](https://github.com/plotly/plotly.js/pull/7825)]
46+
- Use plot title as default filename for "Download plot" button [[#7828](https://github.com/plotly/plotly.js/pull/7828)]
47+
- Change signature of `plots.graphJson()` function to remove `mode` argument [[#7829](https://github.com/plotly/plotly.js/pull/7829)]
48+
- Upgrade `plotly/d3-sankey` to 0.12.3. [[#7830](https://github.com/plotly/plotly.js/pull/7830)], with thanks to @adamreeve for the contribution!
49+
- Update `plot_config` to show the "Upload to Cloud" button by default, and set the default server URL to cloud.plotly.com via [[#7909](https://github.com/plotly/plotly.js/pull/7909)]
50+
51+
### Fixed
52+
- Fix `histogram` autobin size for single-point traces in `overlay` mode on data updates via `Plotly.react` [[#7507](https://github.com/plotly/plotly.js/pull/7507)], with thanks to @Lexachoc for the contribution!
53+
- Format tick labels correctly for small numbers in exponential notation [[#7768](https://github.com/plotly/plotly.js/pull/7768)], with thanks to @Hasnaathussain for the contribution!
54+
- Fix crash when ordering categories by value (e.g. `sum descending`) with `null` coordinates [[#7855](https://github.com/plotly/plotly.js/pull/7855)]
55+
- Fix `scattermap`, `densitymap` traces not showing all points by dynamically computing `center`, `zoom` values [[#7884](https://github.com/plotly/plotly.js/pull/7884), [#7913](https://github.com/plotly/plotly.js/pull/7913)], with thanks to @palmerusaf and @DhruvGarg111 for the contributions!
56+
- Fix GeoJSON bounding-box computation for `choropleth` and `scattergeo` traces whose geometry crosses the antimeridian [[#7891](https://github.com/plotly/plotly.js/pull/7891)]
57+
- Snap cartesian axis tick values to multiple of delta so custom `tickformat` (e.g. `"~r"`) no longer shows floating-point artifacts [[#7901](https://github.com/plotly/plotly.js/pull/7901)], with thanks to @arieleli01212 and @kirthi-b for the contribution!
58+
59+
1260
## [3.7.0] -- 2026-07-03
1361

1462
### Changed

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ but the general idea is to be nice.
1414

1515
## Plotly.js vs Plotly.py and Plotly.R
1616

17-
[Plotly.js](https://plotly.com/javascript) is a standalone Javascript data visualization library, and it also powers the Python and R modules named `plotly` in those respective ecosystems (referred to as [Plotly.py](https://plotly.com/python) and [Plotly.R](http://plotly.com/r), respectively, for clarity). There also exist Plotly.js-powered libraries for other languages such as Julia, Scala, Rust, .NET and even C++!
17+
[Plotly.js](https://plotly.com/javascript) is a standalone Javascript data visualization library, and it also powers the Python and R modules named `plotly` in those respective ecosystems (referred to as [Plotly.py](https://plotly.com/python) and [Plotly.R](https://plotly.com/r), respectively, for clarity). There also exist Plotly.js-powered libraries for other languages such as Julia, Scala, Rust, .NET and even C++!
1818

1919
The basic architecture of Plotly.js is to accept [JSON](https://json.org/) representation of figures that adhere to the [figure schema](https://plotly.com/javascript/reference/index/) and draw interactive graphical representations of these figures in a browser. Libraries in other languages like Python and R provide idiomatic interfaces for users of those languages to create and manipulate these JSON structures, and arrange for them to be rendered in a browser context by Plotly.js. This means that in many cases, when a Python or R user wishes to add a feature to the library they know as `plotly`, the relevant changes must be implemented in Plotly.js, in this repo.
2020

build/plotcss.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ var rules = {
5454
"X .plotly-cloud-dialog .plotly-cloud-dialog-box": "box-sizing:border-box;min-width:300px;max-width:420px;padding:20px 24px;background-color:#fff;border:1px solid #e0e2e5;border-radius:4px;box-shadow:0 4px 16px rgba(0,0,0,.25);font-size:13px;color:#2a3f5f;",
5555
"X .plotly-cloud-dialog .plotly-cloud-dialog-title": "font-size:16px;font-weight:bold;margin-bottom:12px;",
5656
"X .plotly-cloud-dialog .plotly-cloud-dialog-message": "line-height:1.5;overflow-wrap:break-word;word-wrap:break-word;",
57+
"X .plotly-cloud-dialog .plotly-cloud-dialog-message--hostname": "font-weight:bold;",
5758
"X .plotly-cloud-dialog .plotly-cloud-dialog-buttons": "display:flex;justify-content:flex-end;margin-top:20px;",
5859
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn": "font-family:inherit;font-size:13px;padding:7px 16px;margin-left:8px;border-radius:3px;border:1px solid rgba(0,0,0,0);cursor:pointer;",
5960
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn:focus-visible": "outline:2px solid #447adb;outline-offset:1px;",
60-
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel": "background-color:#fff;border-color:#e0e2e5;color:#777;",
61-
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel:hover": "background-color:#f3f3f3;",
61+
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel": "background-color:#f3f3f3;margin-left:auto;color:#777;",
62+
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel:hover": "background-color:#e0e2e5;",
6263
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm": "background-color:#447adb;color:#fff;",
6364
"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm:hover": "background-color:#1d3b84;",
6465
Y: "font-family:\"Open Sans\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;",

dist/README.md

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ The main plotly.js bundles weight in at:
4343

4444
| plotly.js | plotly.min.js | plotly.min.js + gzip | plotly-with-meta.js |
4545
|-----------|---------------|----------------------|---------------------|
46-
| 10.7 MB | 4.6 MB | 1.4 MB | 11 MB |
46+
| 8.9 MB | 3.9 MB | 1.2 MB | 9.3 MB |
4747

4848
#### CDN links
49-
> https://cdn.plot.ly/plotly-3.7.0.js
49+
> https://cdn.plot.ly/plotly-4.0.0-rc.0.js
5050
51-
> https://cdn.plot.ly/plotly-3.7.0.min.js
51+
> https://cdn.plot.ly/plotly-4.0.0-rc.0.min.js
5252
5353

5454
#### npm packages
@@ -71,7 +71,7 @@ plotly.js also ships with several _partial_ bundles:
7171
- [geo](#plotlyjs-geo)
7272
- [gl3d](#plotlyjs-gl3d)
7373
- [gl2d](#plotlyjs-gl2d)
74-
- [mapbox](#plotlyjs-mapbox)
74+
- [map](#plotlyjs-map)
7575
- [finance](#plotlyjs-finance)
7676
- [strict](#plotlyjs-strict)
7777

@@ -91,12 +91,12 @@ The `basic` partial bundle contains trace modules `bar`, `pie` and `scatter`.
9191

9292
| Raw size | Minified size | Minified + gzip size |
9393
|------|-----------------|------------------------|
94-
| 2.7 MB | 1.1 MB | 366.4 kB |
94+
| 2.7 MB | 1.1 MB | 369.7 kB |
9595

9696
#### CDN links
97-
> https://cdn.plot.ly/plotly-basic-3.7.0.js
97+
> https://cdn.plot.ly/plotly-basic-4.0.0-rc.0.js
9898
99-
> https://cdn.plot.ly/plotly-basic-3.7.0.min.js
99+
> https://cdn.plot.ly/plotly-basic-4.0.0-rc.0.min.js
100100
101101

102102
#### npm packages
@@ -114,12 +114,12 @@ The `cartesian` partial bundle contains trace modules `bar`, `box`, `contour`, `
114114

115115
| Raw size | Minified size | Minified + gzip size |
116116
|------|-----------------|------------------------|
117-
| 3.4 MB | 1.4 MB | 464.8 kB |
117+
| 3.4 MB | 1.4 MB | 468.6 kB |
118118

119119
#### CDN links
120-
> https://cdn.plot.ly/plotly-cartesian-3.7.0.js
120+
> https://cdn.plot.ly/plotly-cartesian-4.0.0-rc.0.js
121121
122-
> https://cdn.plot.ly/plotly-cartesian-3.7.0.min.js
122+
> https://cdn.plot.ly/plotly-cartesian-4.0.0-rc.0.min.js
123123
124124

125125
#### npm packages
@@ -137,12 +137,12 @@ The `geo` partial bundle contains trace modules `choropleth`, `scatter` and `sca
137137

138138
| Raw size | Minified size | Minified + gzip size |
139139
|------|-----------------|------------------------|
140-
| 3 MB | 1.2 MB | 417.4 kB |
140+
| 3.1 MB | 1.3 MB | 435.1 kB |
141141

142142
#### CDN links
143-
> https://cdn.plot.ly/plotly-geo-3.7.0.js
143+
> https://cdn.plot.ly/plotly-geo-4.0.0-rc.0.js
144144
145-
> https://cdn.plot.ly/plotly-geo-3.7.0.min.js
145+
> https://cdn.plot.ly/plotly-geo-4.0.0-rc.0.min.js
146146
147147

148148
#### npm packages
@@ -160,12 +160,12 @@ The `gl3d` partial bundle contains trace modules `cone`, `isosurface`, `mesh3d`,
160160

161161
| Raw size | Minified size | Minified + gzip size |
162162
|------|-----------------|------------------------|
163-
| 4.2 MB | 1.6 MB | 529.2 kB |
163+
| 4.2 MB | 1.6 MB | 532.5 kB |
164164

165165
#### CDN links
166-
> https://cdn.plot.ly/plotly-gl3d-3.7.0.js
166+
> https://cdn.plot.ly/plotly-gl3d-4.0.0-rc.0.js
167167
168-
> https://cdn.plot.ly/plotly-gl3d-3.7.0.min.js
168+
> https://cdn.plot.ly/plotly-gl3d-4.0.0-rc.0.min.js
169169
170170

171171
#### npm packages
@@ -183,12 +183,12 @@ The `gl2d` partial bundle contains trace modules `parcoords`, `scatter`, `scatte
183183

184184
| Raw size | Minified size | Minified + gzip size |
185185
|------|-----------------|------------------------|
186-
| 3.8 MB | 1.5 MB | 523.1 kB |
186+
| 3.9 MB | 1.5 MB | 526.5 kB |
187187

188188
#### CDN links
189-
> https://cdn.plot.ly/plotly-gl2d-3.7.0.js
189+
> https://cdn.plot.ly/plotly-gl2d-4.0.0-rc.0.js
190190
191-
> https://cdn.plot.ly/plotly-gl2d-3.7.0.min.js
191+
> https://cdn.plot.ly/plotly-gl2d-4.0.0-rc.0.min.js
192192
193193

194194
#### npm packages
@@ -198,26 +198,26 @@ The `gl2d` partial bundle contains trace modules `parcoords`, `scatter`, `scatte
198198
199199
---
200200

201-
### plotly.js mapbox
201+
### plotly.js map
202202

203-
The `mapbox` partial bundle contains trace modules `choroplethmapbox`, `densitymapbox`, `scatter` and `scattermapbox`.
203+
The `map` partial bundle contains trace modules `choroplethmap`, `densitymap`, `scatter` and `scattermap`.
204204

205205
#### Stats
206206

207207
| Raw size | Minified size | Minified + gzip size |
208208
|------|-----------------|------------------------|
209-
| 4.5 MB | 1.9 MB | 582.2 kB |
209+
| 4.2 MB | 2 MB | 632.3 kB |
210210

211211
#### CDN links
212-
> https://cdn.plot.ly/plotly-mapbox-3.7.0.js
212+
> https://cdn.plot.ly/plotly-map-4.0.0-rc.0.js
213213
214-
> https://cdn.plot.ly/plotly-mapbox-3.7.0.min.js
214+
> https://cdn.plot.ly/plotly-map-4.0.0-rc.0.min.js
215215
216216

217217
#### npm packages
218-
> [plotly.js-mapbox-dist](https://www.npmjs.com/package/plotly.js-mapbox-dist)
218+
> [plotly.js-map-dist](https://www.npmjs.com/package/plotly.js-map-dist)
219219
220-
> [plotly.js-mapbox-dist-min](https://www.npmjs.com/package/plotly.js-mapbox-dist-min)
220+
> [plotly.js-map-dist-min](https://www.npmjs.com/package/plotly.js-map-dist-min)
221221
222222
---
223223

@@ -229,12 +229,12 @@ The `finance` partial bundle contains trace modules `bar`, `candlestick`, `funne
229229

230230
| Raw size | Minified size | Minified + gzip size |
231231
|------|-----------------|------------------------|
232-
| 2.9 MB | 1.2 MB | 400 kB |
232+
| 2.9 MB | 1.2 MB | 403.5 kB |
233233

234234
#### CDN links
235-
> https://cdn.plot.ly/plotly-finance-3.7.0.js
235+
> https://cdn.plot.ly/plotly-finance-4.0.0-rc.0.js
236236
237-
> https://cdn.plot.ly/plotly-finance-3.7.0.min.js
237+
> https://cdn.plot.ly/plotly-finance-4.0.0-rc.0.min.js
238238
239239

240240
#### npm packages
@@ -246,18 +246,18 @@ The `finance` partial bundle contains trace modules `bar`, `candlestick`, `funne
246246

247247
### plotly.js strict
248248

249-
The `strict` partial bundle contains trace modules `bar`, `barpolar`, `box`, `candlestick`, `carpet`, `choropleth`, `choroplethmapbox`, `cone`, `contour`, `contourcarpet`, `densitymapbox`, `funnel`, `funnelarea`, `heatmap`, `histogram`, `histogram2d`, `histogram2dcontour`, `icicle`, `image`, `indicator`, `isosurface`, `mesh3d`, `ohlc`, `parcats`, `parcoords`, `pie`, `sankey`, `scatter`, `scattergl`, `scatter3d`, `scattercarpet`, `scattergeo`, `scattermapbox`, `scatterpolar`, `scatterpolargl`, `scattersmith`, `scatterternary`, `splom`, `streamtube`, `sunburst`, `surface`, `table`, `treemap`, `violin`, `volume` and `waterfall`.
249+
The `strict` partial bundle contains trace modules `bar`, `barpolar`, `box`, `candlestick`, `carpet`, `choropleth`, `choroplethmap`, `cone`, `contour`, `contourcarpet`, `densitymap`, `funnel`, `funnelarea`, `heatmap`, `histogram`, `histogram2d`, `histogram2dcontour`, `icicle`, `image`, `indicator`, `isosurface`, `mesh3d`, `ohlc`, `parcats`, `parcoords`, `pie`, `sankey`, `scatter`, `scattergl`, `scatter3d`, `scattercarpet`, `scattergeo`, `scattermap`, `scatterpolar`, `scatterpolargl`, `scattersmith`, `scatterternary`, `splom`, `streamtube`, `sunburst`, `surface`, `table`, `treemap`, `violin`, `volume` and `waterfall`.
250250

251251
#### Stats
252252

253253
| Raw size | Minified size | Minified + gzip size |
254254
|------|-----------------|------------------------|
255-
| 11.5 MB | 5 MB | 1.5 MB |
255+
| 9.7 MB | 4.2 MB | 1.3 MB |
256256

257257
#### CDN links
258-
> https://cdn.plot.ly/plotly-strict-3.7.0.js
258+
> https://cdn.plot.ly/plotly-strict-4.0.0-rc.0.js
259259
260-
> https://cdn.plot.ly/plotly-strict-3.7.0.min.js
260+
> https://cdn.plot.ly/plotly-strict-4.0.0-rc.0.min.js
261261
262262

263263
#### npm packages

0 commit comments

Comments
 (0)