You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+48Lines changed: 48 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,54 @@ To see all merged commits on the master branch that will be part of the next plo
9
9
10
10
where X.Y.Z is the semver of most recent plotly.js release.
11
11
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!
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+7-5Lines changed: 7 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ but the general idea is to be nice.
14
14
15
15
## Plotly.js vs Plotly.py and Plotly.R
16
16
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++!
18
18
19
19
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.
20
20
@@ -78,7 +78,7 @@ We use the following [labels](https://github.com/plotly/plotly.js/labels) to tra
78
78
#### Prerequisites
79
79
80
80
- git
81
-
-[node.js](https://nodejs.org/en/). We recommend using node.js v18.x.
81
+
-[node.js](https://nodejs.org/en/). We recommend using node.js v22.x.
82
82
Upgrading and managing node versions can be easily done using
83
83
[`nvm`](https://github.com/nvm-sh/nvm) or its Windows alternatives.
84
84
-[`npm`](https://www.npmjs.com/) v10.x and up to ensure that the
@@ -405,8 +405,10 @@ All traces modules set:
405
405
This object is used to generate the plot-schema JSON.
406
406
-`_module.supplyDefaults`: Takes in input trace settings and coerces them into "full" settings
407
407
under `gd._fullData`. This one is called during the figure-wide `Plots.supplyDefaults` routine.
408
-
Note that the `supplyDefaults` method performance should scale with the number of attributes (**not** the
409
-
number of data points - so it should not loop over any data arrays).
408
+
As a rule, `supplyDefaults` performance should scale with the number of attributes rather than
409
+
the number of data points, so avoid looping over data arrays in this function. That being said,
410
+
there are a few exceptions to this rule due to technical requirements (`fitbounds` on map subplots).
411
+
The same guidance applies to `_module.supplyLayoutDefaults`.
410
412
-`_module.calc`: Converts inputs data into "calculated" (or sanitized) data. This one is called during
411
413
the figure-wide `Plots.doCalcdata` routine. The `calc` method is allowed to
412
414
scale with the number of data points and is in general more costly than `supplyDefaults`.
@@ -432,7 +434,7 @@ Other methods used by some trace modules:
432
434
selections.
433
435
-`_module.convert`: Sometimes separated from `_module.plot` or `_module.calc` to convert the
434
436
plotly.js settings to another framework e.g. to `gl-plot3d` for `gl3d` traces, to
435
-
`mapbox-gl` for `mapbox` traces. This split can make the logic easier to test.
437
+
`maplibre-gl` for `map` traces. This split can make the logic easier to test.
436
438
If you make a `convert`, you should call it from either `calc` or `plot`.
Copy file name to clipboardExpand all lines: README.md
+10-4Lines changed: 10 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -95,17 +95,23 @@ While non-minified source files may contain characters outside UTF-8, it is reco
95
95
> Please note that as of v2 the "plotly-latest" outputs (e.g. https://cdn.plot.ly/plotly-latest.min.js) will no longer be updated on the CDN, and will stay at the last v1 patch v1.58.5. Therefore, to use the CDN with plotly.js v2 and higher, you must specify an exact plotly.js version.
96
96
97
97
### MathJax
98
-
You can load either version two or version three of MathJax files. For example:
98
+
plotly.js supports using MathJax v3 or v4 to render mathematical expressions within plots.
99
+
100
+
MathJax is not included in the plotly.js bundle, so it must be loaded separately as a script on the webpage.
> When using MathJax version 3, it is also possible to use `chtml` output on the other parts of the page in addition to `svg` output for the plotly graph.
108
-
Please refer to `devtools/test_dashboard/index-mathjax3chtml.html` to see an example.
112
+
When MathJax is available, any string contained within `$..$` signs will be rendered using the MathJax engine. This applies to plot titles, axis labels, tick label text, and annotations.
113
+
114
+
plotly.js's use of the MathJax `svg` renderer should not prevent using other MathJax renderers elsewhere on the page, nor will it affect the global MathJax config. See `devtools/test_dashboard/index-mathjax3chtml.html` for an example of a webpage which uses the MathJax `chtml` renderer in the main page, and also displays Plotly charts containing MathJax equations rendered as `svg`.
109
115
110
116
### Need to have several WebGL graphs on a page?
111
117
You may simply load the [virtual-webgl](https://github.com/greggman/virtual-webgl) script for WebGL 1 (not WebGL 2) before loading other scripts.
0 commit comments