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 8 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
Updated Plotly.js to version 1.42.2. Select highlights included below, see the plotly.js CHANGELOG for more information.
parcats) trace type for the visualization
of multi-dimensional categorical datasets
(plotly/plotly.js#2963)plotly.offline.iplot and plotly.graph_objs.FigureWidget.
Note: There are still outstanding issues with MathJax rendering in FireFox,
but it is now working well in Chrome.
(#1243)include_mathjax argument to plotly.offline.plot to support
the creation of HTML files with LaTeX typesetting
(#1243)plotly.offline.get_plotlyjs function that returns the
contents of the bundled plotly.js library as a string
(#637,
#1246)plotly.offline.get_plotlyjs_version function that returns
the version of the bundled plotly.js library
(#1246)plotly.offline.plot now contain logic
to automatically resize the figure responsively. This logic was previously
only added for html files.
(#1043,
#1234)plotly.offline.iplot in the classic Jupyter
Notebook will now resize responsively
(#1234)'cdn', 'directory', and path string include_plotlyjs options
in plotly.offline.plot
(#1234)
'cdn', the resulting html file/div includes a script tag reference
to the plotlyjs cdn.'directory', the resulting html file/div includes a script tag
reference to a plotly.min.js bundle in the same directory as the html file.
If output_type is 'file' then this plotly.min.js bundle is created in
the output directory if it doesn't already exist.'.js', the resulting html file/div includes
a script tag that references this exact path. This can be used to point
to a plotly.js bundle from an alternative CDN.color_threshold argument to the create_dendrogram figure
factory to control the dendrogram clustering cutoff
(#995,
#1075,
#1214)autorange='reversed' in 3D axes
(#803,
plotly/plotly.js#3141)modebar layout style attributes:
orientation, bgcolor, color and activecolor
(plotly/plotly.js#3068,
plotly/plotly.js#3091)title, titleposition and titlefont attributes to pie traces
(plotly/plotly.js#2987)hoverlabel.split attribute to ohlc and candlestick traces to
split hover labels into multiple pieces
(plotly/plotly.js#2959)line.shape values 'hv', 'vh', 'hvh'
and 'vhv' in scattergl traces
(plotly/plotly.js#3087)hoverinfo for sankey traces
(#3096,
#3150)textfont settings in pie traces
(#3130)reversescale=True in the
create_annotated_heatmap figure factory
(#1251)plotly.offline.iplot would fail to render in the classic
Jupyter Notebook if the notebook contained a Markdown headline with the text
"Plotly"
(#816)None values in a scatter.hovertext list are now omitted from the
hover label rather than being displayed as the string "None"
(#1244)plotly.tools.make_subplots are now positioned
properly when custom row_width/column_width arguments are specified
(#1229)bar.width property may now be specified as a numpy array or a pandas
series
(#1231,
plotly/plotly.js#3169)scatter3d traces
(#1139)uuid.uuid4 rather than uuid.uuid1 to work around an upstream
Python bug
(#1235,
#1236)layout.grid.subplots property may now be specified as a 2D list of
subplot identifiers
(#1220,
#1240)scatter3d text alignment
(#1055,
plotly/plotly.js#3180)For use with JupyterLab, the following versions of the following packages must be installed:
Python Packages
JupyterLab Extensions
One column per quarter.
Nothing published for this version
Updated Plotly.js to version 1.41.3. Select highlights included below, see the plotly.js CHANGELOG for more information.
~/.plotly configuration directory until a configuration write operation is performed (#1195). This change avoids some concurrency problems associated with running many instances of
plotly.py simultaneously (#1068).clickmode and flag 'select'
(#2944)stackgroup and stackgaps in scatter traces
(#2960)barpolar trace type - which replace and augment area traces
(#2954)polar.hole layout parameter to punch hole at the middle of polar
subplot offsetting the start of the radial range
(#2977, #2996)to_json, from_json, read_json, and write_json functions in the
plotly.io package
(#1188)deepcopy and pickle operations
(#1191)"~/.plotly" settings directory may now be customized
using the PLOTLY_DIR environment variable
(#1195)scaleratio argument to the create_quiver figure factory.
When specified, the axes are restricted to this ratio and the quiver arrows
are computed to have consistent lengths across angles.
(#1197)pkg_resources.resource_string with pkgutil.get_data to
improve compatibility with cx_Freeze
(#1201)For use with JupyterLab, the following versions of the following packages must be installed:
Python Packages
JupyterLab Extensions
Nothing published for this version
This is a patch release that fixes a few bugs and reintroduces a few version 2 features that were not supported in version 3.
This is a patch release that fixes a few bugs and reintroduces a few version 2 features that were not supported in version 3.
The bundled version of plotly.js remains at 1.40.1
For use with JupyterLab, the following versions of the following packages must be installed:
Python Packages
JupyterLab Extensions
skip_invalid argument has been added to the Figure and
FigureWidget constructors. By default, skip_invalid is False and invalid
figure properties will result in an exception (this is identical to the
previous behavior). When skip_invalid is set to True, invalid properties
will instead be silently ignored. This argument replaces the _raise
argument that was available in version 2, and makes it possible to import
figure definitions from different plotly versions, where incompatible
properties are ignored rather than causing an exception.to_ordered_dict method has been added to the Figure and FigureWidget
classes. This method returns a representation of the figure as a nested
structure of OrdererdDict and list instances where the keys in each
OrderedDict are sorted alphabetically. This method replaces the
get_ordered method that was available in version 2, and makes it possible
to traverse the nested structure of a figure in a deterministic order.Series and Index objects storing datetime values were
incorrectly cast to numeric arrays
(plotly/plotly.py#1160,
plotly/plotly.py#1163)uint64 datatype caused a FigureWidget error,
and no figure was displayed
(plotly/plotly.py#1155,
plotly/plotly.py#1163)Nothing published for this version
Incorrect deprecation warning for deprecated plotly.graph_objs.Annotations class
This release introduces the long-anticipated ability to programmatically export figures as high quality static images in both raster and vector formats.
For use with JupyterLab, the following versions of the following packages must be installed:
Python Packages
JupyterLab Extensions
contour, contourcarpet and histogram2dcontour to have corresponding legend items using showlegend
(plotly/plotly.js#2891,
plotly/plotly.js#2914)r0, dr, theta0 and dtheta
(plotly/plotly.js#2895)piecolorway and extendpiecolors for more control over pie colors
(plotly/plotly.js#2870)splom attribute dimensions[i].axis.type to easily override axis type in splom-generated axes
(plotly/plotly.js#2899)scatterpolargl traces
(plotly/plotly.js#2895)to_image and write_image
functions in the new plotly.io package (#1120).
FigureWidget instances in static contexts
(e.g. nbviewer) just like the built-in ipywidgets
(#1117)README now includes conda installation instructions alongside the pip instructions.Series objects (#1149)dash properties (e.g. scatter.line.dash) incorrectly rejected dash length lists (#1136)plotly.graph_objs.Annotations class (#1138)plotly.offline.plot (#1152)Nothing published for this version
Nothing published for this version
Nothing published for this version
This release is a minor bug-fix update to version 3.1.0
This release is a minor bug-fix update to version 3.1.0
For use with JupyterLab, the following versions of the following packages must be installed:
Python Packages
JupyterLab Extensions
plotly.tools.make_subplots
to create figures with a large number of subplots
plotly/plotly.js#1091.update method to initialize
an array property (e.g. layout.shapes)
plotly/plotly.js#1091FigureWidget problem causing scroll zoom on 3D plots to stutter
plotly/plotly.js#1094tickmode property in matplotlylib
plotly/plotly.js#1101Nothing published for this version
For use with JupyterLab, the following versions of the following packages must be installed. See README.md for instructions.
For use with JupyterLab, the following versions of the following packages must be installed. See README.md for instructions.
Python Packages
JupyterLab Extensions
Add modebardisable attribute to cartesian axes, to allow fine control over which buttons affect which axes [#7358]
unifiedhovertitle.text to format unified hover titles [#7439]layout.hoverlabel.showarrow (and trace.hoverlabel.showarrow) attribute to allow hiding the triangular caret that appears on the hover label box [#7451]minorloglabels to cartesian axes [#7468]This is a minor bug-fix release to 3.0.0
This is a minor bug-fix release to 3.0.0
Please see the migration guid for a full list of the changes and deprecations in version 3.0.0
This is a major version with many exciting updates. See the Introducing plotly.py 3.0.0 post for more information.
graph_objs.FigureWidget classFigureWidget figures can be updated interactively using property assignment syntaxhelp(go.Figure().batch_animate) for the full doc string.ValueError with a description of the error, the invalid property, and the available properties on the level that it was placed in the graph object. Eg. go.Scatter(foo=123) raises a validation error. See https://plot.ly/python/reference/ for a reference to all valid properties and values in the Python API.plotly.figure_factory.create_choropleth is now helpful to Anaconda users who do not have the correct modules installed for the County Choropleth figure factory.Please see the migration guid for a full list of the changes and deprecations in version 3.0.0
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
Nothing published for this version
Nothing published for this version
Nothing published for this version
Drop support for passing a string to the title attribute, and drop support for deprecated attributes titlefont, titleposition, titleside, and titleoff…
title attribute, and drop support for deprecated attributes titlefont, titleposition, titleside, and titleoffset (use title.text, title.font, title.side, title.offset instead)[#7212]bardir attribute (use orientation instead) [#7214]annotation.ref attribute (use annotation.xref and annotation.yref instead) [#7215]opacity attribute (use alpha channel of error bar color attribute instead) [#7214]gl3d.cameraposition (use gl3d.camera instead) [#7217]plot3dPixelRatio from config [#7231]zauto, zmin and zmax from the surface trace [#7234]autotick attributes from cartesian axes [#7236]transforms from the API [#7240, #7254]ids attribute [#7164]Updated plotly.min.js to version 1.38.0.
plotly.min.js to version 1.38.0.
3D cone trace to visualize vector fields.Updated plotly.min.js to version 1.37.1.
plotly.min.js to version 1.37.1.
splom (scatter plot matrix) trace type.plotly.figure_factory.create_choropleth is more helpful for Windows users on installing geopandas and dependencies including shapely.plotly.figure_factory.create_choropleth now works in Windows without raising an OSError. The module now uses cross-platform path tools from os to mani
plotly.figure_factory.create_choropleth now works in Windows without raising an OSError. The module now uses cross-platform path tools from os to manipulate and manage the shapefiles contained in this package.import plotly.figure_factory does not fail if pandas is not installed. See https://github.com/plotly/plotly.py/pull/958
import plotly.figure_factory does not fail if pandas is not installed. See https://github.com/plotly/plotly.py/pull/958fill_percent to the .insert method for the dashboards API. You can now insert a box into the dashboard layout and specify what proportion of the original container box it will occupy. Run help(plotly.dashboard_objs.Dashboard.insert) for more information on fill_percent.plotly.min.js to version 1.35.2.
automargin attribute to cartesian axes and a layout grids attribute for easy subplot generation.plotly.figure_factory.create_choropleth has changed some of the default plotting options:
hover_info='none' is now default for the county lines data.The required shapefiles to generate the choropleths via plotly.figure_factory.create_choropleth are now shipped in the package data.
plotly.figure_factory.create_choropleth are now shipped in the package data.County Choropleth figure factory. Call help(plotly.figure_factory.create_choropleth) for examples and how to get started making choropleths of US coun
help(plotly.figure_factory.create_choropleth) for examples and how to get started making choropleths of US counties with the Python API.Note: Calling plotly.figure_factory.create_choropleth will fail with an IOError due to missing shapefiles see: https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md#241---2018-02-21
Merged pull request that fixes GraphWidget for IPython > v6
GraphWidget for IPython > v6plotly.min.js to version 1.33.1.
violin trace type.scattergl using regl and a completely rewritten polar chart renderer.-column_width and row_width parameters for plotly.tools.make_subplots. Call help(plotly.tools.make_subplots) for documentation.
-column_width and row_width parameters for plotly.tools.make_subplots. Call help(plotly.tools.make_subplots) for documentation.
plotly.min.js to version 1.31.2.
table trace for offline plotting.Bullet chart figure factory. Call help(plotly.figure_factory.create_bullet) for examples and how to get started making bullet charts with the API.
help(plotly.figure_factory.create_bullet) for examples and how to get started making bullet charts with the API.Presentation objects now added to setup.py
NEW Presentations API for Python! Run help(plotly.presentation_objs.Presentations) for help or check out the new documentation
help(plotly.presentation_objs.Presentations) for help or check out the new documentationUpdated plotly.min.js to version 1.31.0.
plotly.min.js to version 1.31.0.
table trace type.Updated plotly.min.js to version 1.31.0 for plotly.offline.
plotly.min.js to version 1.31.0 for plotly.offline.
Updated plotly.min.js to version 1.30.0 for plotly.offline.
plotly.min.js to version 1.30.0 for plotly.offline.
Sharekey enabling issue where plots were made private instead of secret.
Updated plotly.min.js to version 1.29.1 for plotly.offline.
plotly.min.js to version 1.29.1 for plotly.offline.
figure_factory.create_gantt and figure_factory.create_dendrogram now return a Plotly figure (consistent with other figure factory chart types).offline.init_notebook_mode() is now optional when using offline.iplot().Updated plotly.min.js to version 1.28.3 for plotly.offline.
plotly.min.js to version 1.28.3 for plotly.offline.
figure_factory.create_facet_grid now supports histogram, bar, and box traces.Updated plotly.min.js to version 1.28.1 for plotly.offline.
plotly.min.js to version 1.28.1 for plotly.offline.
The figure_factory can now create facet grids with .create_facet_grid. Check it out with: ` import plotly.figure_factory as ff help(ff.create_facet_gr
.create_facet_grid. Check it out with:import plotly.figure_factory as ff
help(ff.create_facet_grid)
Fixes issue https://github.com/plotly/plotly.py/issues/721. There was an issue when running import plotly with old versions of the decorator package.
import plotly with old versions of the decorator package. We now require installations to use at least version 4.0.6 of the decorator package. See https://github.com/micheles/decorator/blob/master/CHANGES.md for the decorator package changelog.FF.create_violin to control whether violin plots are sorted alphabetically.Beta: Added API methods that wrap the API endpoint for managing Dash objects on plot.ly. The API interface is under plotly.api.v2.dash_apps
plotly.api.v2.dash_appsoutput_type == "div" is set in plotly.offline.iplot().output_type == "div" is set in plotly.offline.iplot().plotly.min.js to version 1.26.0 for plotly.offline.
plotly.offline.plot and plotly.offline.iplot now accept various configuration options for their arguments.Updated plotly.min.js to version 1.25.0 for plotly.offline.
plotly.min.js to version 1.25.0 for plotly.offline.
Added a new mimetype 'text/vnd.plotly.v1+html' for iplot outputs.
iplot outputs.import plotly was broken in 2.0.3 and 2.0.2 because the new dashboard_objs wasn't included in our setup.py's "packages". Now it is and import plotly a
import plotly was broken in 2.0.3 and 2.0.2 because the new dashboard_objs wasn't included in our setup.py's "packages". Now it is and import plotly and the other features introduced in 2.0.3 and 2.0.2 should work.Offline plots created with plotly.offline.plot now resize as expected when the window is resized.
plotly.offline.plot now resize as expected when the window is resized.plotly.figure_factory.create_distplot now can support more than 10 traces without raising an error. Updated so that if the list of colors (default colors too) is less than your number of traces, the color for your traces will loop around to start when it hits the end.Support for rendering plots in nteract! See https://github.com/nteract/nteract/pull/662 for the associated PR in nteract.
application/vnd.plotly.v1+jsonmemoize decorator added to plotly.utilsGrid from plotly.grid_objs now accepts a pandas.Dataframe as its argument.graph_reference functions are memoized.Same as the pre-release, but this one corresponds to the 2.0.0 on PyPI and is the first official 2.x release. Please note the deprecation section from…
Same as the pre-release, but this one corresponds to the 2.0.0 on PyPI and is the first official 2.x release. Please note the deprecation section from the changelog (copied below for convenience).
plotly.exceptions.PlotlyRequestException is always raised for network
failures. Previously either a PlotlyError, PlotlyRequestException, or a
requests.exceptions.ReqestException could be raised. In particular, scripts
which depend on try-except blocks containing network requests should be
revisited.plotly.py:sign_in now validates to the plotly server specified in your
config. If it cannot make a successful request, it raises a PlotlyError.plotly.figure_factory will raise an ImportError if numpy is not
installed.plotly.figure_factory.create_violin() now has a rugplot parameter which
determines whether or not a rugplot is draw beside each violin plot.plotly.tools.FigureFactory. Use plotly.figure_factory.*.plotly.tools._*_imported It was private anyhow, but now
it's gone. (e.g., _numpy_imported)plotly.py._api_v2 It was private anyhow, but now it's
gone.Python 3.5 has been added as a tested environment for this package.
plotly.plotly.create_animations and plotly.plotly.icreate_animations now return appropriate error messages if the response is not successful.frames are now integrated into GRAPH_REFERENCE and figure validation.https://api.plot.ly/plot-schema is no longer updated on import.Updated plotly.min.js to version 1.20.5 for plotly.offline.
plotly.min.js to version 1.20.5 for plotly.offline.
FF.create_scatterplotmatrix now by default does not show the trace labels for the box plots, only if diag=box is selected for the diagonal subplot type.The link text in the bottom right corner of the offline plots now properly displays Export to [Domain Name] for the given domain name set in the users
link text in the bottom right corner of the offline plots now properly displays Export to [Domain Name] for the given domain name set in the users' .config file.FF.create_violin and FF.create_scatterplotmatrix now by default do not print subplot grid information in output
FF.create_violin and FF.create_scatterplotmatrix now by default do not print subplot grid information in outputhelp(py.image) for more details.colors.py file which contains functions for manipulating and validating colors and arrays of colorsFF.create_trisurf which now can set the interpolation on the colorscalesplotly.offline.plot() and plotly.offline.iplot() with a fig with frames, the resulting plot will cycle through the figures defined in frames either in the browser or in an ipython notebook respectively. Here's an example:import IPython.display
from IPython.display import display, HTML
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
figure_or_data = {'data': [{'x': [1, 2], 'y': [0, 1]}],
'layout': {'xaxis': {'range': [0, 3], 'autorange': False},
'yaxis': {'range': [0, 20], 'autorange': False},
'title': 'First Title'},
'frames': [{'data': [{'x': [1, 2], 'y': [5, 7]}]},
{'data': [{'x': [-1, 3], 'y': [3, 9]}]},
{'data': [{'x': [2, 2.6], 'y': [7, 5]}]},
{'data': [{'x': [1.5, 3], 'y': [7.5, 4]}]},
{'data': [{'x': [1, 2], 'y': [0, 1]}],
'layout': {'title': 'End Title'}}]}
iplot(figure_or_data)
More examples can be found at https://plot.ly/python/animations/.
plotly.plotly.create_animations and plotly.plotly.icreate_animations which animate a figure with the frames argument. Here is a simple example:import plotly.plotly as py
from plotly.grid_objs import Grid, Column
column_1 = Column([0.5], 'x')
column_2 = Column([0.5], 'y')
column_3 = Column([1.5], 'x2')
column_4 = Column([1.5], 'y2')
grid = Grid([column_1, column_2, column_3, column_4])
py.grid_ops.upload(grid, 'ping_pong_grid', auto_open=False)
# create figure
figure = {
'data': [
{
'xsrc': grid.get_column_reference('x'),
'ysrc': grid.get_column_reference('y'),
'mode': 'markers',
}
],
'layout': {'title': 'Ping Pong Animation',
'xaxis': {'range': [0, 2], 'autorange': False},
'yaxis': {'range': [0, 2], 'autorange': False},
'updatemenus': [{
'buttons': [
{'args': [None],
'label': u'Play',
'method': u'animate'}
],
'pad': {'r': 10, 't': 87},
'showactive': False,
'type': 'buttons'
}]},
'frames': [
{
'data': [
{
'xsrc': grid.get_column_reference('x2'),
'ysrc': grid.get_column_reference('y2'),
'mode': 'markers',
}
]
},
{
'data': [
{
'xsrc': grid.get_column_reference('x'),
'ysrc': grid.get_column_reference('y'),
'mode': 'markers',
}
]
}
]
}
py.create_animations(figure, 'ping_pong')
Plotly Colorscales when calledplotly.plotly.upload. See https://github.com/plotly/plotly.py/pull/599 for details. In particular, creating plots that are based off of plotly grids is no longer broken. Here is an example:import plotly.plotly as py
from plotly.grid_objs import Grid, Column
c1 = Column([6, 6, 6, 5], 'column 1')
c2 = Column(['a', 'b', 'c', 'd'], 'column 2')
g = Grid([c1, c2])
# Upload the grid
py.grid_ops.upload(g, 'my-grid', auto_open=False)
# Make a graph that with data that is referenced from that grid
trace = Scatter(xsrc=g[0], ysrc=g[1])
url = py.plot([trace], filename='my-plot')
Then, whenever you update the data in 'my-grid', the associated plot will update too. See https://plot.ly/python/data-api for more details on usage and examples.
the colorbar in .create_trisurf now displays properly in offline mode.
.create_trisurf now displays properly in offline mode..create_trisurf now displays the appropriate max and min values on the ends of the bar which corresponding to the coloring metric of the figureedges_color is now a param in .create_trisurf which only takes rgb values at the momentFixed color bug with trisurf plots where certain triangles were colored strangely. The coordinates of rgb(...) are now rounded to their nearest intege
rgb(...) are now rounded to their nearest integer (using Python3 method of rounding), then placed in the color string to fix the issue.Your coding agent can read these notes before it upgrades. Set up the MCP server →