All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- error message for
plotly.figure_factory.create_choropleth
is more helpful for Windows users on installinggeopandas
and dependencies includingshapely
.
plotly.figure_factory.create_choropleth
now works in Windows without raising an OSError. The module now uses cross-platform path tools fromos
to manipulate and manage the shapefiles contained in this package.
import plotly.figure_factory
does not fail ifpandas
is not installed. See plotly#958
- New parameter
fill_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. Runhelp(plotly.dashboard_objs.Dashboard.insert)
for more information onfill_percent
.
- Updated
plotly.min.js
to version 1.35.2.- New features include adding an
automargin
attribute to cartesian axes and a layoutgrids
attribute for easy subplot generation. - See the plotly.js CHANGELOG for additional information regarding the updates.
- New features include adding an
plotly.figure_factory.create_choropleth
has changed some of the default plotting options:- 'offline_mode' param has been removed from call signature.
- Persistent selection api for the centroid points is automatically enabled. See https://plot.ly/python/reference/#scatter-selected and https://plot.ly/python/reference/#scatter-unselected for details
- FIPS values that appear on hover are 0-padded to ensure they are 5 digits.
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.
- County Choropleth figure factory. Call
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
- Updated
plotly.min.js
to version 1.33.1.- New plot types include a
violin
trace type. - New features include completely rewritten
scattergl
usingregl
and a completely rewritten polar chart renderer. - See the plotly.js CHANGELOG for additional information regarding the updates.
- New plot types include a
-column_width
and row_width
parameters for plotly.tools.make_subplots
. Call help(plotly.tools.make_subplots)
for documentation.
- Updated
plotly.min.js
to version 1.31.2.- Fixes include adjustments to
table
trace for offline plotting. - See the plotly.js CHANGELOG for additional information regarding the updates.
- Fixes include adjustments to
- Bullet chart figure factory. Call
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
- Updated
plotly.min.js
to version 1.31.0.- New features include a
table
trace type. - See the plotly.js CHANGELOG for additional information regarding the updates.
- New features include a
- Updated
plotly.min.js
to version 1.31.0 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
- Updated
plotly.min.js
to version 1.30.0 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
- Sharekey enabling issue where plots were made private instead of secret.
- Issue removing rug plots from violin plots with multiple traces.
- Updated
plotly.min.js
to version 1.29.1 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
figure_factory.create_gantt
andfigure_factory.create_dendrogram
now return a Plotly figure (consistent with other figure factory chart types).offline.init_notebook_mode()
is now optional when usingoffline.iplot()
.
- Updated
plotly.min.js
to version 1.28.3 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
figure_factory.create_facet_grid
now supports histogram, bar, and box traces.
- Updated
plotly.min.js
to version 1.28.1 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
- 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_grid)
- Fixes issue plotly#721. There was an issue when running
import plotly
with old versions of thedecorator
package. We now require installations to use at least version4.0.6
of thedecorator
package. See https://github.com/micheles/decorator/blob/master/CHANGES.md for thedecorator
package changelog.
- 'sort' parameter to
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
- offline embedded plots are now responsive to window resizing when
output_type == "div"
is set inplotly.offline.iplot()
. - Offline embedded plots are now responsive to window resizing when
output_type == "div"
is set inplotly.offline.iplot()
. - Offline animations are now supported on Plotly Cloud.
- Updated
plotly.min.js
to version 1.26.0 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
plotly.offline.plot
andplotly.offline.iplot
now accept various configuration options for their arguments.
- Updated
plotly.min.js
to version 1.25.0 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
- Added check to verify the share key is enabled when secret charts are created.
- Added a new mimetype 'text/vnd.plotly.v1+html' for
iplot
outputs.
import plotly
was broken in2.0.3
and2.0.2
because the newdashboard_objs
wasn't included in oursetup.py
's "packages
". Now it is andimport plotly
and the other features introduced in2.0.3
and2.0.2
should work.
Note: This release's installation was broken. It has been removed from PyPI
- Added
dashboard_objs
to top level import.
Note: This release's installation was broken. It has been removed from PyPI
- Dashboards can now be created using the API and uploaded to Plotly. Use
import plotly.dashboard_objs
to create aDashboard
object. You can learn more aboutDashboard
objects by runninghelp(plotly.dashboard_objs)
andhelp(plotly.plotly.plotly.dashboard_ops)
for uploading and retrieving dashboards from the cloud.
- Offline plots created with
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 ofcolors
(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 nteract/nteract#662 for the associated PR in nteract.
- As part of the above, plotly output now prints with a custom mimetype -
application/vnd.plotly.v1+json
memoize
decorator added toplotly.utils
- a
Grid
fromplotly.grid_objs
now accepts apandas.Dataframe
as its argument. - computationally-intensive
graph_reference
functions are memoized.
plotly.exceptions.PlotlyRequestException
is always raised for network failures. Previously either aPlotlyError
,PlotlyRequestException
, or arequests.exceptions.ReqestException
could be raised. In particular, scripts which depend ontry-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 aPlotlyError
.plotly.figure_factory
will raise anImportError
ifnumpy
is not installed.plotly.figure_factory.create_violin()
now has arugplot
parameter which determines whether or not a rugplot is draw beside each violin plot.
plotly.tools.FigureFactory
. Useplotly.figure_factory.*
.- (optional imports)
plotly.tools._*_imported
It was private anyhow, but now it's gone. (e.g.,_numpy_imported
) - (plotly v2 helper)
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
andplotly.plotly.icreate_animations
now return appropriate error messages if the response is not successful.frames
are now integrated into GRAPH_REFERENCE and figure validation.
- The plot-schema from
https://api.plot.ly/plot-schema
is no longer updated on import.
- Updated
plotly.min.js
to version 1.20.5 forplotly.offline
.- See the plotly.js CHANGELOG for additional information regarding the updates.
FF.create_scatterplotmatrix
now by default does not show the trace labels for the box plots, only ifdiag=box
is selected for the diagonal subplot type.
- The
link text
in the bottom right corner of the offline plots now properly displaysExport to [Domain Name]
for the given domain name set in the users'.config
file.
FF.create_violin
andFF.create_scatterplotmatrix
now by default do not print subplot grid information in output- Removed alert that occured when downloading plot images offline. Please note: for higher resolution images and more export options, consider making requests to our image servers. See:
help(py.image)
for more details.
- Plot configuration options for offline plots. See the list of configuration options and examples for more information.
- Please note that these configuration options are for offline plots ONLY. For configuration options when embedding online plots please see our embed tutorial.
colors.py
file which contains functions for manipulating and validating colors and arrays of colors- 'scale' param in
FF.create_trisurf
which now can set the interpolation on the colorscales - animations now work in offline mode. By running
plotly.offline.plot()
andplotly.offline.iplot()
with afig
withframes
, the resulting plot will cycle through the figures defined inframes
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/.
- animations now work in online mode: use
plotly.plotly.create_animations
andplotly.plotly.icreate_animations
which animate a figure with theframes
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')
- Trisurf now uses correct
Plotly Colorscales
when called - Fixed a bug in the format of unique-identifiers in columns of grids that are uploaded to plotly via
plotly.plotly.upload
. See plotly#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 inoffline mode
.
- the colorbar in
.create_trisurf
now displays the appropriate max and min values on the ends of the bar which corresponding to the coloring metric of the figure edges_color
is now a param in.create_trisurf
which only takesrgb
values at the moment
- Fixed color bug with trisurf plots where certain triangles were colored strangely. The coordinates of
rgb(...)
are now rounded to their nearest integer (using Python3 method of rounding), then placed in the color string to fix the issue.
- Edited
plotly.min.js
due to issue usingiplot
to plot offline in Jupyter Notebooks- Please note that
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 correctplotly.min.js
is referenced.
- Please note that
- Updated
plotly.min.js
from 1.14.1 to 1.16.2- Trace type scattermapbox is now part of the main bundle
- Add updatemenus (aka dropdowns) layout components
- See the plotly.js CHANGELOG for additional information regarding the updates
.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.create_2D_density)
- Updated
plotly.min.js
from 1.13.0 to 1.14.1- Numerous additions and changes where made to the mapbox layout layers attributes
- Attribute line.color in scatter3d traces now support color scales
- Layout shapes can now be moved and resized (except for 'path' shapes) in editable contexts
- See the plotly.js CHANGELOG for additional information regarding the updates
- Updated
default-schema
- Added
update_plotlyjs_for_offline
in makefile in order to automate updatingplotly.min.js
for offline mode
- Updated plotly.min.js so the offline mode is using plotly.js v1.13.0
- Fix
Plotly.toImage
andPlotly.downloadImage
bug specific to Chrome 51 on OSX - Beta version of the scattermapbox trace type - which allows users to create mapbox-gl maps using the plotly.js API. Note that scattermapbox is only available through custom bundling in this release.
- See the plotly.js CHANGELOG for additional additions and updates.
- Fix
- The FigureFactory can now create gantt charts with
.create_gantt
. Check it out with:
import plotly.tools as tls
help(tls.FigureFactory.create_gantt)
- Ability to download images in offline mode. By providing an extra keyword
image
to the existing plot calls, you can now download the images of the plots you make in offline mode.
- Fixed check for the height parameter passed to
_plot_html
, and now sets the correctlink 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_violin)
- Added ability to enable/disable SSL certificate verification for streaming. Disabling SSL certification verification requires Python v2.7.9 / v3.4.3 (or above). This feature can be toggled via the
plotly_ssl_verification
configuration setting.
-
Changed the default option for
create_distplot
in the figure factory fromprobability
toprobability density
and also added thehistnorm
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
- Light position is now configurable in surface traces
- surface and mesh3d lighting attributes are now accompanied with comprehensive descriptions
-
Allowed
create_scatterplotmatrix
andcreate_trisurf
to use divergent and categorical colormaps. The parameterpalette
has been replaced bycolormap
anduse_palette
has been removed. Increate_scatterplotmatrix
, users can now:- Input a list of different color types (hex, tuple, rgb) to
colormap
to map colors divergently - Use the same list to categorically group the items in the index column
- Pass a singlton color type to
colormap
to color all the data with one color - Input a dictionary to
colormap
to map index values to a specific color - 'cat' and 'seq' are valid options for
colormap_type
, which specify the type of colormap being used
- Input a list of different color types (hex, tuple, rgb) to
-
In
create_trisurf
, the parameterdist_func
has been replaced bycolor_func
. Users can now:- Input a list of different color types (hex, tuple, rgb) to
colormap
to map colors divergently - Input a list|array of hex and rgb colors to
color_func
to assign each simplex to a color
- Input a list of different color types (hex, tuple, rgb) to
- Added the option to load plotly.js from a CDN by setting the parameter
connected=True
in theinit_notebook_mode()
function call - The FigureFactory can now create trisurf plots with
.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 that it had already imported the library) but then accidentally clear plotly.js from the DOM. This meant that if you raninit_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 manyiplot
calls very large. Version 1.10.0 brings back the requirement to callinit_notebook_mode
before making aniplot
call. It makesinit_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.
- 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.FigureFactory.create_scatterplotmatrix)
- Updated plotly.min.js so the offline mode is using plotly.js v1.10.0
- Added beta versions of two new 2D WebGL trace types: heatmapgl, contourgl
- Added fills for scatterternary traces
- Added configurable shapes layer positioning with the shape attribute:
layer
- Fixed
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.
- Updated plotly.min.js so offline is using plotly.js v1.9.0
- Added Ternary plots with support for scatter traces (trace type
scatterternary
, currently only available in offline mode) - For comprehensive update list see the plotly.js CHANGELOG
- Added Ternary plots with support for scatter traces (trace type
- 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.8.0
- Added range selector functionality for cartesian plots
- Added range slider functionality for scatter traces
- Added custom surface color functionality
- Added ability to subplot multiple graph types (SVG cartesian, 3D, maps, pie charts)
- For comprehensive update list see the plotly.js CHANGELOG
- 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 IPython/Jupyter notebooks or useoffline.iplot_mpl
to convert and plot inside of IPython/Jupyter notebooks. Additionally, useoffline.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 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_stream_url'
andhttp_proxy=my.proxy.ip:1234
, thenmy_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
(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.FigureFactory.create_annotated_heatmap)
- The FigureFactory can now create tables with
.create_table
.
import plotly.tools as tls
help(tls.FigureFactory.create_table)
- Previously, using plotly offline required a paid license.
No more:
plotly.js
is now shipped inside this package to allow unlimited free use of plotly inside the ipython notebook environment. Theplotly.js
library that is included in this package is free, open source, and maintained independently on GitHub at https://github.com/plotly/plotly.js. - The
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. - New versions of
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.
- If you're behind a proxy, you can make requests by setting the environmental variable HTTP_PROXY and HTTPS_PROXY (http://docs.python-requests.org/en/v1.0.4/user/advanced/#proxies). This didn't work for streaming, but now it does.
- 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 it didn't work, and re-try a few times until it does.
- The FigureFactory can now create dendrogram plots with
.create_dendrogram
.
- Saving "world_readable" to your config file via
plotly.tools.set_config
actually works.
- You can also save
auto_open
andsharing
to the config file so that you can forget these keyword argument inpy.iplot
andpy.plot
.
- Fixed validation errors (validate=False workaround no longer required)
- Auto-sync API request on import to get the latest schema from Plotly
.
-access for nested attributes in plotly graph objects- General
.help()
method for plotly graph objects - Specific attribute
.help(<attribute>)
also included
- No more is streamable, streaming validation.
- Fixed typos in
plot
andiplot
documentations
- CHANGELOG
sharing
keyword argument forplotly.plotly.plot
andplotly.plotly.iplot
with options'public' | 'private' | 'secret'
to control the privacy of the charts. Depreciatesworld_readable
- If the response from
plot
oriplot
contains an error message, raise an exception
-
height
andwidth
are no longer accepted iniplot
. 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} })
- The height of the graph in
iplot
respects the figure's height in layout