Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Raise a clear `ValueError` when an unsupported marginal plot type is passed to Plotly Express, instead of failing later with a cryptic `'NoneType' object has no attribute 'constructor'` message [[#5625](https://github.com/plotly/plotly.py/pull/5625)], with thanks to @eugen-goebel for the contribution!


### Updated
- Update plotly.js from version 3.6.0 to version 3.7.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.7.0) for more information [[#5639](https://github.com/plotly/plotly.py/pull/5639)]. Notable changes include:
- Rename `sendDataToCloud` modebar button to `sendChartToCloud`, and update to upload chart to Plotly Cloud [[#7802](https://github.com/plotly/plotly.js/pull/7802), [#7852](https://github.com/plotly/plotly.js/pull/7852), [#7854](https://github.com/plotly/plotly.js/pull/7854)]. NOTE: The Plotly Cloud endpoint for receiving charts is not yet functional, so this button won't complete the upload.
- Fix stale `scattergl` error bars after toggling traces with mixed error bar visibility [[#7773](https://github.com/plotly/plotly.js/issues/7773)], with thanks to @JulienIcon for the contribution!
- Fix geo `fitbounds` to choose a compact longitude range when point data straddles the antimeridian [[#7837](https://github.com/plotly/plotly.js/pull/7837)], with thanks to @SharadhNaidu for the contribution!


## [6.8.0] - 2026-06-03

### Added
Expand Down
28 changes: 18 additions & 10 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -273,22 +273,30 @@ python commands.py updateplotlyjs
```

This downloads new versions of `plot-schema.json` and `plotly.min.js` from the `plotly/plotly.js` GitHub repository
and places them in `plotly/package_data`.
It then regenerates all of the `graph_objs` classes based on the new schema,
and finally runs `npm install` in `js/` to refresh `js/package-lock.json` against the new `plotly.js`.
Commit the updated `js/package-lock.json` along with the regenerated files.

The JupyterLab extension and FigureWidget bundles in `plotly/labextension` and `plotly/package_data/widgetbundle.js`
are rebuilt as part of the release flow (see [RELEASE.md](RELEASE.md)) rather than on every plotly.js bump.

If you need to skip the `npm install` step entirely (e.g. `npm` isn't available),
and places them in `codegen/resources/` and `plotly/package_data/`, respectively.

It then does the following:
- Regenerates all of the `graph_objs` classes based on the new schema
- Runs `npm install` in `js/` to refresh `js/package-lock.json` against the new `plotly.js`
- Runs `npm run build` to rebuild the JupyterLab extension and FigureWidget bundles in `plotly/labextension` and `plotly/package_data/widgetbundle.js`.

Commit the updated files under:
- `codegen/resources/`
- `js/`
- `plotly/graph_objs/`
- `plotly/labextension/`
- `plotly/offline/`
- `plotly/package_data/`

If you need to skip the `npm` steps entirely (e.g. `npm` isn't available),
set the `SKIP_NPM=1` environment variable:

```bash
SKIP_NPM=1 python commands.py updateplotlyjs
```

If you do skip it, you'll need to run `npm install` in `js/` yourself before committing so the lockfile stays in sync.
If you do skip it, you'll need to find a way to manually run `npm install && npm run build` in `js/` before committing,
so that the lockfile and build artifacts stay in sync with `js/package.json`.

### Using a Development Branch of Plotly.js

Expand Down
8 changes: 4 additions & 4 deletions codegen/resources/plot-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@
"valType": "number"
},
"plotlyServerURL": {
"description": "When set it determines base URL for the 'Edit in Chart Studio' `showEditInChartStudio`/`showSendToCloud` mode bar button and the showLink/sendData on-graph link. To enable sending your data to Chart Studio Cloud, you need to set both `plotlyServerURL` to 'https://chart-studio.plotly.com' and also set `showSendToCloud` to true.",
"description": "Sets the URL for the `sendChartToCloud` modebar button. When clicked, the button will send the chart data to this URL.",
"dflt": "",
"valType": "string"
},
Expand Down Expand Up @@ -331,7 +331,7 @@
"valType": "boolean"
},
"showEditInChartStudio": {
"description": "Same as `showSendToCloud`, but use a pencil icon instead of a floppy-disk. Note that if both `showSendToCloud` and `showEditInChartStudio` are turned, only `showEditInChartStudio` will be honored.",
"description": "Deprecated. Use `showSendToCloud` instead.",
"dflt": false,
"valType": "boolean"
},
Expand All @@ -341,7 +341,7 @@
"valType": "boolean"
},
"showSendToCloud": {
"description": "Should we include a ModeBar button, labeled \"Edit in Chart Studio\", that sends this chart to chart-studio.plotly.com (formerly plot.ly) or another plotly server as specified by `plotlyServerURL` for editing, export, etc? Prior to version 1.43.0 this button was included by default, now it is opt-in using this flag. Note that this button can (depending on `plotlyServerURL` being set) send your data to an external server. However that server does not persist your data until you arrive at the Chart Studio and explicitly click \"Save\".",
"description": "Should we include a modebar button that sends this chart to a URL specified by `plotlyServerURL`, for sharing the chart with others? Note that this button will (after a confirmation step) send chart data to an external server.",
"dflt": false,
"valType": "boolean"
},
Expand Down Expand Up @@ -4639,7 +4639,7 @@
},
"remove": {
"arrayOk": true,
"description": "Determines which predefined modebar buttons to remove. Similar to `config.modeBarButtonsToRemove` option. This may include *autoScale2d*, *autoscale*, *editInChartStudio*, *editinchartstudio*, *hoverCompareCartesian*, *hovercompare*, *lasso*, *lasso2d*, *orbitRotation*, *orbitrotation*, *pan*, *pan2d*, *pan3d*, *reset*, *resetCameraDefault3d*, *resetCameraLastSave3d*, *resetGeo*, *resetSankeyGroup*, *resetScale2d*, *resetViewMap*, *resetViewMapbox*, *resetViews*, *resetcameradefault*, *resetcameralastsave*, *resetsankeygroup*, *resetscale*, *resetview*, *resetviews*, *select*, *select2d*, *sendDataToCloud*, *senddatatocloud*, *tableRotation*, *tablerotation*, *toImage*, *toggleHover*, *toggleSpikelines*, *togglehover*, *togglespikelines*, *toimage*, *zoom*, *zoom2d*, *zoom3d*, *zoomIn2d*, *zoomInGeo*, *zoomInMap*, *zoomInMapbox*, *zoomOut2d*, *zoomOutGeo*, *zoomOutMap*, *zoomOutMapbox*, *zoomin*, *zoomout*.",
"description": "Determines which predefined modebar buttons to remove. Similar to `config.modeBarButtonsToRemove` option. This may include *autoScale2d*, *autoscale*, *hoverCompareCartesian*, *hovercompare*, *lasso*, *lasso2d*, *orbitRotation*, *orbitrotation*, *pan*, *pan2d*, *pan3d*, *reset*, *resetCameraDefault3d*, *resetCameraLastSave3d*, *resetGeo*, *resetSankeyGroup*, *resetScale2d*, *resetViewMap*, *resetViewMapbox*, *resetViews*, *resetcameradefault*, *resetcameralastsave*, *resetsankeygroup*, *resetscale*, *resetview*, *resetviews*, *select*, *select2d*, *sendChartToCloud*, *sendcharttocloud*, *tableRotation*, *tablerotation*, *toImage*, *toggleHover*, *toggleSpikelines*, *togglehover*, *togglespikelines*, *toimage*, *zoom*, *zoom2d*, *zoom3d*, *zoomIn2d*, *zoomInGeo*, *zoomInMap*, *zoomInMapbox*, *zoomOut2d*, *zoomOutGeo*, *zoomOutMap*, *zoomOutMapbox*, *zoomin*, *zoomout*.",
"dflt": "",
"editType": "modebar",
"valType": "string"
Expand Down
6 changes: 3 additions & 3 deletions commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ def install_js_deps(local, build=True):
When ``build`` is True (the default), also runs ``npm run build`` to
rebuild the JupyterLab extension and FigureWidget bundles and verifies
that the widget bundle exists. Pass ``build=False`` when you only need
to refresh ``node_modules`` / ``package-lock.json`` (e.g. after a
plotly.js version bump) and don't need the bundles rebuilt.
to refresh ``node_modules`` / ``package-lock.json`` but don't
need the bundles rebuilt.
"""

npmName = "npm"
Expand Down Expand Up @@ -224,7 +224,7 @@ def update_plotlyjs(plotly_js_version, outdir):
update_bundle(plotly_js_version)
update_schema(plotly_js_version)
perform_codegen(outdir)
install_js_deps(local=None, build=False)
install_js_deps(local=None, build=True)


# FIXME: switch to argparse
Expand Down
1,626 changes: 813 additions & 813 deletions js/lib/mimeExtension.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions js/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
},
"dependencies": {
"lodash-es": "^4.17.21",
"plotly.js": "3.6.0",
"plotly.js": "3.7.0",
"@lumino/widgets": "~2.4.0"
},
"devDependencies": {
Expand Down
34 changes: 16 additions & 18 deletions plotly/graph_objs/layout/_modebar.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,20 +155,20 @@ def remove(self):
"""
Determines which predefined modebar buttons to remove. Similar
to `config.modeBarButtonsToRemove` option. This may include
"autoScale2d", "autoscale", "editInChartStudio",
"editinchartstudio", "hoverCompareCartesian", "hovercompare",
"lasso", "lasso2d", "orbitRotation", "orbitrotation", "pan",
"pan2d", "pan3d", "reset", "resetCameraDefault3d",
"resetCameraLastSave3d", "resetGeo", "resetSankeyGroup",
"resetScale2d", "resetViewMap", "resetViewMapbox",
"resetViews", "resetcameradefault", "resetcameralastsave",
"resetsankeygroup", "resetscale", "resetview", "resetviews",
"select", "select2d", "sendDataToCloud", "senddatatocloud",
"tableRotation", "tablerotation", "toImage", "toggleHover",
"toggleSpikelines", "togglehover", "togglespikelines",
"toimage", "zoom", "zoom2d", "zoom3d", "zoomIn2d", "zoomInGeo",
"zoomInMap", "zoomInMapbox", "zoomOut2d", "zoomOutGeo",
"zoomOutMap", "zoomOutMapbox", "zoomin", "zoomout".
"autoScale2d", "autoscale", "hoverCompareCartesian",
"hovercompare", "lasso", "lasso2d", "orbitRotation",
"orbitrotation", "pan", "pan2d", "pan3d", "reset",
"resetCameraDefault3d", "resetCameraLastSave3d", "resetGeo",
"resetSankeyGroup", "resetScale2d", "resetViewMap",
"resetViewMapbox", "resetViews", "resetcameradefault",
"resetcameralastsave", "resetsankeygroup", "resetscale",
"resetview", "resetviews", "select", "select2d",
"sendChartToCloud", "sendcharttocloud", "tableRotation",
"tablerotation", "toImage", "toggleHover", "toggleSpikelines",
"togglehover", "togglespikelines", "toimage", "zoom", "zoom2d",
"zoom3d", "zoomIn2d", "zoomInGeo", "zoomInMap", "zoomInMapbox",
"zoomOut2d", "zoomOutGeo", "zoomOutMap", "zoomOutMapbox",
"zoomin", "zoomout".

The 'remove' property is a string and must be specified as:
- A string
Expand Down Expand Up @@ -251,7 +251,6 @@ def _prop_descriptions(self):
Determines which predefined modebar buttons to remove.
Similar to `config.modeBarButtonsToRemove` option. This
may include "autoScale2d", "autoscale",
"editInChartStudio", "editinchartstudio",
"hoverCompareCartesian", "hovercompare", "lasso",
"lasso2d", "orbitRotation", "orbitrotation", "pan",
"pan2d", "pan3d", "reset", "resetCameraDefault3d",
Expand All @@ -260,7 +259,7 @@ def _prop_descriptions(self):
"resetViewMapbox", "resetViews", "resetcameradefault",
"resetcameralastsave", "resetsankeygroup",
"resetscale", "resetview", "resetviews", "select",
"select2d", "sendDataToCloud", "senddatatocloud",
"select2d", "sendChartToCloud", "sendcharttocloud",
"tableRotation", "tablerotation", "toImage",
"toggleHover", "toggleSpikelines", "togglehover",
"togglespikelines", "toimage", "zoom", "zoom2d",
Expand Down Expand Up @@ -325,7 +324,6 @@ def __init__(
Determines which predefined modebar buttons to remove.
Similar to `config.modeBarButtonsToRemove` option. This
may include "autoScale2d", "autoscale",
"editInChartStudio", "editinchartstudio",
"hoverCompareCartesian", "hovercompare", "lasso",
"lasso2d", "orbitRotation", "orbitrotation", "pan",
"pan2d", "pan3d", "reset", "resetCameraDefault3d",
Expand All @@ -334,7 +332,7 @@ def __init__(
"resetViewMapbox", "resetViews", "resetcameradefault",
"resetcameralastsave", "resetsankeygroup",
"resetscale", "resetview", "resetviews", "select",
"select2d", "sendDataToCloud", "senddatatocloud",
"select2d", "sendChartToCloud", "sendcharttocloud",
"tableRotation", "tablerotation", "toImage",
"toggleHover", "toggleSpikelines", "togglehover",
"togglespikelines", "toimage", "zoom", "zoom2d",
Expand Down
4 changes: 2 additions & 2 deletions plotly/labextension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
},
"dependencies": {
"lodash-es": "^4.17.21",
"plotly.js": "3.6.0",
"plotly.js": "3.7.0",
"@lumino/widgets": "~2.4.0"
},
"devDependencies": {
Expand All @@ -33,7 +33,7 @@
"outputDir": "../plotly/labextension",
"webpackConfig": "./webpack.config.js",
"_build": {
"load": "static/remoteEntry.2a6392a40c19ad8383a0.js",
"load": "static/remoteEntry.2c524f5a18b54c442f5d.js",
"mimeExtension": "./mimeExtension"
}
}
Expand Down
2 changes: 2 additions & 0 deletions plotly/labextension/static/1.3ad216e94ff8bdcd7b73.js

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions plotly/labextension/static/1.747c8e0c8042a68fba0a.js

This file was deleted.

Loading