Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
fd64e00
Fix sharing of secondary y-axis
May 12, 2025
8f0ac47
Add test
May 12, 2025
948bc38
black
May 12, 2025
dcc607c
black
May 12, 2025
7fd2702
Merge branch 'main' into secondary-y-shared
gvwilson Jun 26, 2025
d21f904
re-add ipython.get_ipython() check in _renderers.py
emilykl Jun 30, 2025
f141978
add test to ensure default renderer is 'browser'
emilykl Jun 30, 2025
27b8e6d
Update CONTRIBUTING.md to include jupyter lab local development instr…
marthacryan Jul 10, 2025
a2a3d65
Update CONTRIBUTING.md
marthacryan Jul 18, 2025
c2a34e8
Update CONTRIBUTING.md
marthacryan Jul 18, 2025
99e7e3f
feedback
gmjw Jul 19, 2025
42aea20
linewidth
gmjw Jul 19, 2025
a83c6b4
ruff
gmjw Jul 19, 2025
db0feea
Merge branch 'main' into secondary-y-shared
gmjw Jul 19, 2025
1e54e0c
add missing imports and variable definitions
LiamConnors Jul 29, 2025
776cf20
fix interp_mode typo
Lexachoc Aug 11, 2025
1528322
Use native legends when converting from matplotlib
robertoffmoura Aug 8, 2025
64d5be9
Run ruff format
robertoffmoura Aug 12, 2025
622428a
Fix broken import in `mplexporter` tests
mgorny Aug 13, 2025
df823b4
Copy width/height calculating logic from kaleido
ayjayt Aug 13, 2025
e8049a2
Add proper defaults to dict .get()
ayjayt Aug 14, 2025
8036084
Add proper defaults to dict .get() x2
ayjayt Aug 14, 2025
bcdccf4
Format with ruff.
ayjayt Aug 14, 2025
f1e7607
Add some width/height testing.
ayjayt Aug 14, 2025
1b962ec
Fix test formatting.
ayjayt Aug 14, 2025
20035c6
Fix variable access.
ayjayt Aug 14, 2025
c589d1c
Move test_kaleido helper fns to top of file
ayjayt Aug 18, 2025
e17895e
Use pio defaults to check test defaults
ayjayt Aug 18, 2025
c249e95
Pull off ruff format.
ayjayt Aug 18, 2025
34e6c0e
Update CITATION.cff
Coding-with-Adam Aug 19, 2025
7639653
Merge pull request #5325 from geopozo/andrew/better-kaleido-defaults
emilykl Aug 19, 2025
e693deb
Merge pull request #5331 from plotly/Coding-with-Adam-patch-1
Coding-with-Adam Aug 21, 2025
f27f38f
Merge pull request #5303 from plotly/add-missing-imports
gvwilson Aug 27, 2025
65e3b39
Merge branch 'main' into marthacryan-patch-1
marthacryan Sep 29, 2025
2d6771f
Merge pull request #5274 from plotly/marthacryan-patch-1
marthacryan Sep 29, 2025
7e5b564
update plotly.js to version 3.1.1
emilykl Oct 1, 2025
58cb13a
update FigureWidget and JupyterLab extension bundles
emilykl Oct 1, 2025
094e770
print help when no command supplied to commands.py
emilykl Oct 1, 2025
7c589f8
Refactored create_hexbin_mapbox to use *_map chart types instead of *…
ajlien Oct 1, 2025
b9a271d
Updated create_hexbin_mapbox docstring
ajlien Oct 1, 2025
1275e01
update labextension files because they are different than CI for some…
emilykl Oct 1, 2025
ceaa943
add npm ls step in check-js-build
emilykl Oct 1, 2025
675a8e7
format
emilykl Oct 1, 2025
8cff585
Merge branch 'main' into changes-for-main
LiamConnors Oct 1, 2025
6c58277
Merge pull request #5359 from plotly/changes-for-main
LiamConnors Oct 1, 2025
ae5f7ae
Merge branch 'main' into update-plotlyjs-v3.1.1
emilykl Oct 1, 2025
d462ac6
Merge pull request #5357 from plotly/update-plotlyjs-v3.1.1
emilykl Oct 1, 2025
380eefa
Merge pull request #5315 from Lexachoc/patch-0
emilykl Oct 1, 2025
75ae9d3
Merge branch 'main' into fix-default-renderer-when-ipython-installed
emilykl Oct 1, 2025
98d7e8b
Merge branch 'main' into rm/use-native-legend
emilykl Oct 1, 2025
d9ba65c
Merge branch 'main' into plt-import
emilykl Oct 1, 2025
aa4c088
Merge pull request #5312 from robertoffmoura/rm/use-native-legend
emilykl Oct 1, 2025
565a92c
Merge branch 'main' into update-hexbin-map-no-mapbox
emilykl Oct 1, 2025
ead0c76
Merge branch 'main' into plt-import
emilykl Oct 1, 2025
d2af541
Merge pull request #5258 from plotly/fix-default-renderer-when-ipytho…
emilykl Oct 1, 2025
fbbc9d6
Merge pull request #5322 from mgorny/plt-import
emilykl Oct 1, 2025
610b7ee
Merge branch 'main' into secondary-y-shared
emilykl Oct 1, 2025
2c5e2b6
fix matplotlib import
emilykl Oct 1, 2025
b258862
Merge pull request #5180 from gmjw/secondary-y-shared
emilykl Oct 1, 2025
832b46c
Merge branch 'main' into matplotlib-import-fix
emilykl Oct 1, 2025
a0de8c9
Merge pull request #5361 from plotly/matplotlib-import-fix
emilykl Oct 1, 2025
4e96a43
version changes for v6.3.1
emilykl Oct 2, 2025
ecb00fe
update uv lockfile
emilykl Oct 2, 2025
7cb8cdb
Merge pull request #5363 from plotly/release-v6.3.1
emilykl Oct 2, 2025
10c3321
Update RELEASE.md
emilykl Oct 2, 2025
ea6398e
review comments
emilykl Oct 3, 2025
bf29422
Merge pull request #5364 from plotly/release-instructions-cleanup
emilykl Oct 3, 2025
2651b21
lowercase plotly.py and plotly.js
emilykl Oct 9, 2025
3da153f
Merge pull request #5372 from plotly/release-instructions-cleanup
emilykl Oct 9, 2025
cd2d4ad
Renamed create_hexbin_mapbox to create_hexbin_map
ajlien Oct 22, 2025
bd178f6
Ruff formatting
ajlien Oct 22, 2025
5b38811
Merge branch 'main' into update-hexbin-map-no-mapbox
ajlien Oct 22, 2025
dd3bd89
More ruff formatting
ajlien Oct 22, 2025
ebb6209
Merge branch 'update-hexbin-map-no-mapbox' of github.com:ajlien/plotl…
ajlien Oct 22, 2025
4d8fbc4
Updated figure factory init
ajlien Oct 22, 2025
9773b5f
Removed Mapbox-related content from hexbin examples
ajlien Oct 22, 2025
9c18a8b
Merge pull request #5358 from ajlien/update-hexbin-map-no-mapbox
emilykl Oct 22, 2025
036adcc
Merge branch 'main' into doc-prod-to-main-merge
LiamConnors Oct 28, 2025
aac1b66
Merge pull request #5383 from plotly/doc-prod-to-main-merge
LiamConnors Oct 28, 2025
a58a365
Update plotly.js to v3.2.0 and associated files
camdecoster Oct 31, 2025
46ee9b2
Update Jupyter support files
camdecoster Oct 31, 2025
5586cf9
Use labextension files from CI because they are different
camdecoster Oct 31, 2025
056b497
Remove old build file
camdecoster Nov 3, 2025
89a1f1b
Revert indentation changes
camdecoster Nov 3, 2025
6d954ba
Merge pull request #5388 from plotly/cam/update-plotly.js-v3.2.0
camdecoster Nov 3, 2025
af55771
Update Kaleido dependency to v1.1.0
camdecoster Nov 3, 2025
b5dfa21
Merge pull request #5389 from plotly/cam/update-kaleido-version-1.1.0
camdecoster Nov 3, 2025
d2b1812
Version changes for v6.4.0
camdecoster Nov 3, 2025
c25a897
Merge pull request #5390 from plotly/release-6.4.0
camdecoster Nov 4, 2025
df9be85
update plotly.py version for docs
LiamConnors Nov 4, 2025
9043086
Update CHANGELOG.md
LiamConnors Nov 4, 2025
11d50b0
Merge pull request #5391 from plotly/update-docs-nov-4
LiamConnors Nov 5, 2025
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
1 change: 1 addition & 0 deletions .github/workflows/check-js-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
cd js
npm ci
npm run build
npm ls
- name: Check JupyterLab build artifacts
run: |
# 1. Hash contents of all static files, sort by content hash
Expand Down
25 changes: 24 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,33 @@ This project adheres to [Semantic Versioning](http://semver.org/).

## Unreleased

## [6.4.0] - 2025-11-02

### Updated
- Update plotly.js from version 3.1.1 to version 3.2.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5357](https://github.com/plotly/plotly.py/pull/5388)]. Notable changes include:
- Add `hovertemplatefallback` and `texttemplatefallback` attributes [[#7577](https://github.com/plotly/plotly.js/pull/7577)]
- Add "SI extended" formatting rule for tick exponents on axis labels, allowing values to be displayed with extended SI prefixes (e.g., femto, pico, atto) [[#7249](https://github.com/plotly/plotly.js/pull/7249)]

### Deprecated
- Deprecate `create_hexbin_mapbox` in favor of `create_hexbin_map`, update related function calls [[5358](https://github.com/plotly/plotly.py/pull/5358)], with thanks to @ajlien for the contribution!

## [6.3.1] - 2025-10-02

### Updated
- Update Plotly.js from version 3.1.0 to version 3.1.1. See the Plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5357](https://github.com/plotly/plotly.py/pull/5357)]. Notable changes include:
- Fix issue preventing Scattergl plots with text elements from rendering [[plotly.js#7563](https://github.com/plotly/plotly.js/pull/7563)]
- Use native legends when converting from matplotlib [[#5312](https://github.com/plotly/plotly.py/pull/5312)], with thanks to @robertoffmoura to the contribution!
- Allow `shared_yaxes` to work with secondary axes [[#5180](https://github.com/plotly/plotly.py/pull/5180)], with thanks to @gmjw for the contribution!

### Fixed
- Fix issue where width/height in plot layout were not respected during Kaleido image export [[#5325](https://github.com/plotly/plotly.py/pull/5325)]
- Fix typo in default argument to `_ternary_contour.py` [[#5315](https://github.com/plotly/plotly.py/pull/5315)], with thanks to @Lexachoc for the contribution!
- Fix incorrect `fig.show()` behavior when `ipython` is installed [[#5258](https://github.com/plotly/plotly.py/pull/5258)]

## [6.3.0] - 2025-08-12

### Updated
- Updated Plotly.js from version 3.0.1 to version 3.1.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5318](https://github.com/plotly/plotly.py/pull/5318)]
- Updated Plotly.js from version 3.0.1 to version 3.1.0. See the Plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5318](https://github.com/plotly/plotly.py/pull/5318)]

### Added
- Exposed `plotly.io.get_chrome()` as a function which can be called from within a Python script. [[#5282](https://github.com/plotly/plotly.py/pull/5282)]
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors:
- family-names: "Parmer"
given-names: "Chris"
title: "An interactive, open-source, and browser-based graphing library for Python"
version: 5.24.1
version: 6.4.0
doi: 10.5281/zenodo.14503524
date-released: 2024-09-12
date-released: 2025-11-02
url: "https://github.com/plotly/plotly.py"
14 changes: 14 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,20 @@ you can install all packages with:
pip install -e '.[dev]'
```

If you're testing local changes in Jupyter Lab or Jupyter Notebook, you'll want to run these commands when you're setting up your development environment:
```bash
pip install jupyter
jupyter labextension develop .
```
If you don't run that command, your figure will not render in the Jupyter Lab/ Jupyter Notebook editors.

If you're changing any of the code under the `js/` directory, you'll also want to run these commands:
```
cd js/
npm ci
npm run build
```

These commands also create an *editable install* of plotly.py
so that you can test your changes iteratively without having to rebuild the plotly.py package explicitly;
for more information please see
Expand Down
117 changes: 81 additions & 36 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

## Release process - full release of `plotly` package

This is the release process for releasing `plotly.py` version `X.Y.Z`, including changelogs, Github release and forum announcement.
This is the release process for releasing plotly.py version `X.Y.Z`, including changelogs, GitHub release and forum announcement.

### Finalize changelog

Expand All @@ -18,54 +18,99 @@ been updated, include this as the first `Updated` entry. Call out any
notable changes as sub-bullets (new trace types in particular), and provide
a link to the plotly.js CHANGELOG.

### Finalize versions
### Update version numbers

**Create a release branch `git checkout -b release-X.Y.Z` _from the tip of `origin/main`_.**

- Manually update the versions to `X.Y.Z` in the files specified below:
- `pyproject.toml`
- update version
- `CHANGELOG.md`
- update version and release date
- finalize changelog entries according to instructions above
- `CITATION.cff`
- update version and release date
- Run `uv lock` to update the version number in the `uv.lock` file (do not update manually)
- Commit and push your changes to the release branch:
```sh
$ git add -u
$ git commit -m "version changes for vX.Y.Z"
$ git push
```
- Create a GitHub pull request from `release-X.Y.Z` to `main` and wait for CI to be green
- On the release branch, create and push a tag for the release:
```sh
$ git tag vX.Y.Z
$ git push origin vX.Y.Z
```

### Manual QA in Jupyter

We don't currently have automated tests for Jupyter, so we do this QA step manually.

The `full_build` job in the `release_build` workflow in CircleCI produces a tarball of artifacts `output.tgz`
which you should download and decompress, which will give you a directory called `output`. The filenames within
will contain version numbers; make sure the version numbers are correct.

Set up an environment with Jupyter, AnyWidget, and Pandas installed (`pip install jupyter anywidget pandas`). Then:

- unzip downloaded `output.tgz`
- `pip uninstall plotly`
- `pip install path/to/output/dist/plotly-X.Y.Z-py3-none-any.whl`

You'll want to check, in both JupyterLab (launch with `jupyter lab`) and Jupyter Notebook (launch with `jupyter notebook`),
that `go.Figure()` and `go.FigureWidget()` work as expected.

**Create a branch `git checkout -b release-X.Y.Z` *from the tip of `origin/main`*.**
Notes:
- **Start by creating a brand new notebook each time** so that there is no caching of previous results
- **Do not run the Jupyter commands from the root `plotly.py/` directory on your machine** because Jupyter may be confused
by metadata from previous plotly.py builds

Manually update the versions to `X.Y.Z` in the files specified below.
Code for testing `go.Figure()`:
```python
import plotly
import plotly.graph_objects as go

- `pyproject.toml`
+ update version
- `CHANGELOG.md`
+ update the release date
- Commit your changes on the branch:
+ `git commit -a -m "version changes for vX.Y.Z"`
- Create a tag for Github release
+ `git tag vX.Y.Z`
+ `git push --atomic origin release-X.Y.Z vX.Y.Z`
- Create a Github pull request from `release-X.Y.Z` to `main` and wait for CI to be green
print(plotly.__version__) # Make sure version is correct
fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4], y=[1, 3, 2, 4]))
fig.show() # Figure should render in notebook
```

### Download and QA CI Artifacts
Code for testing `go.FigureWidget()`:
```python
import plotly
import plotly.graph_objects as go

The `full_build` job in the `release_build` workflow in CircleCI produces a tarball of artifacts `output.tgz` which you should download and decompress, which will give you a directory called `output`. The filenames contained within will contain version numbers.
print(plotly.__version__) # Make sure version is correct
fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4], y=[1, 3, 2, 4]))
figure_widget = go.FigureWidget(fig)
figure_widget # Figure should render in notebook
```

To locally install the PyPI dist, make sure you have an environment with JupyterLab installed (maybe one created with `conda create -n condatest python=3.10 jupyter anywidget pandas`):
Once these are verified working, you can move on to publishing the release.

- `tar xzf output.tgz`
- `pip uninstall plotly`
- `conda uninstall plotly` (just in case!)
- `pip install path/to/output/dist/plotly-X.Y.X-py3-none-any.whl`
### Merge the release PR and make a GitHub release

You'll want to check, in both Lab and Notebook, **in a brand new notebook in each** so that there is no caching of previous results, that `go.Figure()` and `go.FigureWidget()` work without error.
- Merge the pull request you created above into `main`
- Go to https://github.com/plotly/plotly.py/releases and "Draft a new release"
- Enter the `vX.Y.Z` tag you created already above and make "Release title" the same string as the tag.
- Copy the changelog section for this version into "Describe this release"
- Upload the build artifacts downloaded in the previous step (`.tar` and `.whl`)

### Publishing
### Publishing to PyPI

Once you're satisfied that things render in Lab and Notebook in Widget and regular mode,
you can publish the artifacts. **You will need special credentials from Plotly leadership to do this.**.
The final step is to publish the release to PyPI. **You will need special permissions from Plotly leadership to do this.**.

You must install first install [Twine](https://pypi.org/project/twine/) (`pip install twine`) if not already installed.

Publishing to PyPI:
```bash
(plotly_dev) $ cd path/to/output
(plotly_dev) $ twine upload plotly-X.Y.Z*
```

### Merge the PR and make a Release

1. Merge the pull request you created above into `main`
2. Go to https://github.com/plotly/plotly.py/releases and "Draft a new release"
3. Enter the `vX.Y.Z` tag you created already above and make "Release title" the same string as the tag.
4. Copy the changelog section for this version as the "Describe this release"
You will be prompted to enter an API token; this can be generated in your PyPI account settings.
Your account must have permissions to publish to the `plotly` project on PyPI.

### Update documentation site

Expand All @@ -76,18 +121,18 @@ Publishing to PyPI:
start by doing it first if not. Then merge `main` into `doc-prod` to deploy the doc related
to features in the release.
3. in a clone of the [`graphing-library-docs` repo](https://github.com/plotly/graphing-library-docs):
1. bump the version of Plotly.py in `_data/pyversion.json`
2. bump the version of Plotly.js with `cd _data && python get_plotschema.py <PLOTLY.JS VERSION>` fixing any errors that come up.
- If Plotly.js contains any new traces or trace or layout attributes, you'll get a warning `“missing key in attributes: <attribute-name>`. To resolve, add the attribute to the relevant section in `/_data/orderings.json` in the position you want it to appear in the reference docs.
1. bump the version of plotly.py in `_data/pyversion.json`
2. bump the version of plotly.js with `cd _data && python get_plotschema.py <PLOTLY.JS VERSION>` fixing any errors that come up.
- If plotly.js contains any new traces or trace or layout attributes, you'll get a warning `“missing key in attributes: <attribute-name>`. To resolve, add the attribute to the relevant section in `/_data/orderings.json` in the position you want it to appear in the reference docs.
3. rebuild the Algolia `schema` index with `ALGOLIA_API_KEY=<key> make update_ref_search`
4. Rebuild the Algolia `python` index with `ALGOLIA_API_KEY=<key> make update_python_search`
5. Commit and push the changes to `master` in that repo

### Notify Stakeholders

* Post an announcement to the Plotly Python forum, with links to the README installation instructions and to the CHANGELOG.
* Post an announcement to the [Plotly Python forum](https://community.plotly.com/c/plotly-python/5), with links to the README installation instructions and to the CHANGELOG.
* Update the previous announcement to point to this one
* Update the Github Release entry and CHANGELOG entry to have the nice title and a link to the announcement
* Update the GitHub Release entry and CHANGELOG entry to have the nice title and a link to the announcement
* Follow up on issues resolved in this release or forum posts with better answers as of this release

## Release process - Release *Candidate* of `plotly` package
Expand Down
Loading