NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #447 most downloaded on PyPI
An open-source interactive data visualization library for Python
Last release 10 days ago
15 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
13 years old
321 releases · first in 2013
Edited plotly.min.js due to issue using iplot to plot offline in Jupyter Notebooks
plotly.min.js due to issue using iplot to plot offline in Jupyter Notebooks
plotly.min.js may be cached in your Jupyter Notebook. Therefore, if you continue to experience this issue after upgrading the Plotly package please open a new notebook or clear the cache to ensure the correct plotly.min.js is referenced.Updated plotly.min.js from 1.14.1 to 1.16.2
plotly.min.js from 1.14.1 to 1.16.2
One column per quarter.
.create_trisurf now supports a visible colorbar for the trisurf plots. Check out the docs for help: ` import plotly.tools as tls help(tls.FigureFactor
.create_trisurf now supports a visible colorbar for the trisurf plots. Check out the docs for help:import plotly.tools as tls
help(tls.FigureFactory.create_trisurf)
The FigureFactory can now create 2D-density charts with .create_2D_density. Check it out with: ` import plotly.tools as tls help(tls.FigureFactory.cre
.create_2D_density. Check it out with:import plotly.tools as tls
help(tls.FigureFactory.create_2D_density)
Updated plotly.min.js from 1.13.0 to 1.14.1
plotly.min.js from 1.13.0 to 1.14.1
default-schemaupdate_plotlyjs_for_offline in makefile in order to automate updating plotly.min.js for offline modeUpdated plotly.min.js so the offline mode is using plotly.js v1.13.0
Plotly.toImage and Plotly.downloadImage bug specific to Chrome 51 on OSX.create_gantt. Check it out with:import plotly.tools as tls
help(tls.FigureFactory.create_gantt)
image to the existing plot calls, you can now download the images of the plots you make in offline mode._plot_html, and now sets the correct link text for plots
generated in offline mode.The FigureFactory can now create violin plots with .create_violin. Check it out with: ` import plotly.tools as tls help(tls.FigureFactory.create_violi
.create_violin. Check it out with:import plotly.tools as tls
help(tls.FigureFactory.create_violin)
Added ability to enable/disable SSL certificate verification for streaming. Disabling SSL certification verification requires Python v2.7.9 / v3.4.3 (
plotly_ssl_verification configuration setting.…choose between the two options. Note: This is a backwards incompatible change.
Changed the default option for create_distplot in the figure factory from probability to probability density and also added the histnorm parameter to allow the user to choose between the two options.
Note: This is a backwards incompatible change.
Updated plotly.min.js so the offline mode is using plotly.js v1.12.0
Allowed create_scatterplotmatrix and create_trisurf to use divergent and categorical colormaps. The parameter palette has been replaced by colormap and use_palette has been removed. In create_scatterplotmatrix, users can now:
colormap to map colors divergentlycolormap to color all the data with one colorcolormap to map index values to a specific colorcolormap_type, which specify the type of colormap being usedIn create_trisurf, the parameter dist_func has been replaced by color_func. Users can now:
colormap to map colors divergentlycolor_func to assign each simplex to a colorconnected=True
in the init_notebook_mode() function call.create_trisurf. Check it out with:import plotly.tools as tls
help(tls.FigureFactory.create_trisurf)
Version 1.9.13 fixed an issue in offline mode where if you ran init_notebook_mode more than once the function would skip importing (because it saw tha
init_notebook_mode
more than once the function would skip importing (because it saw that it had
already imported the library) but then accidentally clear plotly.js from the DOM.
This meant that if you ran init_notebook_mode more than once, your graphs would
not appear when you refreshed the page.
Version 1.9.13 solved this issue by injecting plotly.js with every iplot call.
While this works, it also injects the library excessively, causing notebooks
to have multiple versions of plotly.js inline in the DOM, potentially making
notebooks with many iplot calls very large.
Version 1.10.0 brings back the requirement to call init_notebook_mode before
making an iplot call. It makes init_notebook_mode idempotent: you can call
it multiple times without worrying about losing your plots on refresh.Fixed issue in offline mode related to the inability to reload plotly.js on page refresh and extra init_notebook_mode calls.
### Added - SSL support for streaming.
The FigureFactory can now create scatter plot matrices with .create_scatterplotmatrix. Check it out with: ` import plotly.tools as tls help(tls.Figure
.create_scatterplotmatrix. Check it out with:import plotly.tools as tls
help(tls.FigureFactory.create_scatterplotmatrix)
Updated plotly.min.js so the offline mode is using plotly.js v1.10.0
layerFixed require is not defined issue when plotting offline outside of Ipython Notebooks.
require is not defined issue when plotting offline outside of Ipython Notebooks.Error no longer results from a "Run All" cells when working in a Jupyter Notebook.
scatterternary, currently only available in offline mode)Offline mode will no longer delete the Jupyter Notebook's require, requirejs, and define variables.
Updated plotly.min.js so offline is using plotly.js v1.5.2
Offline matplotlib to Plotly figure conversion. Use offline.plot_mpl to convert and plot a matplotlib figure as a Plotly figure independently of IPyth
offline.plot_mpl to convert and plot a matplotlib figure as a Plotly figure independently of IPython/Jupyter notebooks or use offline.iplot_mpl to convert and plot inside of IPython/Jupyter notebooks. Additionally, use offline.enable_mpl_offline to convert and plot all matplotlib figures as plotly figures inside an IPython/Jupyter notebook. See examples below:An example independent of IPython/Jupyter notebooks:
from plotly.offline import init_notebook_mode, plot_mpl
import matplotlib.pyplot as plt
init_notebook_mode()
fig = plt.figure()
x = [10, 15, 20]
y = [100, 150, 200]
plt.plot(x, y, "o")
plot_mpl(fig)
An example inside of an IPython/Jupyter notebook:
from plotly.offline import init_notebook_mode, iplot_mpl
import matplotlib.pyplot as plt
init_notebook_mode()
fig = plt.figure()
x = [10, 15, 20]
y = [100, 150, 200]
plt.plot(x, y, "o")
iplot_mpl(fig)
An example of enabling all matplotlib figures to be converted to Plotly figures inside of an IPython/Jupyter notebook:
from plotly.offline import init_notebook_mode, enable_mpl_offline
import matplotlib.pyplot as plt
init_notebook_mode()
enable_mpl_offline()
fig = plt.figure()
x = [10, 15, 20, 25, 30]
y = [100, 250, 200, 150, 300]
plt.plot(x, y, "o")
fig
Offline plotting now works outside of the IPython/Jupyter notebook. Here's an example: ``` from plotly.offline import plot from plotly.graph_objs impo
from plotly.offline import plot
from plotly.graph_objs import Scatter
plot([Scatter(x=[1, 2, 3], y=[3, 1, 6])])
This command works entirely locally. It writes to a local HTML file with the necessary plotly.js code to render the graph. Your browser will open the file after you make the call.
The call signature is very similar to plotly.offline.iplot and plotly.plotly.plot and plotly.plotly.iplot, so you can basically use these commands interchangeably.
If you want to publish your graphs to the web, use plotly.plotly.plot, as in:
import plotly.plotly as py
from plotly.graph_objs import Scatter
py.plot([Scatter(x=[1, 2, 3], y=[5, 1, 6])])
This will upload the graph to your online plotly account.
Check for no_proxy when determining if the streaming request should pass through a proxy in the chunked_requests submodule. Example: no_proxy='my_stre
no_proxy when determining if the streaming request should pass through a proxy in the chunked_requests submodule. Example: no_proxy='my_stream_url' and http_proxy=my.proxy.ip:1234, then my_stream_url will not get proxied. Previously it would.Bug Fix: Previously, the "Export to plot.ly" link on offline charts would export your figures to the public plotly cloud, even if your config_file (se
Bug Fix: Previously, the "Export to plot.ly" link on
offline charts would export your figures to the
public plotly cloud, even if your config_file
(set with plotly.tools.set_config_file to the file
~/.plotly/.config) set plotly_domain to a plotly enterprise
URL like https://plotly.acme.com.
This is now fixed. Your graphs will be exported to your
plotly_domain if it is set.
The FigureFactory can now create annotated heatmaps with .create_annotated_heatmap. Check it out with: ` import plotly.tools as tls help(tls.FigureFac
.create_annotated_heatmap. Check it out with:import plotly.tools as tls
help(tls.FigureFactory.create_annotated_heatmap)
.create_table.import plotly.tools as tls
help(tls.FigureFactory.create_table)
…package: plotly.offline.download_plotlyjs is deprecated.
plotly.js is now shipped inside this package to allow
unlimited free use of plotly inside the ipython notebook environment.
The plotly.js library that is included in this package is free,
open source, and maintained independently on GitHub at
https://github.com/plotly/plotly.js.plotly.js bundle that is required for offline use is no longer downloaded
and installed independently from this package: plotly.offline.download_plotlyjs
is deprecated.plotly.js will be tested and incorporated
into this package as new versioned pip releases;
plotly.js is not automatically kept in sync with this package.*Big data* warning mentions plotly.graph_objs.Scattergl as possible solution.
plotly.graph_objs.Scattergl as possible solution.Nothing published for this version
Sometimes creating a graph with a private share-key doesn't work - the graph is private, but not accessible with the share key. Now we check to see if
Saving "world_readable" to your config file via plotly.tools.set_config actually works.
plotly.tools.set_config actually works.auto_open and sharing to the config file so that you can forget these
keyword argument in py.iplot and py.plot.Fixed validation errors (validate=False workaround no longer required)
.-access for nested attributes in plotly graph objects.help() method for plotly graph objects.help(<attribute>) also includedNothing published for this version
Fixed typos in plot and iplot documentations
plot and iplot documentationssharing keyword argument for plotly.plotly.plot and plotly.plotly.iplot with options 'public' | 'private' | 'secret' to control the privacy of the cha
sharing keyword argument for plotly.plotly.plot and plotly.plotly.iplot with options 'public' | 'private' | 'secret' to control the privacy of the charts. Depreciates world_readableplot or iplot contains an error message, raise an exceptionheight and width are no longer accepted in iplot. Just stick them into your figure's layout instead, it'll be more consistent when you view it outside of the IPython notebook environment. So, instead of this:
py.iplot([{'x': [1, 2, 3], 'y': [3, 1, 5]}], height=800)
do this:
py.iplot({
'data': [{'x': [1, 2, 3], 'y': [3, 1, 5]}],
'layout': {'height': 800}
})
iplot respects the figure's height in layoutNothing published for this version
Range slider functionality for scatter traces [#336, #368, #377]
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Legend dimensions are correctly updated (bug introduced in 1.7.0) [#365]
Custom surface color functionality (for 4D plotting) is added to surface traces [#347]
Plotly.purge method (which returns the graph div in its
pre-Plotly.plot state) is added [#300]Plotly.Fx.hover is
added [#301]Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Previous version (1.6.11) of custom json encoder only supported python 2.7.
Nothing published for this version
Nothing published for this version
Nothing published for this version
https://github.com/plotly/python-api/pull/196
https://github.com/plotly/python-api/pull/196
Adding plotly.widget.GraphWidget.plot method for folks to use their existing graph objects with the graph widget.
Adding plotly.widget.GraphWidget.plot method for folks to use their existing graph objects with the graph widget.
Nothing published for this version
Nothing published for this version
Modularize the library (first iteration). Trace types can be required in one-by-one to make custom plotly.js bundles of lesser size. [#180, #187, #193
'colorscale' attribute description [#186]Plotly.deleteTrace handle big-indices-array properly [#203]Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →