diff --git a/INSTALL.rst b/INSTALL.rst
index a66a425c0485..5e3d03a71509 100644
--- a/INSTALL.rst
+++ b/INSTALL.rst
@@ -181,7 +181,7 @@ Matplotlib requires a large number of dependencies:
(for Python 2.7 only)
* `subprocess32 `_ (for Python
2.7 only, on Linux and macOS only)
-
+ * `kiwisolver `__ (>= 1.0.0)
Optionally, you can also install a number of packages to enable better user
interface toolkits. See :ref:`what-is-a-backend` for more details on the
@@ -193,8 +193,10 @@ optional Matplotlib backends and the capabilities they provide.
* `PyQt5 `_: for the Qt5Agg backend;
* :term:`pygtk` (>= 2.4): for the GTK and the GTKAgg backend;
* :term:`wxpython` (>= 2.9 or later): for the WX or WXAgg backend;
+ * `cairocffi `__ (>=
+ v0.8): for cairo based backends;
* `pycairo `_: for GTK3Cairo;
- * `Tornado `_: for the WebAgg backend.
+ * `Tornado `_: for the WebAgg backend;
For better support of animation output format and image file formats, LaTeX,
etc., you can install the following:
diff --git a/doc/api/api_changes.rst b/doc/api/api_changes.rst
index 36f3d1a06770..c7be0a6c96ca 100644
--- a/doc/api/api_changes.rst
+++ b/doc/api/api_changes.rst
@@ -13,11 +13,281 @@ For new features that were added to Matplotlib, please see
API Changes in 2.2.0
====================
-.. toctree::
- :glob:
- :maxdepth: 1
+..
+
+ .. toctree::
+ :glob:
+ :maxdepth: 1
+
+ next_api_changes/*
+
+
+Deprecations
+------------
+
+Classes, functions, and methods
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The unused and untested ``Artist.onRemove`` and ``Artist.hitlist`` methods have
+been deprecated.
+
+The now unused ``mlab.less_simple_linear_interpolation`` function is
+deprecated.
+
+The unused ``ContourLabeler.get_real_label_width`` method is deprecated.
+
+The unused ``FigureManagerBase.show_popup`` method is deprecated. This
+introduced in e945059b327d42a99938b939a1be867fa023e7ba in 2005 but never built
+out into any of the backends.
+
+:class:`backend_tkagg.AxisMenu` is deprecated, as it has become
+unused since the removal of "classic" toolbars.
+
+
+Changed function signatures
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+kwarg ``fig`` to `.GridSpec.get_subplot_params` is
+deprecated, use ``figure`` instead.
+
+Using `.pyplot.axes` with an `.Axes` as argument is deprecated. This sets
+the current axes, i.e. it has the same effect as `.pyplot.sca`. For clarity
+``plt.sca(ax)`` should be preferred over ``plt.axes(ax)``.
+
+
+Using strings instead of booleans to control grid and tick visibility
+is deprecated. Using ``"on"``, ``"off"``, ``"true"``, or ``"false"``
+to control grid and tick visibility has been deprecated. Instead, use
+normal booleans (``True``/``False``) or boolean-likes. In the future,
+all non-empty strings may be interpreted as ``True``.
+
+When given 2D inputs with non-matching numbers of columns, `~.pyplot.plot`
+currently cycles through the columns of the narrower input, until all the
+columns of the wider input have been plotted. This behavior is deprecated; in
+the future, only broadcasting (1 column to *n* columns) will be performed.
+
+
+rcparams
+~~~~~~~~
+
+The :rc:`backend.qt4` and :rc:`backend.qt5` rcParams were deprecated
+in version 2.2. In order to force the use of a specific Qt binding,
+either import that binding first, or set the ``QT_API`` environment
+variable.
+
+Deprecation of the ``nbagg.transparent`` rcParam. To control
+transparency of figure patches in the nbagg (or any other) backend,
+directly set ``figure.patch.facecolor``, or the ``figure.facecolor``
+rcParam.
+
+
+
+Removals
+--------
+
+Function Signatures
+~~~~~~~~~~~~~~~~~~~
+
+Contouring no longer supports ``legacy`` corner masking. The
+deprecated ``ContourSet.vmin`` and ``ContourSet.vmax`` properties have
+been removed.
+
+Passing ``None`` instead of ``"none"`` as format to `~.Axes.errorbar` is no
+longer supported.
+
+The ``bgcolor`` keyword argument to ``Axes`` has been removed.
+
+Modules, methods, and functions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``matplotlib.finance``, ``mpl_toolkits.exceltools`` and
+``mpl_toolkits.gtktools`` modules have been removed. ``matplotlib.finance``
+remains available at https://github.com/matplotlib/mpl_finance.
+
+The ``mpl_toolkits.mplot3d.art3d.iscolor`` function has been removed.
+
+The ``Axes.get_axis_bgcolor``, ``Axes.set_axis_bgcolor``,
+``Bbox.update_from_data``, ``Bbox.update_datalim_numerix``,
+``MaxNLocator.bin_boundaries`` methods have been removed.
+
+``mencoder`` can no longer be used to encode animations.
+
+The unused `FONT_SCALE` and `fontd` attributes of the `RendererSVG`
+class have been removed.
+
+color maps
+~~~~~~~~~~
+
+The ``spectral`` colormap has been removed. The ``Vega*`` colormaps, which
+were aliases for the ``tab*`` colormaps, have been removed.
+
+
+rcparams
+~~~~~~~~
+
+The following deprecated rcParams have been removed:
+
+- ``axes.color_cycle`` (see ``axes.prop_cycle``),
+- ``legend.isaxes``,
+- ``svg.embed_char_paths`` (see ``svg.fonttype``),
+- ``text.fontstyle``, ``text.fontangle``, ``text.fontvariant``,
+ ``text.fontweight``, ``text.fontsize`` (renamed to ``text.style``, etc.),
+- ``tick.size`` (renamed to ``tick.major.size``).
+
+
+
+Removal of unused imports
+-------------------------
+Many unused imports were removed from the codebase. As a result,
+trying to import certain classes or functions from the "wrong" module
+(e.g. `~.Figure` from :mod:`matplotlib.backends.backend_agg` instead of
+:mod:`matplotlib.figure`) will now raise an `ImportError`.
+
+
+Exception type changes
+----------------------
+
+If `MovieWriterRegistry` can't find the requested `MovieWriter`, a
+more helpful `RuntimeError` message is now raised instead of the
+previously raised `KeyError`.
+
+`~.tight_layout.auto_adjust_subplotpars` now raises `ValueError`
+instead of `RuntimeError` when sizes of input lists don't match
+
+
+`Figure.set_figwidth` and `Figure.set_figheight` default forward to True
+------------------------------------------------------------------------
+
+`matplotlib.Figure.set_figwidth` and `matplotlib.Figure.set_figheight`
+had the kwarg `forward=False`
+by default, but `Figure.set_size_inches` now defaults to `forward=True`.
+This makes these functions conistent.
+
+
+Do not truncate svg sizes to nearest point
+------------------------------------------
+
+There is no reason to size the SVG out put in integer points, change
+to out putting floats for the *height*, *width*, and *viewBox* attributes
+of the *svg* element.
+
+
+Fontsizes less than 1 pt are clipped to be 1 pt.
+------------------------------------------------
+
+FreeType doesn't allow fonts to get smaller than 1 pt, so all Agg
+backends were silently rounding up to 1 pt. PDF (other vector
+backends?) were letting us write fonts that were less than 1 pt, but
+they could not be placed properly because position information comes from
+FreeType. This change makes it so no backends can use fonts smaller than
+1 pt, consistent with FreeType and ensuring more consistent results across
+backends.
+
+
+
+Changes to Qt backend class MRO
+-------------------------------
+
+To support both Agg and cairo rendering for Qt backends all of the
+non-Agg specific code previously in
+:class:`.backend_qt5agg.FigureCanvasQTAggBase` has been moved to
+:class:`.backend_qt5.FigureCanvasQT` so it can be shared with the cairo
+implementation. The :meth:`.FigureCanvasQTAggBase.paintEvent`,
+:meth:`.FigureCanvasQTAggBase.blit`, and
+:meth:`.FigureCanvasQTAggBase.print_figure` methods have moved to
+:meth:`.FigureCanvasQTAgg.paintEvent`, :meth:`.FigureCanvasQTAgg.blit`, and
+:meth:`.FigureCanvasQTAgg.print_figure`. The first two methods assume that
+the instance is also a :class:`QWidget` so to use
+:class:`FigureCanvasQTAggBase` it was required to multiple inherit
+from a :class:`QWidget` sub-class.
+
+Having moved all of its methods either up or down the class hierarchy
+:class:`FigureCanvasQTAggBase` has been deprecated. To do this with
+out warning and to preserve as much API as possible,
+:class:`.backend_qt5.FigureCanvasQTAggBase` now inherits from
+:class:`.backend_qt5.FigureCanvasQTAgg`.
+
+The MRO for :class:`FigureCanvasQTAgg` and
+:class:`FigureCanvasQTAggBase` used to be ::
+
+
+ [matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg,
+ matplotlib.backends.backend_qt5agg.FigureCanvasQTAggBase,
+ matplotlib.backends.backend_agg.FigureCanvasAgg,
+ matplotlib.backends.backend_qt5.FigureCanvasQT,
+ PyQt5.QtWidgets.QWidget,
+ PyQt5.QtCore.QObject,
+ sip.wrapper,
+ PyQt5.QtGui.QPaintDevice,
+ sip.simplewrapper,
+ matplotlib.backend_bases.FigureCanvasBase,
+ object]
+
+and ::
+
+
+ [matplotlib.backends.backend_qt5agg.FigureCanvasQTAggBase,
+ matplotlib.backends.backend_agg.FigureCanvasAgg,
+ matplotlib.backend_bases.FigureCanvasBase,
+ object]
+
+
+respectively. They are now ::
+
+ [matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg,
+ matplotlib.backends.backend_agg.FigureCanvasAgg,
+ matplotlib.backends.backend_qt5.FigureCanvasQT,
+ PyQt5.QtWidgets.QWidget,
+ PyQt5.QtCore.QObject,
+ sip.wrapper,
+ PyQt5.QtGui.QPaintDevice,
+ sip.simplewrapper,
+ matplotlib.backend_bases.FigureCanvasBase,
+ object]
+
+and ::
+
+ [matplotlib.backends.backend_qt5agg.FigureCanvasQTAggBase,
+ matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg,
+ matplotlib.backends.backend_agg.FigureCanvasAgg,
+ matplotlib.backends.backend_qt5.FigureCanvasQT,
+ PyQt5.QtWidgets.QWidget,
+ PyQt5.QtCore.QObject,
+ sip.wrapper,
+ PyQt5.QtGui.QPaintDevice,
+ sip.simplewrapper,
+ matplotlib.backend_bases.FigureCanvasBase,
+ object]
+
+
+
+New dependency
+--------------
+
+`kiwisolver `__ is now a required
+dependency to support the new constrained_layout, see
+:ref:`sphx_glr_tutorials_intermediate_constrainedlayout_guide.py` for
+more details.
+
+
+`Axes.imshow` clips RGB values to the valid range
+-------------------------------------------------
+
+When `Axes.imshow` is passed an RGB or RGBA value with out-of-range
+values, it now logs a warning and clips them to the valid range.
+The old behaviour, wrapping back in to the range, often hid outliers
+and made interpreting RGB images unreliable.
+
+
+GTKAgg and GTKCairo backends deprecated
+---------------------------------------
+
+The GTKAgg and GTKCairo backends have been deprecated. These obsolete backends
+allow figures to be rendered via the GTK+ 2 toolkit. They are untested, known
+to be broken, will not work with Python 3, and their use has been discouraged
+for some time. Instead, use the `GTK3Agg` and `GTK3Cairo` backends for
+rendering to GTK+ 3 windows.
- next_api_changes/*
API Changes in 2.1.2
diff --git a/doc/api/api_changes/2017-09-29_JMK_constrained_layout_api.rst b/doc/api/api_changes/2017-09-29_JMK_constrained_layout_api.rst
deleted file mode 100644
index 05e54d67f4c0..000000000000
--- a/doc/api/api_changes/2017-09-29_JMK_constrained_layout_api.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-API changes for ``constrained_layout``
-----------------------------------------
-
-The new constrained_layout functionality has some minor (largely backwards-
-compatible) API changes. See
-:ref:`sphx_glr_tutorials_intermediate_constrainedlayout_guide.py` for
-more details on this functionality.
-
-This requires a new dependency on kiwisolver_.
-
-_https://github.com/nucleic/kiwi
-
-kwarg ``fig`` deprectated in `.GridSpec.get_subplot_params`
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Use ``figure`` instead of ``fig``, which is now deprecated.
diff --git a/doc/api/api_changes/2018-01-26-ZHD.rst b/doc/api/api_changes/2018-01-26-ZHD.rst
deleted file mode 100644
index cf3ff080c87f..000000000000
--- a/doc/api/api_changes/2018-01-26-ZHD.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-`Axes.imshow` clips RGB values to the valid range
--------------------------------------------------
-
-When `Axes.imshow` is passed an RGB or RGBA value with out-of-range
-values, it now logs a warning and clips them to the valid range.
-The old behaviour, wrapping back in to the range, often hid outliers
-and made interpreting RGB images unreliable.
diff --git a/doc/api/api_changes/2018-02-04-AL.rst b/doc/api/api_changes/2018-02-04-AL.rst
deleted file mode 100644
index 827ef5c7a2e4..000000000000
--- a/doc/api/api_changes/2018-02-04-AL.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Deprecation of qt binding rcparams
-``````````````````````````````````
-
-The :rc:`backend.qt4` and :rc:`backend.qt5` rcParams were deprecated
-in version 2.2. In order to force the use of a specific Qt binding,
-either import that binding first, or set the ``QT_API`` environment
-variable.
diff --git a/doc/api/api_changes/2018-02-10-ES.rst b/doc/api/api_changes/2018-02-10-ES.rst
deleted file mode 100644
index 23133b0bdb18..000000000000
--- a/doc/api/api_changes/2018-02-10-ES.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-GTKAgg and GTKCairo backends deprecated
-```````````````````````````````````````
-The GTKAgg and GTKCairo backends have been deprecated. These obsolete backends
-allow figures to be rendered via the GTK+ 2 toolkit. They are untested, known
-to be broken, will not work with Python 3, and their use has been discouraged
-for some time. Instead, use the `GTK3Agg` and `GTK3Cairo` backends for
-rendering to GTK+ 3 windows.
diff --git a/doc/api/next_api_changes/01-11-2017-DS.rst b/doc/api/next_api_changes/01-11-2017-DS.rst
deleted file mode 100644
index e696a680218d..000000000000
--- a/doc/api/next_api_changes/01-11-2017-DS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-MovieWriterRegistry raises RuntimeError when writer not available
------------------------------------------------------------------
-
-If `MovieWriterRegistry` can't find the requested `MovieWriter`, a more helpful
-`RuntimeError` message is now raised instead of the previously raised
-`KeyError`.
diff --git a/doc/api/next_api_changes/171225-AL-tickbools.rst b/doc/api/next_api_changes/171225-AL-tickbools.rst
deleted file mode 100644
index 90c168da6af1..000000000000
--- a/doc/api/next_api_changes/171225-AL-tickbools.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Using strings instead of booleans to control grid and tick visibility is deprecated
-```````````````````````````````````````````````````````````````````````````````````
-
-Using ``"on"``, ``"off"``, ``"true"``, or ``"false"`` to control grid
-and tick visibility has been deprecated. Instead, use normal booleans
-(``True``/``False``) or boolean-likes. In the future, all non-empty strings
-may be interpreted as ``True``.
diff --git a/doc/api/next_api_changes/2017-09-22-AL-contour.rst b/doc/api/next_api_changes/2017-09-22-AL-contour.rst
deleted file mode 100644
index bb0be036e7db..000000000000
--- a/doc/api/next_api_changes/2017-09-22-AL-contour.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Removal of deprecated contouring code
-`````````````````````````````````````
-
-Contouring no longer supports ``legacy`` corner masking.
-
-The deprecated ``ContourSet.vmin`` and ``ContourSet.vmax`` properties have been
-removed.
diff --git a/doc/api/next_api_changes/2017-09-22-AL-removal-of-deprecated-features.rst b/doc/api/next_api_changes/2017-09-22-AL-removal-of-deprecated-features.rst
deleted file mode 100644
index e1e61f1b350c..000000000000
--- a/doc/api/next_api_changes/2017-09-22-AL-removal-of-deprecated-features.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-Removal of deprecated features
-``````````````````````````````
-
-The ``matplotlib.finance``, ``mpl_toolkits.exceltools`` and
-``mpl_toolkits.gtktools`` modules have been removed. ``matplotlib.finance``
-remains available at https://github.com/matplotlib/mpl_finance.
-
-The ``mpl_toolkits.mplot3d.art3d.iscolor`` function has been removed.
-
-The ``Axes.get_axis_bgcolor``, ``Axes.set_axis_bgcolor``,
-``Bbox.update_from_data``, ``Bbox.update_datalim_numerix``,
-``MaxNLocator.bin_boundaries`` methods have been removed.
-
-The ``bgcolor`` keyword argument to ``Axes`` has been removed.
-
-The ``spectral`` colormap has been removed. The ``Vega*`` colormaps, which
-were aliases for the ``tab*`` colormaps, have been removed.
-
-``mencoder`` can no longer be used to encode animations.
-
-Passing ``None`` instead of ``"none"`` as format to `~.Axes.errorbar` is no
-longer supported.
diff --git a/doc/api/next_api_changes/2017-11-07-JMK.rst b/doc/api/next_api_changes/2017-11-07-JMK.rst
deleted file mode 100644
index 917fc7a14fea..000000000000
--- a/doc/api/next_api_changes/2017-11-07-JMK.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-`Figure.set_figwidth` and `Figure.set_figheight` default forward to True
-------------------------------------------------------------------------
-
-`matplotlib.Figure.set_figwidth` and `matplotlib.Figure.set_figheight`
-had the kwarg `forward=False`
-by default, but `Figure.set_size_inches` now defaults to `forward=True`.
-This makes these functions conistent.
diff --git a/doc/api/next_api_changes/2017-11-19_svg_size.rst b/doc/api/next_api_changes/2017-11-19_svg_size.rst
deleted file mode 100644
index 9a9ef9ecd232..000000000000
--- a/doc/api/next_api_changes/2017-11-19_svg_size.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Do not truncate svg sizes to nearest point
-------------------------------------------
-
-There is no reason to size the SVG out put in integer points, change
-to out putting floats for the *height*, *width*, and *viewBox* attributes
-of the *svg* element.
diff --git a/doc/api/next_api_changes/2017-11-23-AL.rst b/doc/api/next_api_changes/2017-11-23-AL.rst
deleted file mode 100644
index 533d4b62cd31..000000000000
--- a/doc/api/next_api_changes/2017-11-23-AL.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Deprecations
-````````````
-
-The unused and untested ``Artist.onRemove`` and ``Artist.hitlist`` methods have
-been deprecated.
diff --git a/doc/api/next_api_changes/2017-11-24-AL.rst b/doc/api/next_api_changes/2017-11-24-AL.rst
deleted file mode 100644
index 74cf300d5d79..000000000000
--- a/doc/api/next_api_changes/2017-11-24-AL.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Deprecations
-````````````
-
-When given 2D inputs with non-matching numbers of columns, `~.pyplot.plot`
-currently cycles through the columns of the narrower input, until all the
-columns of the wider input have been plotted. This behavior is deprecated; in
-the future, only broadcasting (1 column to *n* columns) will be performed.
diff --git a/doc/api/next_api_changes/2017-11-31-AL.rst b/doc/api/next_api_changes/2017-11-31-AL.rst
deleted file mode 100644
index 8efa9a95c1df..000000000000
--- a/doc/api/next_api_changes/2017-11-31-AL.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Deprecations
-````````````
-
-The now unused ``mlab.less_simple_linear_interpolation`` function is
-deprecated.
diff --git a/doc/api/next_api_changes/2017-12-01-AL.rst b/doc/api/next_api_changes/2017-12-01-AL.rst
deleted file mode 100644
index ff86ce58a54f..000000000000
--- a/doc/api/next_api_changes/2017-12-01-AL.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Deprecation of unused methods
-`````````````````````````````
-
-The unused ``ContourLabeler.get_real_label_width`` method is deprecated.
diff --git a/doc/api/next_api_changes/2017-12-02-AL.rst b/doc/api/next_api_changes/2017-12-02-AL.rst
deleted file mode 100644
index 2fabbc598824..000000000000
--- a/doc/api/next_api_changes/2017-12-02-AL.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Deprecations
-````````````
-
-The unused ``FigureManagerBase.show_popup`` method is deprecated. This
-introduced in e945059b327d42a99938b939a1be867fa023e7ba in 2005 but never built
-out into any of the backends.
diff --git a/doc/api/next_api_changes/2017-12-06-imports-AL.rst b/doc/api/next_api_changes/2017-12-06-imports-AL.rst
deleted file mode 100644
index 64f472c48b6f..000000000000
--- a/doc/api/next_api_changes/2017-12-06-imports-AL.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Removal of unused imports
-`````````````````````````
-Many unused imports were removed from the codebase. As a result,
-trying to import certain classes or functions from the "wrong" module
-(e.g. `~.Figure` from :mod:`matplotlib.backends.backend_agg` instead of
-:mod:`matplotlib.figure`) will now raise an `ImportError`.
diff --git a/doc/api/next_api_changes/2017-12-10-TH.rst b/doc/api/next_api_changes/2017-12-10-TH.rst
deleted file mode 100644
index bb97922cab0f..000000000000
--- a/doc/api/next_api_changes/2017-12-10-TH.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Deprecations
-````````````
-
-Using `.pyplot.axes` with an `.Axes` as argument is deprecated. This sets
-the current axes, i.e. it has the same effect as `.pyplot.sca`. For clarity
-``plt.sca(ax)`` should be preferred over ``plt.axes(ax)``.
diff --git a/doc/api/next_api_changes/2017-12-14-JMK.rst b/doc/api/next_api_changes/2017-12-14-JMK.rst
deleted file mode 100644
index f1051a1d5f3f..000000000000
--- a/doc/api/next_api_changes/2017-12-14-JMK.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Fontsizes less than 1 pt are clipped to be 1 pt.
-------------------------------------------------
-
-FreeType doesn't allow fonts to get smaller than 1 pt, so all Agg
-backends were silently rounding up to 1 pt. PDF (other vector
-backends?) were letting us write fonts that were less than 1 pt, but
-they could not be placed properly because position information comes from
-FreeType. This change makes it so no backends can use fonts smaller than
-1 pt, consistent with FreeType and ensuring more consistent results across
-backends.
diff --git a/doc/api/next_api_changes/2017-12-15-AL.rst b/doc/api/next_api_changes/2017-12-15-AL.rst
deleted file mode 100644
index eb317c0a5de2..000000000000
--- a/doc/api/next_api_changes/2017-12-15-AL.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Deprecation of the ``nbagg.transparent`` rcParam
-````````````````````````````````````````````````
-
-To control transparency of figure patches in the nbagg (or any other) backend,
-directly set ``figure.patch.facecolor``, or the ``figure.facecolor`` rcParam.
diff --git a/doc/api/next_api_changes/2017-12-17-AL.rst b/doc/api/next_api_changes/2017-12-17-AL.rst
deleted file mode 100644
index 02a3003dd535..000000000000
--- a/doc/api/next_api_changes/2017-12-17-AL.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Removal of deprecated rcParams
-``````````````````````````````
-
-The following deprecated rcParams have been removed:
-
-- ``axes.color_cycle`` (see ``axes.prop_cycle``),
-- ``legend.isaxes``,
-- ``svg.embed_char_paths`` (see ``svg.fonttype``),
-- ``text.fontstyle``, ``text.fontangle``, ``text.fontvariant``,
- ``text.fontweight``, ``text.fontsize`` (renamed to ``text.style``, etc.),
-- ``tick.size`` (renamed to ``tick.major.size``).
diff --git a/doc/api/next_api_changes/2017-12-26-AL.rst b/doc/api/next_api_changes/2017-12-26-AL.rst
deleted file mode 100644
index b190b81199cd..000000000000
--- a/doc/api/next_api_changes/2017-12-26-AL.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-`~.tight_layout.auto_adjust_subplotpars` now raises `ValueError` instead of `RuntimeError` when sizes of input lists don't match
-````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
diff --git a/doc/api/next_api_changes/2018-01-29-AL.rst b/doc/api/next_api_changes/2018-01-29-AL.rst
deleted file mode 100644
index ad6c36618fbc..000000000000
--- a/doc/api/next_api_changes/2018-01-29-AL.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Deprecation of backend_tkagg.AxisMenu
-`````````````````````````````````````
-The above-mentioned class is deprecated, as it has become unused since the
-removal of "classic" toolbars.
diff --git a/doc/api/next_api_changes/2018-02-03-AL.rst b/doc/api/next_api_changes/2018-02-03-AL.rst
deleted file mode 100644
index d011616d8975..000000000000
--- a/doc/api/next_api_changes/2018-02-03-AL.rst
+++ /dev/null
@@ -1,73 +0,0 @@
-Changes to Qt backend class MRO
-```````````````````````````````
-
-To support both Agg and cairo rendering for Qt backends all of the
-non-Agg specific code previously in
-:class:`.backend_qt5agg.FigureCanvasQTAggBase` has been moved to
-:class:`.backend_qt5.FigureCanvasQT` so it can be shared with the cairo
-implementation. The :meth:`.FigureCanvasQTAggBase.paintEvent`,
-:meth:`.FigureCanvasQTAggBase.blit`, and
-:meth:`.FigureCanvasQTAggBase.print_figure` methods have moved to
-:meth:`.FigureCanvasQTAgg.paintEvent`, :meth:`.FigureCanvasQTAgg.blit`, and
-:meth:`.FigureCanvasQTAgg.print_figure`. The first two methods assume that
-the instance is also a :class:`QWidget` so to use
-:class:`FigureCanvasQTAggBase` it was required to multiple inherit
-from a :class:`QWidget` sub-class.
-
-Having moved all of its methods either up or down the class hierarchy
-:class:`FigureCanvasQTAggBase` has been deprecated. To do this with
-out warning and to preserve as much API as possible,
-:class:`.backend_qt5.FigureCanvasQTAggBase` now inherits from
-:class:`.backend_qt5.FigureCanvasQTAgg`.
-
-The MRO for :class:`FigureCanvasQTAgg` and
-:class:`FigureCanvasQTAggBase` used to be ::
-
-
- [matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg,
- matplotlib.backends.backend_qt5agg.FigureCanvasQTAggBase,
- matplotlib.backends.backend_agg.FigureCanvasAgg,
- matplotlib.backends.backend_qt5.FigureCanvasQT,
- PyQt5.QtWidgets.QWidget,
- PyQt5.QtCore.QObject,
- sip.wrapper,
- PyQt5.QtGui.QPaintDevice,
- sip.simplewrapper,
- matplotlib.backend_bases.FigureCanvasBase,
- object]
-
-and ::
-
-
- [matplotlib.backends.backend_qt5agg.FigureCanvasQTAggBase,
- matplotlib.backends.backend_agg.FigureCanvasAgg,
- matplotlib.backend_bases.FigureCanvasBase,
- object]
-
-
-respectively. They are now ::
-
- [matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg,
- matplotlib.backends.backend_agg.FigureCanvasAgg,
- matplotlib.backends.backend_qt5.FigureCanvasQT,
- PyQt5.QtWidgets.QWidget,
- PyQt5.QtCore.QObject,
- sip.wrapper,
- PyQt5.QtGui.QPaintDevice,
- sip.simplewrapper,
- matplotlib.backend_bases.FigureCanvasBase,
- object]
-
-and ::
-
- [matplotlib.backends.backend_qt5agg.FigureCanvasQTAggBase,
- matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg,
- matplotlib.backends.backend_agg.FigureCanvasAgg,
- matplotlib.backends.backend_qt5.FigureCanvasQT,
- PyQt5.QtWidgets.QWidget,
- PyQt5.QtCore.QObject,
- sip.wrapper,
- PyQt5.QtGui.QPaintDevice,
- sip.simplewrapper,
- matplotlib.backend_bases.FigureCanvasBase,
- object]
diff --git a/doc/api/next_api_changes/README.rst b/doc/api/next_api_changes/README.rst
index c2b71d495ca9..cbeb1b4debac 100644
--- a/doc/api/next_api_changes/README.rst
+++ b/doc/api/next_api_changes/README.rst
@@ -1,10 +1,15 @@
+:orphan:
+
Adding API change notes
-```````````````````````
+=======================
+Please place new portions of `api_changes.rst` in the
+`next_api_changes` directory.
-For changes which require an entry in `api_changes.rst` please create
-a file in this folder with the name :file:`YYYY-MM-DD-[initials].rst`
-(ex :file:`2014-07-31-TAC.rst`) with contents following the form: ::
+When adding an entry please look at the currently existing files to
+see if you can extend any of them. If you create a file, name it
+:file:`what_api_changes.rst` (ex :file:`deprecated_rcparams.rst`) with
+contents following the form: ::
Brief description of change
---------------------------
diff --git a/doc/api/next_api_changes/removed-attributes.rst b/doc/api/next_api_changes/removed-attributes.rst
deleted file mode 100644
index 88af1212a6c7..000000000000
--- a/doc/api/next_api_changes/removed-attributes.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Removed attributes
-``````````````````
-The unused `FONT_SCALE` and `fontd` attributes of the `RendererSVG` class have
-been removed.
diff --git a/doc/users/github_stats.rst b/doc/users/github_stats.rst
index eaeca59a84b0..21ad59b27317 100644
--- a/doc/users/github_stats.rst
+++ b/doc/users/github_stats.rst
@@ -3,259 +3,773 @@
GitHub Stats
============
-GitHub stats for 2017/10/03 - 2017/12/09 (tag: v2.1.1)
+GitHub stats for 2017/10/03 - 2018/02/11 (tag: v2.1.0)
These lists are automatically generated, and may be incomplete or contain duplicates.
-We closed 78 issues and merged 172 pull requests.
-The full list can be seen `on GitHub `__
+We closed 315 issues and merged 458 pull requests.
-The following 44 authors contributed 455 commits.
+The following 98 authors contributed 2045 commits.
* Adrien F. Vincent
* ahed87
* Allan Haldane
+* Andy Mastbaum
* Antony Lee
* apodemus
* Arthur Paulino
+* as691454
+* ash13
* Atharva Khare
* Ben Root
+* Blaise Thompson
+* Brennan Magee
+* cclauss
* cgohlke
+* Chris Holdgraf
* Christoph Gohlke
+* clintval
+* Dakota Blair
* David Stansby
* deepyaman
+* Derek Kim
+* Derek Tropf
+* DietmarSchwertberger
+* Divyam Madaan
* Doug Blank
+* Duncan Macleod
* Elliott Sales de Andrade
+* Emlyn Price
* Eric Firing
+* Eric Wieser
+* Erik M. Bray
+* et2010
+* Fabian Kloosterman
+* Federico Ariza
* Filip Dimitrovski
+* fuzzythecat
* hannah
* Importance of Being Ernest
* Jake Vanderplas
-* Jan Schulz
+* Jamie Nunez
* Jody Klymak
-* Joe C
-* Jose Luis Cortes Varela
-* Jun Tan
-* JunTan
+* John Hoffman
+* Joseph Albert
+* Jouni K. Seppänen
+* Juan Nunez-Iglesias
+* Justin Cai
* Kevin Ji
* Kexuan Sun
+* Kjell Le
+* Luca Verginer
+* luz.paz
* Matthew Brett
* Matthias Bussonnier
+* Matti Picus
+* mattip
* mcquin
* Michael Seifert
-* Nathan Musoke
+* Mudit Surana
+* Nathan Goldbaum
+* navdeep rana
* Nelle Varoquaux
+* nemanja
+* Nick Papior
* Nikita Kniazev
-* Patrick Faion
+* Nis Martensen
+* nmartensen
+* Norman Fomferra
+* Paul Ganssle
* Paul Hobson
+* Phil Ruffwind
+* Richard Gowers
+* Rob Harrigan
+* Robin Dunn
+* Roy Smith
* Ryan May
+* Saket Choudhary
* Sean Farley
+* Sergey B Kirpichev
+* settheory
+* simonpf
+* tdpetrou
* Ted Petrou
* Thomas A Caswell
+* Thomas Mansencal
+* Thomas Robitaille
+* Thomas Spura
+* Thomas VINCENT
* Tim Hoffmann
* Tom
+* Tom Augspurger
* Tom Dupré la Tour
* TomDonoghue
+* William Mallard
+* Yao-Yuan Mao
+* Yuval Langer
+* Zac-HD
+* ZWL
GitHub issues and pull requests:
-Pull Requests (172):
+Pull Requests (458):
-* :ghpull:`9947`: Backport PR #9942 on branch v2.1.x
+* :ghpull:`10352`: Explicitely destroy created wx PaintDC
+* :ghpull:`10377`: FigureCanvasWx/Agg fixed size
+* :ghpull:`10399`: Avoid double draw in qt5cairo.
+* :ghpull:`9871`: Cividis colormap added with short description in whats_new
+* :ghpull:`10413`: DOC: Fix typos in section names.
+* :ghpull:`10407`: TST/FIX twinx and twiny w/ constrainedlayout
+* :ghpull:`10409`: Remove unused _is_list_like. Move six import up.
+* :ghpull:`10412`: GTK backend deprecations
+* :ghpull:`10385`: Fix deprecations in examples
+* :ghpull:`10389`: import six
+* :ghpull:`10405`: Minor updates to unit doc
+* :ghpull:`10366`: Axes doc datanotes
+* :ghpull:`10402`: MNT: remove example based on Enthought Traits package
+* :ghpull:`7545`: Axisartist testing + bugfixes
+* :ghpull:`10390`: file() was removed in Python 3
+* :ghpull:`10394`: Wrong explanation in docstring for add_subplot fixed
+* :ghpull:`10393`: OOification of the new examples from #10306
+* :ghpull:`10306`: Add ytick label right/left properties in matplotlibrc
+* :ghpull:`9081`: cell returned when added to Table
+* :ghpull:`10387`: TST: Small fix to constrainedlayout7 test (removed image)
+* :ghpull:`9708`: Cleanup doc/conf.py & local sphinx extensions
+* :ghpull:`10370`: Clean up units.py
+* :ghpull:`9934`: MEP22 implementation for QT backend
+* :ghpull:`9151`: Deprecate mlab functions
+* :ghpull:`10210`: qt{4,5}cairo backend: the minimal version.
+* :ghpull:`10379`: FIX: re-jigger deprecation of rcParams using machinery in __init__
+* :ghpull:`10276`: improve docstring of Axes.step
+* :ghpull:`10371`: Fix constrainedlayout uneven grid specs
+* :ghpull:`10220`: Clip RGB data to valid range for imshow
+* :ghpull:`9991`: MAINT: Use vectorization in plot_trisurf, simplifying greatly
+* :ghpull:`10363`: Fix to allow both old and new style wx versions
+* :ghpull:`10309`: Improve code generated by boilerplate.py
+* :ghpull:`10367`: constrained layout guide typos
+* :ghpull:`9082`: [MRG] Constrained_layout (geometry manager)
+* :ghpull:`10359`: Add attributes section to ColorbarBase doc
+* :ghpull:`10362`: Switch to using StrictVersion in wx_compat.py
+* :ghpull:`10353`: Fix syntax highlighting of sample bash and bibtex in rst markup.
+* :ghpull:`10354`: DOC: clarify that clim is not a valid kwarg if vmin/vmax are used
+* :ghpull:`10355`: Fix typo in tutorial; & change mention of Qt4 to Qt5 (new default).
+* :ghpull:`10351`: FIX: deprecate qt4/5 rcparams
+* :ghpull:`10347`: Hide the backend.qt4/5 rcparam deprecation warning in test suite.
+* :ghpull:`10348`: When latex fails, make sure it does not write a dvi.
+* :ghpull:`10226`: Custom :rcparam: role.
+* :ghpull:`10335`: Update some image_comparison tests.
+* :ghpull:`10282`: Deprecate the backend.qt{4,5} rcParams.
+* :ghpull:`10281`: Move down logging levels in mpl/__init__ to DEBUG.
+* :ghpull:`10337`: Deprecate backend_tkagg.AxisMenu.
+* :ghpull:`10242`: Fix InvertedLog10Transform.inverted()
+* :ghpull:`10331`: Remove unnecessary calls to float() before division.
+* :ghpull:`10327`: Don't call np.identity() in transforms.
+* :ghpull:`10325`: Minor improvements to quadmesh_demo.
+* :ghpull:`10340`: update set_drawstyle
+* :ghpull:`10333`: Remove some commented out debug prints.
+* :ghpull:`10301`: Deprecate truncating saved unsized anims to 100 frames.
+* :ghpull:`10332`: Join strings instead of adding them.
+* :ghpull:`10330`: Shorten a long and now outdated comment.
+* :ghpull:`10326`: Various examples updates.
+* :ghpull:`10328`: Use deg2rad/rad2deg where appropriate.
+* :ghpull:`10324`: Linewrap backend_pgf to 79 characters.
+* :ghpull:`10033`: Improve handling of shared axes with specified aspect ratio
+* :ghpull:`10310`: Add libdl on Unix-like systems.
+* :ghpull:`10320`: DOC: Tiny fixes, and possible overhaul, of the two scales example in the gallery
+* :ghpull:`10313`: Make commented ACCEPTS statements inline comments
+* :ghpull:`10316`: TST FIX pyqt5 5.9
+* :ghpull:`10302`: Alternate implementation of lazy ticks.
+* :ghpull:`9652`: Align x and y labels between axes
+* :ghpull:`10292`: Unset the canvas manager when saving the figure.
+* :ghpull:`10303`: Simplify Axis.get_{major,minor}_ticks.
+* :ghpull:`10295`: Pass options to ps2pdf using ``-foo#bar`` instead of ``-foo=bar``.
+* :ghpull:`10311`: Clean up next what's new files
+* :ghpull:`10224`: improve docstring of Axes.errorbar
+* :ghpull:`10308`: Switch the lasso selector to use mpl event handling, not input().
+* :ghpull:`10206`: Don't convert numbers plotted on an axis with units
+* :ghpull:`10305`: Make the horizontal bar appear in AnchoredArtists example.
+* :ghpull:`10289`: Ensure image scale factors are scalars
+* :ghpull:`10284`: Allow ACCEPTS as ReST comment in docstrings
+* :ghpull:`10266`: More misc. typos
+* :ghpull:`10283`: Deprecate obsolete 'plugins.directory' rcparam.
+* :ghpull:`10286`: Update multi_image example.
+* :ghpull:`10240`: Pillow animation writer.
+* :ghpull:`10279`: Add 'val' attribute to slider doc
+* :ghpull:`10280`: Update writing docs concerning explicit parameter lists
+* :ghpull:`10231`: Support PathLike inputs.
+* :ghpull:`9952`: Errorbars accept marker_options and follow prop_cycle
+* :ghpull:`10271`: whats_new.rst: "C" must be capitalized in "CreationDate"
+* :ghpull:`9911`: Make _get_rgba_face actually always return a RGBA.
+* :ghpull:`10200`: Catch normed warning in tests
+* :ghpull:`10219`: Improve transform docstrings
+* :ghpull:`10076`: improve sub-second datetime plotting and documentation
+* :ghpull:`8512`: DOC: add quickstart section to the gridspec tutorial
+* :ghpull:`10168`: Minor update to multiprocessing example.
+* :ghpull:`10154`: improve Axes.stem docstring
+* :ghpull:`10203`: Update docs, in particular for backends.
+* :ghpull:`9884`: DOC: re-organize devel/documenting_mpl.rst
+* :ghpull:`10243`: improve docstring of Axes.scatter
+* :ghpull:`10250`: Minor refactor of backend_ps.
+* :ghpull:`10261`: Some comment typo fixes
+* :ghpull:`10125`: Cleanup animation examples
+* :ghpull:`10197`: AFM fonts don't have .postscript_name, but .get_fontname().
+* :ghpull:`10263`: FIX: (re-allow) legend OrderedDict handles and labels...
+* :ghpull:`10257`: BLD: use correct method to get installation hints
+* :ghpull:`10259`: Clean up example section titles
+* :ghpull:`10254`: Quick and dirty revert of busy cursor for 2.1.2.
+* :ghpull:`9570`: Allow setting MATPLOTLIBRC by process substitution.
+* :ghpull:`10247`: Simplify _get_xdg_cache_dir in setupext.
+* :ghpull:`10256`: Remove reference to ignored rcParam, nbagg.transparent
+* :ghpull:`10133`: FIX: Image scaling for large dynamic range ints
+* :ghpull:`10077`: Use fuzzy comparison for stroke join determination.
+* :ghpull:`10246`: improve docstring of Axes.plot_date
+* :ghpull:`10233`: Move unrendered docstrings to private attributes.
+* :ghpull:`10010`: FIX: Check for fontsize smaller than 1 pt and round up
+* :ghpull:`10248`: Minor cleanups.
+* :ghpull:`9356`: COMPAT: use tkagg backend on PyPy
+* :ghpull:`10188`: Doc timer docs
+* :ghpull:`10232`: Unify "blank space" and "white space" to "space".
+* :ghpull:`10138`: Clean up _axes.py docstrings
+* :ghpull:`10228`: Add closing quotes to embedded python in rst markup.
+* :ghpull:`10217`: TST: Don't use set -e.
+* :ghpull:`10214`: DOC: fix '\' markup for sphinx and py37
+* :ghpull:`10213`: Add missing import to backend_tkagg.
+* :ghpull:`9275`: Tkagg fixes
+* :ghpull:`10204`: Cleanup backend_cairo.
+* :ghpull:`10195`: Wrap a few overly long lines.
+* :ghpull:`10190`: improve docstring of Axes.plot
+* :ghpull:`10086`: Deprecate support for "svg fonts" font embedding.
+* :ghpull:`10119`: Simplify gridspec.py.
+* :ghpull:`10193`: Handle Tick gridline properties like other Tick properties
+* :ghpull:`10182`: improve docstrings for Axes.bar, Axes.barh, Axes.stackplot
+* :ghpull:`10186`: improve docstrings of Axes.fill_between and Axes.fill_betweenx
+* :ghpull:`10181`: Cleanup texmanager.
+* :ghpull:`10192`: remove evt.Skip() from EVT_PAINT handler
+* :ghpull:`10191`: Minor refactoring of docstring formatting in preprocess_data
+* :ghpull:`10196`: Remove most instances of pep8 E502 (redundant backslashes).
+* :ghpull:`10139`: Improve legend_handler docstrings
+* :ghpull:`10198`: Improve hist2d returns doc
+* :ghpull:`10146`: Updated what's new entry for color comparision method
+* :ghpull:`10184`: Remove executable bit from example.
+* :ghpull:`10180`: Rebase of #8504
+* :ghpull:`10178`: Simplify pandas fixture.
+* :ghpull:`10124`: TST: centralize and standardize pandas imports
+* :ghpull:`10175`: Agg: When a single Text uses usetex, don't pass it through mathtext parser
+* :ghpull:`10166`: Hide fully transparent text in PS output.
+* :ghpull:`10150`: Docstring updates for ``Axes.fill`` and ``Axes.pie``
+* :ghpull:`10172`: Slight improvements to contour.py doc
+* :ghpull:`10159`: improve Axes.broken_barh docstring
+* :ghpull:`10169`: Make relim() take images into account too.
+* :ghpull:`10171`: Replace normed with density in examples
+* :ghpull:`10046`: Add missing decode() in svg font embedding path.
+* :ghpull:`9317`: On 2.7, run tests on oldest documented supported pytest and pytest-cov.
+* :ghpull:`10091`: Replace "True | False" by "bool" in the docs.
+* :ghpull:`10129`: Fix multiple zero labels when using SymLogNorm
+* :ghpull:`10085`: Move missing font message to debug level
+* :ghpull:`10155`: Use keyword arguments for setp() in examples
+* :ghpull:`10152`: DOC: update the datetime64 HowTo
+* :ghpull:`9645`: expose Path.contains_points as a method of Patch
+* :ghpull:`10093`: Some docstring fixes and change a raise type
+* :ghpull:`10141`: Zoom out to rectangle is not experimental anymore.
+* :ghpull:`10087`: Update docs on installing GUI toolkits in virtualenvs.
+* :ghpull:`10137`: Remove gen rst
+* :ghpull:`10126`: Move axisartist examples to their folder.
+* :ghpull:`10131`: cairo backends do not support blitting; mark them as such.
+* :ghpull:`10134`: Minor style cleanups.
+* :ghpull:`10127`: Use subplots() instead of axes_grid in suitable examples.
+* :ghpull:`9938`: Cleanup imports.
+* :ghpull:`10116`: Add simple image test for 3D tricontour and tricontourf
+* :ghpull:`10090`: Minor simplification to _pylab_helpers.
+* :ghpull:`10089`: Deprecate passing strings instead of booleans to control tick state (and other states).
+* :ghpull:`9975`: Remove some test warnings
+* :ghpull:`10084`: DOC: Better error when float on datetime axis
+* :ghpull:`10092`: Minor cleanups to the cairo backend.
+* :ghpull:`10120`: Minor simplification to legend.py.
+* :ghpull:`10101`: Add origin as sticky point for radial axes
+* :ghpull:`10104`: Minor fixes to backend_template.
+* :ghpull:`9619`: FIX: non-existing variable
+* :ghpull:`10020`: Let Container reprs report the actual subtype.
+* :ghpull:`9959`: DOC: Update color tutorial to explain alpha
+* :ghpull:`10094`: replace six.next -> next (available since Py2.6).
+* :ghpull:`10103`: Simplify Colormap.__call__.
+* :ghpull:`10102`: Remove list(zip(...)) when unnecessary.
+* :ghpull:`10106`: Clean up some widget docstrings
+* :ghpull:`10108`: Dedent docs in contributing.rst bullet/numbered lists.
+* :ghpull:`10096`: Logging and exception messages cleanup.
+* :ghpull:`10095`: Remove some debugging code.
+* :ghpull:`10100`: STY: fix line length
+* :ghpull:`9316`: Removal of deprecated features for 2.2
+* :ghpull:`10098`: Doc update: Explain what drawing a line does in RectangularSelector.
+* :ghpull:`9997`: Fix empty plot with drawstyle="steps"
+* :ghpull:`10065`: Add version to documentation header
+* :ghpull:`10028`: Remove some deprecated rcParams.
+* :ghpull:`10024`: Deprecate nbagg.transparent rcParam.
+* :ghpull:`10074`: Prefer vendored qhull if sys-wide version can't be determined.
+* :ghpull:`10044`: Remove some uses of unicode_literals
+* :ghpull:`10055`: Documentation mistake in pyplot.py corrected
+* :ghpull:`10064`: FIX: remove repeated label legend logic
+* :ghpull:`10052`: Use consistent float-to-str formatting for tests with units
+* :ghpull:`10032`: Add method for comparing two colors
+* :ghpull:`10030`: Fix using .get_color() and friends in labels handling
+* :ghpull:`10031`: Fix legend color comparisions
+* :ghpull:`10021`: Cleanup issue template.
+* :ghpull:`10026`: Fix scatter docstring markup
+* :ghpull:`10043`: Update FreeType hashes
+* :ghpull:`10027`: Improve errorbar returns doc
+* :ghpull:`10019`: TST: test mlab cohere
+* :ghpull:`10025`: Remove badges from website sidebar
+* :ghpull:`10000`: Fix figure.colorbar() with axes keywords
+* :ghpull:`9999`: improve legend docstring
+* :ghpull:`9514`: Convert index.html and citing.html to rst.
+* :ghpull:`10006`: add mpl-template and plotnine to 3rd party doc
+* :ghpull:`7945`: fix StixSans mapping bug
+* :ghpull:`10014`: FIX: pass nonposx/y args through loglog etc
+* :ghpull:`10004`: Fixed critical typo in mlab.cohere
+* :ghpull:`9989`: FIX: clabel manual spacing was incorrect
+* :ghpull:`9998`: Fix scatter_piecharts example
+* :ghpull:`9956`: BUG: clear events before destroying windows in tkagg
+* :ghpull:`9949`: fix docstring in ToolManager
+* :ghpull:`9641`: Implement Qt4 backend by fully reexporting Qt5 backend.
+* :ghpull:`9932`: Support pgi as alternative gobject bindings.
+* :ghpull:`9986`: Remove unused import in toolmanager example
+* :ghpull:`9968`: Deprecate pyplot.axes with an Axes argument
+* :ghpull:`9962`: toolbar checkbutton fix bug in tkinter python3.6
+* :ghpull:`9981`: DOC: Add alpha compositing note to "matplotlib.pyplot.imshow" definition.
+* :ghpull:`9969`: Numpydoc conversion and clarification of some AxesBase docstrings
+* :ghpull:`9946`: Clean up legend docstrings
+* :ghpull:`9951`: Improve documentation on Axes position
+* :ghpull:`9964`: Update Axes docs on aspect-related methods
+* :ghpull:`9385`: Bump test coverage of Qt5 UI.
+* :ghpull:`9958`: FIX: put Nav Home view back inside pan/zoom
+* :ghpull:`9945`: Only label vertical lines in acorr
+* :ghpull:`9930`: Cleanup pyplot.axes()
* :ghpull:`9942`: Minor doc formatting cleanups in pyplot
-* :ghpull:`9924`: setupext: fix missing js files for web_backend
-* :ghpull:`9909`: Backport PR #9881 on branch v2.1.x
+* :ghpull:`9933`: Fix Rectange.get_bbox()
+* :ghpull:`9929`: In tests, remove unused imports and sort some remaining imports.
+* :ghpull:`9928`: Cleanup delaxes()
+* :ghpull:`9750`: Use command keys for window shortcuts in Qt on OSX
+* :ghpull:`9072`: Use left/right top/bottom instead of width/height in Rectangle
+* :ghpull:`9917`: Unify (parametrize) test_composite across backends.
+* :ghpull:`9919`: In unit/memleak, write to in-memory buffer instead of file.
+* :ghpull:`9916`: backend_agg cleanup.
+* :ghpull:`9915`: Deprecate unused FigureManagerBase.show_popup.
+* :ghpull:`9825`: Deprecate Artist.onRemove, Artist.hitlist.
+* :ghpull:`9513`: Switch to makefile-based doc build.
+* :ghpull:`9865`: less_simple_linear_interpolation can be replaced by np.interp.
+* :ghpull:`9904`: Deprecate unused ContourLabeler.get_real_label_width.
* :ghpull:`9881`: Polar tick fixes
+* :ghpull:`9028`: Modified rrulewraper to handle timezone-aware datetimes.
+* :ghpull:`9900`: DOC: Updates multiprocessing example.
+* :ghpull:`9907`: DOC: (subjectively) nicer annotated barchart example
* :ghpull:`9448`: Fix instance of 'RendererPS' has no 'tex' member
-* :ghpull:`9901`: Backport PR #9897 on branch v2.1.x
-* :ghpull:`9902`: DOC: correct inverted description of aspect
-* :ghpull:`9874`: Backport PR #9272 on branch v2.1.x
+* :ghpull:`9899`: make SubplotTool into a modal dialog, keep ref to SubplotTool
+* :ghpull:`9889`: Deprecate 'normed' kwarg to hist
+* :ghpull:`9421`: Improve reprs of transforms.
* :ghpull:`9897`: changed line to 'alias for set_multialignment'
-* :ghpull:`9850`: Merge pull request #9773 from dopplershift/fix-appveyor
+* :ghpull:`9875`: Additions to the documentation guide
+* :ghpull:`9878`: TST: Lock pytest to 3.2.5 until 3.3.1 released
+* :ghpull:`9805`: Update documentation guide
+* :ghpull:`9836`: ENH/MacOS Allow shift modifiers to key events
+* :ghpull:`9860`: Vectorize and document simple_linear_interpolation.
+* :ghpull:`9869`: Clean tmpdir at exit.
+* :ghpull:`9781`: Convert LineCollection docstring to numpydoc
+* :ghpull:`9862`: PRF: Don't used MaskedArray in Aitoff transform.
+* :ghpull:`9854`: Exclude dviread.Text from the documentation.
+* :ghpull:`9861`: Remove some unused imports; reword/remarkup some docstrings.
+* :ghpull:`9857`: documentation: fix url for pillow
+* :ghpull:`9811`: dynamically finding the backend preferred format for button images
+* :ghpull:`9841`: ENH: make interval_multiples work for years
+* :ghpull:`9826`: Deprecate column cycling when plot() inputs have nonmatching shapes.
+* :ghpull:`9852`: Simplify the pyplot animation demo.
+* :ghpull:`9853`: Move image_slices_viewer example from animation to event_handling.
+* :ghpull:`9848`: Fix typo in axis api doc
+* :ghpull:`9846`: Move enumeration of text tutorial into table.
+* :ghpull:`9827`: DOC: add more tutorial to text/text_intro
* :ghpull:`9773`: MNT: Make sure AppVeyor fails if tests fail
-* :ghpull:`9760`: Fix exception when guessing the AFM familyname
-* :ghpull:`9340`: bugfix/test for #9336 integer overwrite in categorical
-* :ghpull:`9318`: Don't sort categorical keys.
-* :ghpull:`9796`: Add deprecation for Axes.set_thetagrids(frac).
-* :ghpull:`9772`: FIX: TextBox.disconnect remove from registries that TextBox has
+* :ghpull:`9806`: Remove call to nonexistent FT2Font.get_fontsize.
+* :ghpull:`9816`: ENH: add pad kwarg to set_title
+* :ghpull:`9817`: API: do not truncate svg size to integer points
+* :ghpull:`9599`: Unify the three Qt5 embedding examples.
* :ghpull:`9803`: Add links to python's strftime method
-* :ghpull:`9793`: FIX: treat ``zorder=None`` as falling back to the default
-* :ghpull:`9777`: PR: Port Figure docstrings to numpydoc
-* :ghpull:`9770`: Backport PR #9670 on branch v2.1.x
-* :ghpull:`9768`: BLD: update MANIFEST.in to account for moved files
-* :ghpull:`9769`: Backport PR #9723 on branch v2.1.x
-* :ghpull:`9257`: FIX: segfault on truncated png
+* :ghpull:`9807`: Simplify test_tinypages.
+* :ghpull:`9790`: Link GridSpec docs to SubplotParams paramter descriptions
+* :ghpull:`9311`: Update docs on docs.
+* :ghpull:`9794`: DOC: for datetime64 support
+* :ghpull:`9779`: ENH: support np.datenum64 in dates.py
+* :ghpull:`9654`: Correctly convert units for a stacked histogram
* :ghpull:`9670`: Make tick_left/right keep labels off if they are already off
* :ghpull:`9723`: ENH: Catch masked array and invalid x, y to pcolormesh
-* :ghpull:`9767`: Backport PR #9766 on branch v2.1.x
* :ghpull:`9766`: Fix mixed_subplots example
-* :ghpull:`9762`: Backport PR #9759 on branch v2.1.x
+* :ghpull:`9255`: New color blind-friendly color cycle
+* :ghpull:`9756`: DOC removing pyplot_annotate.py
* :ghpull:`9759`: blocking_input: Fix "manager" attr check
-* :ghpull:`9755`: Backport PR #9743 on branch v2.1.x
-* :ghpull:`9754`: Backport PR #9752 on branch v2.1.x
+* :ghpull:`9313`: [MRG] Replace verbose class with standard logging library
* :ghpull:`9743`: FIX: check if contour level in format dictionary, or return a default
+* :ghpull:`9753`: FIX: Detrending before windowing _spectral_helper
* :ghpull:`9752`: DOC: example demo_parasite_axes2.py broken on 2.1.0
-* :ghpull:`9749`: Backport PR #9748 on branch v2.1.x
-* :ghpull:`9746`: Backport PR #9724 on branch v2.1.x
+* :ghpull:`9587`: Remove unused example with no plot
+* :ghpull:`9715`: Change set_figwidth/height to be consistent w/ set_size_inches
+* :ghpull:`9657`: Add API note about MovieWriterRegistry exception
* :ghpull:`9748`: Reword subplot() doc.
+* :ghpull:`9379`: ENH: Added __repr__ for Figure
* :ghpull:`9724`: Fix PDFpages bug
* :ghpull:`9726`: FIX/TST: update tests for pandas 0.21
-* :ghpull:`9734`: Backport PR #9733 on branch v2.1.x
+* :ghpull:`9677`: Rely more on lru_cache rather than custom caching.
+* :ghpull:`9698`: Set widget background color to white.
* :ghpull:`9733`: Allow _BackendNbAgg.show() to take keyword "block"
-* :ghpull:`9721`: Backport PR #9711 on branch v2.1.x
-* :ghpull:`9722`: FIX: copy=False for masked arrays in pcolormesh
+* :ghpull:`9732`: Added mention of WCSAxes in the third-party packages page
* :ghpull:`9711`: Minor markup fix.
-* :ghpull:`9714`: Backport PR #9662 on branch v2.1.x
+* :ghpull:`9718`: Revert "Axes.__init__ speedup"
+* :ghpull:`8626`: Axes.__init__ speedup
* :ghpull:`9662`: Fix crash when restarting OSX single shot timer
* :ghpull:`9461`: Property tables
-* :ghpull:`9709`: FIX: ensure errorbar creates line collection even with empty data
-* :ghpull:`9710`: Backport PR #9705 on branch v2.1.x
+* :ghpull:`9684`: Make some more of figure.py numpydoc
+* :ghpull:`9703`: Deprecate Artist.is_figure_set.
+* :ghpull:`9697`: Raise minimum WX version to 2.9.
* :ghpull:`9705`: Fix scatterplot categorical support
-* :ghpull:`9692`: Backport PR #9687 on branch v2.1.x
* :ghpull:`9687`: Fix callbackregistry docstring.
-* :ghpull:`9691`: Backport PR #9689 on branch v2.1.x
* :ghpull:`9689`: Updates to font-related examples.
-* :ghpull:`9679`: Backport PR #9676 on branch v2.1.x
+* :ghpull:`9690`: Move example in wrong folder
+* :ghpull:`9678`: Remove a few unnecessary global statements.
+* :ghpull:`9685`: Trivial aliases.
+* :ghpull:`9566`: Update API examples
+* :ghpull:`9680`: Actually install the deps on Appveyor.
+* :ghpull:`9481`: Apply hinting factor rcParam in all cases.
* :ghpull:`9676`: FIX: Catch IOError on font-cache write
-* :ghpull:`9675`: Backport PR #9649 on branch v2.1.x
-* :ghpull:`9644`: Backport PR #9324 on branch v2.1.x
+* :ghpull:`9673`: On CI, just let pip resolve most dependencies.
* :ghpull:`9649`: Reoder Axes API docs.
-* :ghpull:`9667`: Backport PR #9661 on branch v2.1.x
+* :ghpull:`9658`: Pin pandas on appveyor too
+* :ghpull:`9665`: Update agg_oo_sgskip.py
* :ghpull:`9661`: Fix arcs with very large width/height.
+* :ghpull:`9510`: BLD: Fix some bugs in ``setupext.py``
+* :ghpull:`9646`: Convert dviread to use lru_cache.
+* :ghpull:`9648`: Correct https git URIs in documentation
+* :ghpull:`9614`: Added an entry for mpl-scatter-density in the third-party tools page
+* :ghpull:`9640`: Remove unused global cmd_split variable.
+* :ghpull:`9532`: Further improve colormap discussion.
* :ghpull:`9324`: [MRG] Allow kwarg handles and labels figure.legend and make doc for kwargs the same
-* :ghpull:`9633`: FIX: make labelrotation work as kwarg to tick_params as documented
-* :ghpull:`9632`: Backport PR #9359 on branch v2.1.x
-* :ghpull:`9631`: Backport PR #9389 on branch v2.1.x
-* :ghpull:`9630`: Backport PR #9612 on branch v2.1.x
+* :ghpull:`9643`: More helpful error if requested MovieWriter not available
* :ghpull:`9359`: Keep track of axes in interactive navigation.
-* :ghpull:`9534`: Fix webagg
* :ghpull:`9389`: Assign event to later Axes if zorders are tied.
* :ghpull:`9612`: Only set view/data intervals if axis is set in AutoDateLocator
-* :ghpull:`9618`: Backport PR #9262 on branch v2.1.x
-* :ghpull:`9623`: Backport PR #9600 on branch v2.1.x
-* :ghpull:`9621`: Backport PR #9617 on branch v2.1.x
+* :ghpull:`9627`: Move old logo to history page.
+* :ghpull:`9624`: DOC: move whats_new entry to next_whats_new folder
+* :ghpull:`9625`: STY: remove trailing whitespace
* :ghpull:`9600`: Fix some widget docstrings.
+* :ghpull:`9617`: Pin pandas<0.21 to unbreak the build.
+* :ghpull:`9515`: Attribute users/intro to JDH and rename to history.
+* :ghpull:`9615`: Do not hardcode fill=False in mark_inset
* :ghpull:`9262`: Minor doc markup fixes.
-* :ghpull:`9605`: Backport PR #9604 on branch v2.1.x
* :ghpull:`9603`: Fix xkcd() not resetting context anymore.
* :ghpull:`9604`: Gridspec doc fixes
-* :ghpull:`9521`: fix xkcd context
-* :ghpull:`9596`: Backport PR #9589 on branch v2.1.x
+* :ghpull:`9008`: adding webagg.address parameter to rcParams
+* :ghpull:`9519`: Increase patch test coverage
+* :ghpull:`9497`: Test simplifications.
+* :ghpull:`9536`: Simplify declaration of install_requires.
+* :ghpull:`9601`: Fix PEP8 in stackplot
+* :ghpull:`9595`: Convert stackplot docstring to numpydoc
* :ghpull:`9589`: Fix typo in isinstance
-* :ghpull:`9586`: Backport PR #9564 on branch v2.1.x
-* :ghpull:`9563`: Backport PR #9121 on branch v2.1.x
+* :ghpull:`9523`: Add capstyle and joinstyle attributes to Collection class (Issue #8277)
* :ghpull:`9584`: Add returns documentation to fill_between methods
* :ghpull:`9575`: Add some legend handler documentation
-* :ghpull:`9576`: Backport PR #9477 on branch v2.1.x
-* :ghpull:`9572`: Backport PR #9569 on branch v2.1.x
* :ghpull:`9477`: In LogTransform, clip after log, not before.
* :ghpull:`9568`: Add a proper docstring to AutoLocator
* :ghpull:`9569`: Docstring fix.
* :ghpull:`9564`: TST: add test of normed histogram with unequal bins
-* :ghpull:`9561`: Backport PR #9555 on branch v2.1.x
-* :ghpull:`9554`: Backport PR #9549 on branch v2.1.x
+* :ghpull:`9552`: animation: Remove examples keyword
* :ghpull:`9555`: MRG: expand docstring for ``hist``
+* :ghpull:`9469`: FIX: PyQt versions where showing the Qt versions
* :ghpull:`9549`: Fix stale draws on MacOSX backend
-* :ghpull:`9547`: Backport PR #9540 on branch v2.1.x
-* :ghpull:`9542`: Backport PR #9442 on branch v2.1.x
+* :ghpull:`9544`: adding links to color examples and tutorials in the api page
* :ghpull:`9540`: DOC fix set_xticklabels docstring
-* :ghpull:`9304`: Fedora build patches
* :ghpull:`9442`: BUG: Fix ``_extent`` not set in PcolorImage
-* :ghpull:`9533`: Backport PR #9292 on branch v2.1.x
-* :ghpull:`9539`: Backport PR #9363 on branch v2.1.x
* :ghpull:`9363`: Allow invalid limits when panning
-* :ghpull:`9527`: Backport PR #9516 on branch v2.1.x
-* :ghpull:`9505`: Doc draw event details
-* :ghpull:`9526`: Backport PR #9517 on branch v2.1.x
* :ghpull:`9292`: Fix TypeError: a bytes-like object is required, not 'str'
-* :ghpull:`9522`: Backport PR #9504 on branch v2.1.x
-* :ghpull:`9525`: Backport PR #9517 on branch v2.1.x
+* :ghpull:`9530`: DOC Added the colormap references back
* :ghpull:`9517`: Convert slider docstrings to numpydoc
* :ghpull:`9516`: Make colorbar docstring numpydoc
* :ghpull:`9504`: Truncate windows registry entries after null byte.
-* :ghpull:`9500`: Backport PR #9495 on branch v2.1.x
+* :ghpull:`9484`: Force installation of wx from whl, not from pypi.
+* :ghpull:`9300`: Simplify mpl.testing._copy_metadata.
+* :ghpull:`9508`: CI: do not run pushes to the auto-backport branches
+* :ghpull:`9506`: fix typo in rst markup
+* :ghpull:`7739`: WIP: Fix artifact upload
+* :ghpull:`9396`: Fix minor bug in vertex insert
+* :ghpull:`9478`: Added description to widget example programs except Cursor and Menu
+* :ghpull:`9164`: include overspilling axes legends in ax.get_tightbbox
* :ghpull:`9495`: Macosx fixes
-* :ghpull:`9492`: Backport PR #9465 on branch v2.1.x
* :ghpull:`9465`: Avoid dividing by zero in AutoMinorLocator (fixes #8804)
-* :ghpull:`9468`: FIX: provide __ne__ implementation for transforms in py2
-* :ghpull:`9446`: Backport PR #9418 on branch v2.1.x
+* :ghpull:`9425`: Minor fixes to plot_directive.
+* :ghpull:`9486`: Don't leak test.jpeg into cwd while testing.
+* :ghpull:`9490`: No need to fake sets with dicts anymore.
+* :ghpull:`9487`: Improve test_backend_svg.test_determinism.
+* :ghpull:`9483`: DOC Demote container headings one level Artist tutorial (minor)
+* :ghpull:`9447`: Update examples for axisgrid1
+* :ghpull:`9121`: Remove old normalising code from plt.hist
+* :ghpull:`9293`: minor (unrelated) cleanups
+* :ghpull:`9459`: Modified restrictions on ``margins`` method
+* :ghpull:`9473`: Changes to better highlight development-workflow in docs
+* :ghpull:`9423`: Mark the interactive backend test as flaky.
+* :ghpull:`9476`: Get rid of a few unnecessary line continuations in strings.
+* :ghpull:`9435`: Shadow patch now initializes zorder behind argument patch
+* :ghpull:`9472`: documentation fix regarding contour and tricontour (#9088)
+* :ghpull:`9456`: Documented the incompatibility of shrink and cax kwargs in colorbar.
+* :ghpull:`9378`: DOC: fill out dev docs
+* :ghpull:`9464`: Fix multiple unreferenced local variable warnings
+* :ghpull:`9463`: DOC: Re-enable next what's new entries.
+* :ghpull:`9451`: custom legends example
+* :ghpull:`9137`: Adds option for Slider to snap to discrete values
+* :ghpull:`9441`: STY: fix bad indentation
* :ghpull:`9449`: TST: Enable xdist on Appveyor
* :ghpull:`9444`: STY: Remove explicit return in __init__
-* :ghpull:`9431`: Backport PR #9427 on branch v2.1.x
+* :ghpull:`9452`: FIX: Always update tick labels (fixes #9397)
+* :ghpull:`9438`: Remove unused variable 'sign'
* :ghpull:`9418`: TST: Disable faulthandler on Windows if CPython 3.6-3.6.3
* :ghpull:`9440`: Remove reimport of modules
* :ghpull:`9439`: Fix undefined variable 'warnings'
* :ghpull:`9437`: Fix Undefined variable 'symbol'
-* :ghpull:`9430`: Backport PR #9428 on branch v2.1.x
-* :ghpull:`9411`: Backport PR #9410 on branch v2.1.x
+* :ghpull:`9424`: Minor fixes to gallery build.
+* :ghpull:`9432`: Correct minor typo
+* :ghpull:`9420`: Trivial doc fixes.
* :ghpull:`9427`: Fix NameError: name 'exc' is not defined
* :ghpull:`9428`: Fix NameError: name 'ArgumentError' is not defined
-* :ghpull:`9416`: Backport PR #9415 on branch v2.1.x
+* :ghpull:`9409`: TST: Fix flaky tests order
+* :ghpull:`9408`: updating color cycle tutorial
* :ghpull:`9415`: Import time module so that pyplot.pause works
-* :ghpull:`9382`: Backport PR #9343 on branch v2.1.x
* :ghpull:`9410`: BUG: Fix savefig GUI in GTK backend
-* :ghpull:`9399`: Backport PR #9395 on branch v2.1.x
-* :ghpull:`9393`: Don't pass mixed str/bytes inputs to subprocess.
+* :ghpull:`9254`: imshow transparency blend example
+* :ghpull:`9403`: MAINT Documentation on doc is outdated
+* :ghpull:`9367`: Tell user to try installing pkg-config if packages not found
+* :ghpull:`9383`: Increase axes test coverage
+* :ghpull:`9401`: FIX scipy is not a requirement
+* :ghpull:`9392`: Add examples for subplots_axes_and_figures
+* :ghpull:`9394`: [Doc] Add pcolor, contour, imshow to and other small changes
* :ghpull:`9395`: TST: Unblock Appveyor build by patching ``subprocess``
-* :ghpull:`9398`: Backport PR #9347 on branch v2.1.x
* :ghpull:`9347`: Fix backend refactor
-* :ghpull:`9285`: FIX: handle fully masked data
+* :ghpull:`9365`: If PIL.image is missing, tell user to install pillow
+* :ghpull:`9381`: Add tutorials to the Users Guide.
* :ghpull:`9343`: Fix broken link to proxy artists documentation
-* :ghpull:`9364`: Backport PR #9353 on branch v2.1.x
+* :ghpull:`9368`: Add link to Matplotlib paper on citing page
+* :ghpull:`9375`: Document get_{x,y}axis_transform more prominently.
+* :ghpull:`9376`: Fix docstring typo in Rectangle, Ellipse, and Spine.
* :ghpull:`9353`: Fix edgecolor being only applied to first bar.
-* :ghpull:`9352`: Backport PR #9335 on branch v2.1.x
* :ghpull:`9335`: Fix poorly done deprecations in image.py.
-* :ghpull:`9337`: Backport PR #9242 on branch v2.1.x
-* :ghpull:`9338`: Backport PR #9279 on branch v2.1.x
+* :ghpull:`9341`: Update descriptions for images_contours_and_fields
+* :ghpull:`9342`: Fix typo of pixels in legend_handler.py
+* :ghpull:`9333`: Add descriptions for remaining event handling examples
* :ghpull:`9279`: Update doc strings
* :ghpull:`9242`: Errorbar bugfix
-* :ghpull:`9310`: Backport PR #9299 on branch v2.1.x
+* :ghpull:`9323`: Axis user guide
+* :ghpull:`9328`: Fix NameError: name 'os' is not defined
* :ghpull:`9309`: DOC: Update docstring to numpy format for last few functions in transforms
-* :ghpull:`6969`: CI: add appveyor script to build Windows wheels
-* :ghpull:`9308`: Backport PR #9295 on branch v2.1.x
+* :ghpull:`9291`: Doc updates
* :ghpull:`9299`: Restore better error message on std::runtime_error.
* :ghpull:`9295`: In text, warn and return instead of raise exception for non-finite x, y
-* :ghpull:`9283`: Backport PR #9277 on branch v2.1.x
-* :ghpull:`9307`: Backport PR #9303 on branch v2.1.x
* :ghpull:`9303`: Don't use pytest.filterwarings, which needs pytest>=3.2.
-* :ghpull:`9297`: Backport PR #9289 on branch v2.1.x
* :ghpull:`9289`: Throw std::runtime_exception instead of char*.
-* :ghpull:`9290`: Backport PR #9268 on branch v2.1.x
* :ghpull:`9268`: Fix documents of semilogx and semilogy.
-* :ghpull:`9287`: Backport PR #9286 on branch v2.1.x
* :ghpull:`9286`: Ask Appveyor to ignore certain branches.
* :ghpull:`9277`: plot_surface docstring + edge case fix
-* :ghpull:`9270`: Fix C++ warnings
+* :ghpull:`9278`: Remove scatter_profile example.
* :ghpull:`9272`: Include the default of "plot_pre_code" of the plot directive in the documentation
-* :ghpull:`9258`: Remove four unused variables in src/_path.h.
-* :ghpull:`7335`: fix the stack remove error
-* :ghpull:`6949`: Value checking the numpoints argument to be a whole number.
-* :ghpull:`6161`: Fix #5456: Keep margins <= .5 in tight_layout
-* :ghpull:`8602`: doc: State default for legend's ``markerfirst``
-* :ghpull:`8605`: Add mpl.contour to api docs; minor fix to docstring.
-Issues (78):
+Issues (315):
+* :ghissue:`10174`: Rendering problems with FigureCanvasWxAgg on OSX
+* :ghissue:`9035`: savefig does put the correct dpi in the metadata of jpeg
+* :ghissue:`5750`: whish for 2016: matplotlib can use only Pillow 3.0+ to create animated GIF
+* :ghissue:`9717`: gtk3agg not working with python 3.6.3 & cairocffi 1.10.0
+* :ghissue:`6973`: Running pytest against non develop install fails
+* :ghissue:`6836`: DOC: missing second y-axis in ``demo_parasite_axes2``
+* :ghissue:`5428`: Change ``setup.py install`` recommendation to ``pip install .``
+* :ghissue:`4978`: Use higher-resolution icons on HiDPI-friendly backends
+* :ghissue:`4907`: mpl_toolkits not installed with ``pip install -e .``
+* :ghissue:`3446`: Add note about CHM security issues
+* :ghissue:`3267`: Why does rec2csv ignore float precision?
+* :ghissue:`10343`: Missing keys in matplotlibrc.template to move x-axis labels to top
+* :ghissue:`10267`: matplotlibrc: new entry for placing y-axis tick label on Right or Left hand side.
+* :ghissue:`10384`: maybe bugs in ax.annotate when get bbox coordinates(matplot-2.1.0)?
+* :ghissue:`7155`: use categorical in demos
+* :ghissue:`6802`: Discrete scatter?
+* :ghissue:`9974`: toolbar.update() breaks history
+* :ghissue:`10373`: cannot import matplotlib.pyplot
+* :ghissue:`10368`: constrained layout uneven gridspec layouts...
+* :ghissue:`5382`: imsave and imshow ignore vmin/vmax
+* :ghissue:`9391`: imshow doesn't normalize the color range in RGB images
+* :ghissue:`10372`: Floating point image RGB values must be in the 0..1 range
+* :ghissue:`10349`: Rectangle patch added to a datetime x-axis is plotted with the wrong width
+* :ghissue:`10344`: matplotlib can not handle pandas dataframe correctly when the label of the columns/index is strings but the actual data are float.
+* :ghissue:`8308`: Too many open files: '/usr/lib/python3.6/site-packages/matplotlib/backends/web_backend/mpl.js'
+* :ghissue:`10341`: syntax error without a space
+* :ghissue:`10338`: line.set_drawstyle fails to produce step-like line
+* :ghissue:`8852`: Rolling image if the FFMpegWriter dpi setting does not match that specified when a figure is created
+* :ghissue:`10287`: _tkinter.TclError: can't invoke "wm" command: application has been destroyed
+* :ghissue:`7640`: Some properties are set lazily and behaved inconsistently
+* :ghissue:`4346`: Tick label padding on first y-axis changes when adding a second y-axis
+* :ghissue:`5560`: Secondary_y axis default limit (top) & bound (upper) not matching ticks
+* :ghissue:`8823`: colorbar might shrink plots if used with twinx
+* :ghissue:`10318`: Matplotlib Sample Outdated?
+* :ghissue:`8736`: Figure resize when saving a plot
+* :ghissue:`10216`: TST: gdb has been removed from Travis
+* :ghissue:`10290`: Figure rotation using Axes.text () with eps backend
+* :ghissue:`10300`: How to use triplot to make a multi-color line of the triangular
+* :ghissue:`8820`: Regression with numpy ~~1.13~~ 1.14 for colorbars of boolean data
+* :ghissue:`5968`: Accepting pathlib.Path as path inputs?
+* :ghissue:`10285`: Picture in online documentation for multi_image.py is cut off at bottom
+* :ghissue:`10229`: ENH: Add imageio as an option for saving animated gifs
+* :ghissue:`10288`: issue with version of six
+* :ghissue:`10151`: Question on docstring and signature of Axes.stem()
+* :ghissue:`10073`: datetime and sub-second resolution plotting
+* :ghissue:`10277`: error import matplotlib.pyplot as plt
+* :ghissue:`10265`: ENH tripcolor with explicit RGB colors
+* :ghissue:`10262`: OrderedDict legends no longer work 2.1
+* :ghissue:`10162`: Increase of Computation time from 2.1.0 to 2.1.1
+* :ghissue:`6884`: MPLRC environment variable to set rcparams
+* :ghissue:`10252`: Can't Import Matplotlib.pyplot - Anaconda 4.4, Python 3.6 & Windows 10
+* :ghissue:`10072`: imshow doesn't properly display some images
+* :ghissue:`7797`: Quiver barb size not correct on some arches (ppc64, ppc64le...)
+* :ghissue:`5873`: Useless Dvi dispatch docs in dvi_read api docs
+* :ghissue:`10251`: I have determined a color for each data point pragmatically and I have 11 set of x(time) and y(subjects) and I want to make plots for these values(x values) and these colors will be used for the data points on the plots.
+* :ghissue:`5568`: Latin Modern support?
+* :ghissue:`5208`: MathTex Font error
+* :ghissue:`5250`: Font-weight range seems wrong
+* :ghissue:`3531`: sundry documentation issues
+* :ghissue:`6716`: ``cleanup`` decorator implemented in an obfuscated way
+* :ghissue:`9160`: blank space vs. white space
+* :ghissue:`524`: improving mpl docs and accessibility for API users
+* :ghissue:`4313`: Document installation with pip for Python3
+* :ghissue:`6626`: Error in example http://matplotlib.org/examples/misc/multiprocess.html
+* :ghissue:`8152`: test_fontconfig_fonts error on Linux wheel testing
+* :ghissue:`7917`: Docstring of EventCollection cuts mid-sentence.
+* :ghissue:`9906`: Incorrect alpha compositing using "matplotlib.pyplot.imshow".
+* :ghissue:`10069`: Add what's new entry for new color comparision method
+* :ghissue:`10221`: savefig() does not support PosixPath object for file name
+* :ghissue:`10205`: matplotlib.
+* :ghissue:`9040`: 'Figure' object has no attribute '_original_dpi'
+* :ghissue:`5703`: Python 2.6 string format syntax errors in matplotlib 1.4.3
+* :ghissue:`10163`: savefig with eps draws a hidden axis
+* :ghissue:`2508`: Relim not working correctly with images
+* :ghissue:`10140`: Qt5Agg eats 100% CPU when plotting with block=True in interactive mode
+* :ghissue:`10122`: Color bar has multiple labels for 0 if matplotlib.colors.SymLogNorm is used
+* :ghissue:`10130`: Bar plot does not work
+* :ghissue:`10135`: matplotlib installation from source and numpy incompatibility
+* :ghissue:`10123`: memory leak with histograms
+* :ghissue:`9887`: polar limits not snapping to 0
+* :ghissue:`9429`: Undefined name ``baseline``?
+* :ghissue:`8547`: Allow scalar ``weights`` parameter to ``hist`` method
+* :ghissue:`10115`: pcolor vs pcolorfast: unexpected white edgecolors using RGBA-alike colormaps
+* :ghissue:`9200`: Documentation: File doc/users/whats_new/README does not exist
+* :ghissue:`10078`: updating to release 2.1.1 causes pip to stop working
+* :ghissue:`9597`: Plot with ``drawstyle="steps"`` fails if x and y are empty
+* :ghissue:`8872`: Build errors with existing qhull
+* :ghissue:`8390`: Can't install matplotlib from source due to recent addition of QHULL_LIB_CHECK to src/qhull_wrap.c
+* :ghissue:`10053`: Duplicate legend labels with different colors can often result in an error.
+* :ghissue:`10056`: Only one legend entry is rendered for items with the same label and color
+* :ghissue:`10037`: Documentation mistake in the pyplot introductory tutorial
+* :ghissue:`9973`: Slightly misleading errorbar docs that interferes with attempt to animate errorbar
+* :ghissue:`10012`: TST: ``mlab.cohere`` needs a test
+* :ghissue:`9996`: Remove badges from website side bar
+* :ghissue:`8493`: Colorbar documentation: ``anchor`` not recognized as possible argument to plt.colorbar
+* :ghissue:`8668`: handles keyword argument not documented in the help of legend
+* :ghissue:`10015`: TKWindow unrecognized selector error
+* :ghissue:`5507`: DLL load failed: cannot find specified procedure when importing matplotlib.pyplot
+* :ghissue:`7939`: Mathtext.py glyph mapping fails for StixFonts (UnicodeFonts subclass)
+* :ghissue:`4167`: No SVG/PDF export when useing latex package cmbrigth
+* :ghissue:`4109`: WXAgg embedded navigation zoom, home, back not working
+* :ghissue:`3848`: PGF Backend with LuaLaTeX: Permission denied error
+* :ghissue:`10007`: nonposx and nonposy
+* :ghissue:`9940`: Deprecate Axes as a valid pyplot.axes() argument type
+* :ghissue:`10005`: matplotlib.pyplot.figlegend not working with Patches
+* :ghissue:`10003`: Typo in mlab.cohere
+* :ghissue:`9988`: Contours are not removed correctly when using clabel with manual
+* :ghissue:`9185`: Problem in Scatter-Piecharts example
+* :ghissue:`9856`: Python crashes when closing figures using TkAgg on Mac OS
+* :ghissue:`9977`: Error shows when I import matplotlib after installation
+* :ghissue:`9935`: QT5 AttributeError pixelDelta
+* :ghissue:`9943`: toolmanager_sgskip + tkagg example couples "GroupHide" toggle with Pan and (second) Zoom
+* :ghissue:`8347`: font_manager.py Bug
+* :ghissue:`4575`: nbagg canvas size
+* :ghissue:`9983`: ImportError: ZLIB_1.2.9 not found
+* :ghissue:`9982`: ``````'module' object has no attribute 'subplots'`````` when importing with ``````__import__``````
+* :ghissue:`9954`: import matplotlib.pyplot as plt, ImportError: libGL.so.1: cannot open shared object file: No such file or directory
+* :ghissue:`9980`: Cannot update to MPL v2.1.1 on Anaconda
+* :ghissue:`7502`: Rely on Sphinx' "any" role to make docstrings more legible
+* :ghissue:`9976`: ax.set_aspect triggers useless warnings
+* :ghissue:`9965`: subplots ignores figsize argument
+* :ghissue:`9863`: Y-axis value of a seaborn heatmap is reversed when home icon or H button is pushed
+* :ghissue:`9944`: Acorr() creates two labels
+* :ghissue:`9939`: Matplotlib scatterplot does not work with pandas timestamp/datetime format
+* :ghissue:`2140`: Make Cmd-W close the window using QT4 on OS X
+* :ghissue:`4916`: Cannot use a timedelta Rectangle width with a datetime axis
+* :ghissue:`5798`: Use Makefile for sphinx build
* :ghissue:`9739`: doc inconsistency: definition of "aspect"
+* :ghissue:`9018`: DayLocator is returning incorrect times around daylights switch over
+* :ghissue:`7388`: Example examples/misc/multiprocess.py may not be python3 compatible?
+* :ghissue:`9898`: using ``xs=..., ys=...`` on ax.scatter 2D raises error
+* :ghissue:`9864`: Missing ``normed`` parameter description in matplotlib.pyplot.hist
* :ghissue:`9896`: Simple documentation typo
+* :ghissue:`9895`: Sequential colormaps doesn't reach 100 lightness (pure white)
+* :ghissue:`9893`: Bug with setting minor tick marks on plots
+* :ghissue:`9890`: how to autoscale y axis in different [x1,x2] range?
+* :ghissue:`9835`: Shift+Arrow key events not detected in osx backend
+* :ghissue:`9879`: Usage FAQ section missing in 2.1.0 documentation
+* :ghissue:`9786`: Consistent Documentation Guide for Docstrings
+* :ghissue:`2259`: dates.date2num no longer works with numpy.datetime64
+* :ghissue:`9868`: Infinite number of /tmp/matplotlib-* dirs on machine without HOME env variable
+* :ghissue:`8039`: "savefig" bug with unicode characters (version 2.0.0)
+* :ghissue:`9834`: console gets stuck when creating figure
+* :ghissue:`9866`: ValueError: ordinal must be >= 1
+* :ghissue:`9130`: axes.get_tightbbox doesn't include legends...
+* :ghissue:`9302`: ENH: Switch from verbose to logging for warnings and logging
+* :ghissue:`9531`: Improve Colormap example.
+* :ghissue:`9838`: YearLocator should prefer ticks at the turn of the decade
+* :ghissue:`9784`: plot(2D, 2D) will cycle through the input columns even with non-matching shapes
* :ghissue:`9719`: Appveyor passing, even when tests are failing
+* :ghissue:`9849`: Crash when scroll on figure
+* :ghissue:`1257`: Support for hierarchical labeling of bar-plots
+* :ghissue:`9833`: Visibility of pane edges in 3d figures
+* :ghissue:`9840`: quiver angles array UnboundLocalError: local variable 'lengths' referenced before assignment
+* :ghissue:`9828`: Can't pickle plots with date axes (from pandas)
+* :ghissue:`9823`: Missing __init__.py file in mpl_toolkits
+* :ghissue:`9822`: Cloud any one experience the below error while installing 'pyplot' package
+* :ghissue:`9788`: font_manager calls nonexistent method FT2Font.get_fontsize
* :ghissue:`9436`: Instance of 'TextBox' has no 'observers' member?
+* :ghissue:`9820`: Borders appear only for the first bar in the bar plot.
* :ghissue:`9744`: *frac* in set_thetagrids() doesn't work
* :ghissue:`9819`: Multi-page PDF file size jumps since 2.0.0
* :ghissue:`9818`: edgecolor arg set to scalar applies to the first bar in bar() method
+* :ghissue:`9610`: provide converters for datetime64 types
+* :ghissue:`9815`: svg backend truncates output size to integer, which it doesn't need to (and pdf backend doesn't)
* :ghissue:`9785`: ``zorder=None`` not properly handled
* :ghissue:`9735`: 2.1.0 sdist does not allow building docs
+* :ghissue:`9809`: legend() fails when data set with empty error bars has been plotted
* :ghissue:`9808`: inconsistent hatch and border color in barh in matplotlib 2.1.0
+* :ghissue:`7200`: Default locator for log-scale messes up minor ticks sometimes
+* :ghissue:`9798`: PdfPages and PdfFile closing error
+* :ghissue:`5541`: errorbar of (x,y) data on semilogx plot with NaN in x throws ValueError if errorbar() command initializes the axes
+* :ghissue:`9791`: Contour plot doesn't show if setting "manual=True" in plt.clabel()
+* :ghissue:`9780`: Dotted grid lines have different individual dot sizes in pdf files
+* :ghissue:`5898`: Error on datetime data in stacked histogram plot
* :ghissue:`8982`: Backend MacOSX keyboard not working
+* :ghissue:`9771`: Error in matplotlib with datetime64 with pandas 0.21.0
* :ghissue:`9256`: reading truncated png can segfault python
* :ghissue:`9664`: Change in behavior of axis.tick_left() with shared axes from 2.0 to 2.1
* :ghissue:`9358`: zoom/pan stack bug in 2.1.0
* :ghissue:`9720`: plt.pcolormesh stopped working with Masked Arrays
+* :ghissue:`1668`: Support .otf fonts
* :ghissue:`9758`: plt.ginput broken on 2.1.0: plot does not appear
+* :ghissue:`2203`: Allow negative radial grid values in polar.py
+* :ghissue:`6026`: bad behaviour on DateFormatter on y-axis --> polar vs normal plot
* :ghissue:`9742`: clabel raises KeyError with level on boundary since matplotlib 2.1.0
+* :ghissue:`9669`: Make forward=True default consistent across size changing methods
+* :ghissue:`9751`: inconsistency in the algorithm for calculating cross spectral densities
+* :ghissue:`5837`: Cannot start tkinter-based example on Python 3.5.1 using Mac Homebrew for Python and Tk
+* :ghissue:`2422`: PDF backend on OS X 10.8 creates PDFs that are viewable in Adobe Reader, but not in Preview or QuickLook
+* :ghissue:`9740`: doc infelicities on subaxes
* :ghissue:`9651`: "block" keyword unrecognized in 2.1 in notebook backend
* :ghissue:`9716`: Large size of plots saved as pdf
-* :ghissue:`9729`: plt.pause() with notebook backend causes error
+* :ghissue:`9741`: Missing arguments in call to exception_handler
+* :ghissue:`9729`: plt.pause() with notebook backend causes error
* :ghissue:`8122`: keyword labelrotation is not recognized
* :ghissue:`9655`: Segmentation fault when starting a timer a second time (MacOS X backend)
* :ghissue:`9699`: IndexError thrown by pyplot.legend()
@@ -263,54 +777,116 @@ Issues (78):
* :ghissue:`9700`: Subsequent calls to plt.scatter with different categories raise ValueError
* :ghissue:`9702`: Broken pdf export when using genuine TeX (Missing encode)
* :ghissue:`9701`: Bars are not visible in bar plot when log scale is enabled
+* :ghissue:`9688`: ValueError: Invalid RGBA argument: nan
* :ghissue:`9548`: failure on import due to IOError writing font cache
+* :ghissue:`9674`: is FigureCanvas.blit(... bbox=box) ever used?
+* :ghissue:`9671`: Style configuration changing behavior of savefig
+* :ghissue:`9663`: Spelling error in gallery (agg_oo_sgskip.html)
* :ghissue:`9659`: patches.Arc objects randomly drawing the full ellipse
* :ghissue:`9380`: Cannot import pyplot. NameError: 'FigureManagerWebAgg' is not defined
+* :ghissue:`3476`: File save dialog output goes to python terminal on OS X
* :ghissue:`8623`: fill_between incorrect with log y-axis and value 0
+* :ghissue:`4450`: shared axes switch to log scale
* :ghissue:`9320`: 2.1 figure.legend broken
+* :ghissue:`9635`: matplotlib spline adjustment changes tick label visibility
* :ghissue:`9388`: Mouse events have incorrect inaxes/data properties when axes overlap (matplotlib 2.1.0)
* :ghissue:`9457`: ax.fill_between broken for log scale and values below zero
* :ghissue:`9558`: Inconsistency between AutoLocator and AutoDateLocator
* :ghissue:`9288`: Histograms disappear with logarithmic y-axis
* :ghissue:`9628`: Histogram missing in Matplotlib 2.1.0
+* :ghissue:`9609`: matplotlib color not equal to the setting
* :ghissue:`9611`: Unexpected behaviour with string input to .plot and .fill_between
+* :ghissue:`9626`: Categorical plot example not working in 2.02.
+* :ghissue:`9348`: Matplotlib introduction is unattributed
* :ghissue:`7158`: Arrays are not equal in 2.0.0b4 testsuite on Fedora rawhide/aarch64 (ARM v8 64bit)
+* :ghissue:`9520`: XKCD context manager not resetting anymore in 2.1
+* :ghissue:`3491`: What's the best way to make a matplotlib colormap mutable?
+* :ghissue:`9541`: Broken Basemap rotpole projection
+* :ghissue:`9591`: Unable to draw horizontal arrow using annotation
+* :ghissue:`9592`: Scientific notation digits on figure
+* :ghissue:`9590`: Scientific format digits on figure
* :ghissue:`9557`: Behavior of hist() with normed=True changes from v2.0 to v2.1
* :ghissue:`9585`: Cannot write JPG images anymore with Pillow 4.2
+* :ghissue:`9581`: pixel sizes uneven with ImageGrid
+* :ghissue:`9577`: Plotting pcolor with datetime along coordinate fails with TypeError: invalid type promotion
+* :ghissue:`9578`: matplotlib 2.1.0 "stable"
+* :ghissue:`9467`: Error on updating to matplotlib 2.1.0
+* :ghissue:`9249`: basemap pcolormesh warning with matplotlib 2.0
+* :ghissue:`9443`: Cartopy Border Plotting Fails on 2.1 Only
+* :ghissue:`9567`: Possible bug in tight_layout?
+* :ghissue:`9560`: Can you add some speed speed to matplotlib.pyplot.stem?
+* :ghissue:`9537`: No Bugs at all
* :ghissue:`8282`: changing facecolor to 'none' prevents updating canvas
+* :ghissue:`3708`: examples/cursor.py gives RuntimeError on mac osx
+* :ghissue:`8090`: Spectrogram of large arrays behaves badly on MacOSX backend
* :ghissue:`6538`: On armv7hl, some get_cursor_data calls return 0 instead of None.
+* :ghissue:`9545`: plot_surface gives blank figure with log scale for axes
* :ghissue:`8426`: PcolorImage does not set ``_extent``
+* :ghissue:`9538`: How to avoid override pie
* :ghissue:`9406`: 2.1.0 serious regression in Qt5 backend
-* :ghissue:`9361`: 2.1 change - Axis Limit Error
+* :ghissue:`9361`: 2.1 change - Axis Limit Error
* :ghissue:`9390`: Save to .pdf doesn't work in 2.1.0
* :ghissue:`9485`: FileNotFoundError while import matplotlib (maybe pyplot)
* :ghissue:`9332`: Qt backend figureoptions.py does not work due to change in image.py
-* :ghissue:`9491`: TextBox widget on MacOSX fails with RuntimeError: Cannot get window extent w/o renderer
+* :ghissue:`6516`: savefig to pdf: 'str' object has no attribute 'decode'
+* :ghissue:`9499`: A 3D object appears in front of another object, even though it is physically behind it.
+* :ghissue:`5474`: tight_layout puts axes title below twiny xlabel
+* :ghissue:`9183`: X-axis doesn't show entirely
* :ghissue:`8814`: 3D plot camera-rotation does not update with mouse movement when using the MacOS backend
+* :ghissue:`9491`: TextBox widget on MacOSX fails with RuntimeError: Cannot get window extent w/o renderer
+* :ghissue:`9496`: barh edgecolor and hatch are not applied to all bars
* :ghissue:`8804`: Division by zero in AutoMinorLocator
+* :ghissue:`9480`: QWidget raise above canvas
+* :ghissue:`9489`: Opening an interactive figure doesn't work on MacOSX backend with matplotlib v2.1
+* :ghissue:`7092`: pyplot.scatter method is not working with Iterator types of an input arguments
+* :ghissue:`8131`: bad error message from pyplot.plot
+* :ghissue:`8333`: Rely on numpy to properly normalize histograms with unequal bin widths
+* :ghissue:`9334`: Remove restriction in ``plt.margins(m)`` to 0 <= m <= 1
+* :ghissue:`9474`: [TST] qt5 backend test sometimes failing
+* :ghissue:`9377`: Shadow applied to a simple patch does not show
+* :ghissue:`9355`: DOC: developer tips guide incomplete (for complete newbie)
+* :ghissue:`2539`: boxplot treats iterables differently by type
+* :ghissue:`5630`: Ipe backend
* :ghissue:`9455`: ticklabel and gridlines in polar projection in v2.1.0
+* :ghissue:`9088`: Number of levels in contour can be larger than the requested number
+* :ghissue:`9471`: AttributeError: 'str' object has no attribute 'zorder'
+* :ghissue:`8941`: Colorbar: 'shrink' not recognized at argument to colorbar when cax is specified
+* :ghissue:`9466`: Plot window crashes when the 'Edit axes' button is pressed'
+* :ghissue:`8411`: Saving figures as PDF miss aligns rotated labels
+* :ghissue:`9397`: Incorrect labels returned with custom formatter and locator
+* :ghissue:`9453`: how to remove the black bounding box of legend?
+* :ghissue:`8193`: eventplot throws exception when using color different than one of {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}
+* :ghissue:`8883`: Incorrect example for interactive plotting in Matplotlib Usage FAQ
+* :ghissue:`7527`: Locators raise unclear exceptions on MappingView input
+* :ghissue:`8769`: seeing issue on six.py import name in matplotlib on python3.4
+* :ghissue:`9182`: Text bug
+* :ghissue:`9326`: Non-reproducible line in Image tutorial
+* :ghissue:`8796`: Varying results depending on freetype version
* :ghissue:`9412`: pyplot.pause doesn't import the time module but uses it (v2.1.0)
+* :ghissue:`9407`: 2.1.0: Cannot save figures in GTK backend
* :ghissue:`9176`: Appveyor build failing
+* :ghissue:`9331`: ``matplotlib.pyplot`` is missing from intersphinx
* :ghissue:`9280`: imshow errors when plotting completely masked array
+* :ghissue:`9349`: user's guide seriously denuded...
+* :ghissue:`9369`: 2.1 - new problem with log ax.transData
+* :ghissue:`9371`: Toolbar issue: Python3, wx4, windows only
+* :ghissue:`9366`: MPL 2.1 cannot construct figure with figsize
* :ghissue:`9351`: mpl 2.1 barcharts edgecolor and linewidth only apply to first bar
+* :ghissue:`9360`: When use a large data to draw a graph, It shows abnormal..
+* :ghissue:`9357`: ENH: Pickle backend
* :ghissue:`9345`: matplotlib 2.1.0, backend macosx: need _BackendMac, got FigureManagerMac
+* :ghissue:`9344`: ImportError: No module named functools_lru_cache
* :ghissue:`9241`: Errorbar plot with first value masked raises TypeError
+* :ghissue:`9322`: Usage Guide has description "circled in green" for Axis from v 1.5
+* :ghissue:`4728`: Sort out how to auto-nbconvert notebooks as part of doc build
* :ghissue:`3707`: re-write release guide
+* :ghissue:`9315`: Can't exit the Drawing board process on Ubuntu
+* :ghissue:`7422`: Document that python setup.py develop add the symlink to easy-install.pth
+* :ghissue:`5256`: 1.5.0~rc2: unittest failures/errors on (debian) arm64
+* :ghissue:`9301`: Panning with mouse using Axes3d in plt.show() is laggy
+* :ghissue:`9267`: NaN positional argument to ``ax.text`` fails silently notebook backend.
+* :ghissue:`9294`: Segmentation fault (core dumped) when import matplotlib.pyplot
+* :ghissue:`9235`: Incorrect fill_betweenx interpolation
* :ghissue:`8706`: Bug with 3D graphing
-* :ghissue:`7358`: PEP8: making travis run pep8 on diff instead of comparing the total number of violation to be more robust.
-* :ghissue:`6976`: LaTeX wrong symbol displayed for sup- and subscript
-* :ghissue:`9206`: Interactive mode frozen on python 3.6.2 (Windows 7)
-* :ghissue:`6572`: segfault saving a high dpi png
-* :ghissue:`9210`: ValueError: ordinal must be >= 1 by plotting the index and its SMA
-* :ghissue:`7050`: Segmentation fault inside _backend_agg.so
-* :ghissue:`9017`: Getting "No module named '_tkinter'" error
-* :ghissue:`6420`: matplotlib Qt5Agg backend error: 'figure' is an unknown keyword argument
-* :ghissue:`5421`: Rectangle patch constructor fails with units
-* :ghissue:`4020`: Document default key-bindings
-* :ghissue:`5950`: Issues with Numpy 1.11 release candidate
-* :ghissue:`7319`: Alternative dev install instructions
-* :ghissue:`4936`: Memory leak in NavigationToolbar2.mouse_over
-* :ghissue:`5689`: Mac: Save button not working on 1.5.0 or 2.x with backend.qt4 in ipython 4
-* :ghissue:`6411`: Rendered text images do not exactly overlap for same text content
-* :ghissue:`7168`: Future warning: elementwise comparison failed
-* :ghissue:`7851`: very small errors in test suite, py3.6 and 3.5
+* :ghissue:`9276`: Discrepancy between svg and png plots
+* :ghissue:`9273`: plot() mfc doesn't accept RGBA color
diff --git a/doc/users/next_whats_new/180112-AL-pillowanim.rst b/doc/users/next_whats_new/180112-AL-pillowanim.rst
deleted file mode 100644
index 851af739847a..000000000000
--- a/doc/users/next_whats_new/180112-AL-pillowanim.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-Writing animations with Pillow
-------------------------------
-It is now possible to use Pillow as an animation writer. Supported output
-formats are currently gif (Pillow>=3.4) and webp (Pillow>=5.0). Use e.g. as ::
-
- from __future__ import division
-
- from matplotlib import pyplot as plt
- from matplotlib.animation import FuncAnimation, PillowWriter
-
- fig, ax = plt.subplots()
- line, = plt.plot([0, 1])
-
- def animate(i):
- line.set_ydata([0, i / 20])
- return [line]
-
- anim = FuncAnimation(fig, animate, 20, blit=True)
- anim.save("movie.gif", writer=PillowWriter(fps=24))
- plt.show()
diff --git a/doc/users/next_whats_new/2017-08-31_discrete-sliders.rst b/doc/users/next_whats_new/2017-08-31_discrete-sliders.rst
deleted file mode 100644
index 73a9cddfab26..000000000000
--- a/doc/users/next_whats_new/2017-08-31_discrete-sliders.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-Slider UI widget can snap to discrete values
---------------------------------------------
-
-The slider UI widget can take the optional argument *valstep*. Doing so
-forces the slider to take on only discrete values, starting from *valmin* and
-counting up to *valmax* with steps of size *valstep*.
-
-If *closedmax==True*, then the slider will snap to *valmax* as well.
diff --git a/doc/users/next_whats_new/2017-10-19_axes_legend_in_tightbbox.rst b/doc/users/next_whats_new/2017-10-19_axes_legend_in_tightbbox.rst
deleted file mode 100644
index 7991c224aab3..000000000000
--- a/doc/users/next_whats_new/2017-10-19_axes_legend_in_tightbbox.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Axes legends now included in tight_bbox
----------------------------------------
-
-Legends created via ``ax.legend`` can sometimes overspill the limits of
-the axis. Tools like ``fig.tight_layout()`` and
-``fig.savefig(bbox_inches='tight')`` would clip these legends. A change
-was made to include them in the ``tight`` calculations.
diff --git a/doc/users/next_whats_new/2017-10_capstyle.rst b/doc/users/next_whats_new/2017-10_capstyle.rst
deleted file mode 100644
index 0e7cf6838686..000000000000
--- a/doc/users/next_whats_new/2017-10_capstyle.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-``capstyle`` and ``joinstyle`` attributes added to `Collection`
----------------------------------------------------------------
-
-The `Collection` class now has customizable ``capstyle`` and ``joinstyle``
-attributes. This allows the user for example to set the ``capstyle`` of
-errorbars.
diff --git a/doc/users/next_whats_new/2017-11-1_figure_align_labels.rst b/doc/users/next_whats_new/2017-11-1_figure_align_labels.rst
deleted file mode 100644
index 8128512c1576..000000000000
--- a/doc/users/next_whats_new/2017-11-1_figure_align_labels.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-xlabels and ylabels can now be automatically aligned
-----------------------------------------------------
-
-Subplot axes ``ylabels`` can be misaligned horizontally if the tick labels
-are very different widths. The same can happen to ``xlabels`` if the
-ticklabels are rotated on one subplot (for instance). The new methods
-on the `Figure` class: `Figure.align_xlabels` and `Figure.align_ylabels`
-will now align these labels horizontally or vertically. If the user only
-wants to align some axes, a list of axes can be passed. If no list is
-passed, the algorithm looks at all the labels on the figure.
-
-Only labels that have the same subplot locations are aligned. i.e. the
-ylabels are aligned only if the subplots are in the same column of the
-subplot layout.
-
-Alignemnt is persistent and automatic after these are called.
-
-A convenience wrapper `Figure.align_labels` calls both functions at once.
-
-.. plot::
-
- import matplotlib.gridspec as gridspec
-
- fig = plt.figure(figsize=(5, 3), tight_layout=True)
- gs = gridspec.GridSpec(2, 2)
-
- ax = fig.add_subplot(gs[0,:])
- ax.plot(np.arange(0, 1e6, 1000))
- ax.set_ylabel('Test')
- for i in range(2):
- ax = fig.add_subplot(gs[1, i])
- ax.set_ylabel('Booooo')
- ax.set_xlabel('Hello')
- if i == 0:
- for tick in ax.get_xticklabels():
- tick.set_rotation(45)
- fig.align_labels()
diff --git a/doc/users/next_whats_new/2017-12-04-AL-pgi.rst b/doc/users/next_whats_new/2017-12-04-AL-pgi.rst
deleted file mode 100644
index 4f774bef6989..000000000000
--- a/doc/users/next_whats_new/2017-12-04-AL-pgi.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-PGI bindings for gtk3
----------------------
-
-The GTK3 backends can now use PGI_ instead of PyGObject_. PGI is a fairly
-incomplete binding for GObject, thus its use is not recommended; its main
-benefit is its availability on Travis (thus allowing CI testing for the gtk3agg
-and gtk3cairo backends).
-
-The binding selection rules are as follows:
-- if ``gi`` has already been imported, use it; else
-- if ``pgi`` has already been imported, use it; else
-- if ``gi`` can be imported, use it; else
-- if ``pgi`` can be imported, use it; else
-- error out.
-
-Thus, to force usage of PGI when both bindings are installed, import it first.
-
-.. _PGI: https://pgi.readthedocs.io/en/latest/
-.. _PyGObject: http://pygobject.readthedocs.io/en/latest/#
diff --git a/doc/users/next_whats_new/2017-12-05_cividis_colormap.rst b/doc/users/next_whats_new/2017-12-05_cividis_colormap.rst
deleted file mode 100644
index e381c04b9697..000000000000
--- a/doc/users/next_whats_new/2017-12-05_cividis_colormap.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-Cividis colormap
-----------------------------
-
-A new dark blue/yellow colormap named 'cividis' was added. Like viridis, cividis is perceptually uniform and colorblind friendly. However, cividis also goes a step further: not only is it usable by colorblind users, it should actually look effectively identical to colorblind and non-colorblind users. For more details, see Nunez J, Anderton C, and Renslow R. (submitted). Optimizing colormaps with consideration for color vision deficiency to enable accurate interpretation of scientific data."
-
-.. plot::
-
- import matplotlib.pyplot as plt
- import numpy as np
-
- fig, ax = plt.subplots()
- pcm = ax.pcolormesh(np.random.rand(32,32), cmap='cividis')
- fig.colorbar(pcm)
\ No newline at end of file
diff --git a/doc/users/next_whats_new/20171119-transforms-repr.rst b/doc/users/next_whats_new/20171119-transforms-repr.rst
deleted file mode 100644
index 2389141b6492..000000000000
--- a/doc/users/next_whats_new/20171119-transforms-repr.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-Improved `repr` for `Transform`\s
----------------------------------
-
-`Transform`\s now indent their `repr`\s in a more legible manner:
-
-.. code-block:: ipython
-
- In [1]: l, = plt.plot([]); l.get_transform()
- Out[1]:
- CompositeGenericTransform(
- TransformWrapper(
- BlendedAffine2D(
- IdentityTransform(),
- IdentityTransform())),
- CompositeGenericTransform(
- BboxTransformFrom(
- TransformedBbox(
- Bbox(x0=-0.05500000000000001, y0=-0.05500000000000001, x1=0.05500000000000001, y1=0.05500000000000001),
- TransformWrapper(
- BlendedAffine2D(
- IdentityTransform(),
- IdentityTransform())))),
- BboxTransformTo(
- TransformedBbox(
- Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
- BboxTransformTo(
- TransformedBbox(
- Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
- Affine2D(
- [[ 100. 0. 0.]
- [ 0. 100. 0.]
- [ 0. 0. 1.]])))))))
diff --git a/doc/users/next_whats_new/2017_10_10_logging.rst b/doc/users/next_whats_new/2017_10_10_logging.rst
deleted file mode 100644
index deed85cbf4f9..000000000000
--- a/doc/users/next_whats_new/2017_10_10_logging.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-Python logging library used for debug output
---------------------------------------------
-
-Matplotlib has in the past (sporadically) used an internal
-verbose-output reporter. This version converts those calls to using the
-standard python `logging` library.
-
-Support for the old ``rcParams`` ``verbose.level`` and ``verbose.fileo`` is
-dropped.
-
-The command-line options ``--verbose-helpful`` and ``--verbose-debug`` are
-still accepted, but deprecated. They are now equivalent to setting
-``logging.INFO`` and ``logging.DEBUG``.
-
-The logger's root name is ``matplotlib`` and can be accessed from programs
-as::
-
- import logging
- mlog = logging.getLogger('matplotlib')
-
-Instructions for basic usage are in :ref:`troubleshooting-faq` and for
-developers in :ref:`contributing`.
-
-.. _logging: https://docs.python.org/3/library/logging.html
diff --git a/doc/users/next_whats_new/2017_11_15_datetime64.rst b/doc/users/next_whats_new/2017_11_15_datetime64.rst
deleted file mode 100644
index ac9df4e497ed..000000000000
--- a/doc/users/next_whats_new/2017_11_15_datetime64.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Support for numpy.datetime64
-----------------------------
-
-Matplotlib has supported `datetime.datetime` dates for a long time in
-`matplotlib.dates`. We
-now support `numpy.datetime64` dates as well. Anywhere that
-`dateime.datetime` could be used, `numpy.datetime64` can be used. eg::
-
- time = np.arange('2005-02-01', '2005-02-02', dtype='datetime64[h]')
- plt.plot(time)
diff --git a/doc/users/next_whats_new/2017_11_19_title_pad.rst b/doc/users/next_whats_new/2017_11_19_title_pad.rst
deleted file mode 100644
index 6467fca48ff6..000000000000
--- a/doc/users/next_whats_new/2017_11_19_title_pad.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-*pad* kwarg added to ax.set_title
----------------------------------
-
-The method `axes.set_title` now has a *pad* kwarg, that specifies the
-distance from the top of an axes to where the title is drawn. The units
-of *pad* is points, and the default is the value of the (already-existing)
-``rcParams['axes.titlepad']``.
diff --git a/doc/users/next_whats_new/2017_12_17_compare_colors.rst b/doc/users/next_whats_new/2017_12_17_compare_colors.rst
deleted file mode 100644
index bc969b382135..000000000000
--- a/doc/users/next_whats_new/2017_12_17_compare_colors.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Comparision of 2 colors in Matplotlib
--------------------------------------
-
-As the colors in Matplotlib can be specified with a wide variety of ways, the
-`matplotlib.colors.same_color` method has been added which checks if
-two `~matplotlib.colors` are the same.
diff --git a/doc/users/next_whats_new/2017_12_27_sticky_polar_origin.rst b/doc/users/next_whats_new/2017_12_27_sticky_polar_origin.rst
deleted file mode 100644
index 7b66bdbead78..000000000000
--- a/doc/users/next_whats_new/2017_12_27_sticky_polar_origin.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-Autoscaling a polar plot snaps to the origin
---------------------------------------------
-
-Setting the limits automatically in a polar plot now snaps the radial limit
-to zero if the automatic limit is nearby. This means plotting from zero doesn't
-automatically scale to include small negative values on the radial axis.
-
-The limits can still be set manually in the usual way using `set_ylim`.
diff --git a/doc/users/next_whats_new/2018-01-10-AL-pathlike.rst b/doc/users/next_whats_new/2018-01-10-AL-pathlike.rst
deleted file mode 100644
index 9c9e0f548905..000000000000
--- a/doc/users/next_whats_new/2018-01-10-AL-pathlike.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-PathLike support
-----------------
-
-On Python 3.6+, `~matplotlib.pyplot.savefig`, `~matplotlib.pyplot.imsave`,
-`~matplotlib.pyplot.imread`, and animation writers now accept `os.PathLike`\s
-as input.
diff --git a/doc/users/next_whats_new/2018_01_07_tick_params_gridlines.rst b/doc/users/next_whats_new/2018_01_07_tick_params_gridlines.rst
deleted file mode 100644
index b14327d3736b..000000000000
--- a/doc/users/next_whats_new/2018_01_07_tick_params_gridlines.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-`Axes.tick_params` can set gridline properties
-----------------------------------------------
-
-`Tick` objects hold gridlines as well as the tick mark and its label.
-`Axis.set_tick_params`, `Axes.tick_params` and `pyplot.tick_params`
-now have keyword arguments 'grid_color', 'grid_alpha', 'grid_linewidth',
-and 'grid_linestyle' for overriding the defaults in `rcParams`:
-'grid.color', etc.
diff --git a/doc/users/next_whats_new/2018_01_10_pypy_tkagg_support.rst b/doc/users/next_whats_new/2018_01_10_pypy_tkagg_support.rst
deleted file mode 100644
index 822ad41f1b13..000000000000
--- a/doc/users/next_whats_new/2018_01_10_pypy_tkagg_support.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-TkAgg backend reworked to support PyPy
---------------------------------------
-
-PyPy_ can now plot using the TkAgg backend, supported on PyPy 5.9
-and greater (both PyPy for python 2.7 and PyPy for python 3.5).
-
-.. _PyPy: https:/www.pypy.org
diff --git a/doc/users/next_whats_new/2018_01_26_imshow-rgb-clipping.rst b/doc/users/next_whats_new/2018_01_26_imshow-rgb-clipping.rst
deleted file mode 100644
index cf3ff080c87f..000000000000
--- a/doc/users/next_whats_new/2018_01_26_imshow-rgb-clipping.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-`Axes.imshow` clips RGB values to the valid range
--------------------------------------------------
-
-When `Axes.imshow` is passed an RGB or RGBA value with out-of-range
-values, it now logs a warning and clips them to the valid range.
-The old behaviour, wrapping back in to the range, often hid outliers
-and made interpreting RGB images unreliable.
diff --git a/doc/users/next_whats_new/2018_01_30_tick_label_positions.rst b/doc/users/next_whats_new/2018_01_30_tick_label_positions.rst
deleted file mode 100644
index ce402c3aafb2..000000000000
--- a/doc/users/next_whats_new/2018_01_30_tick_label_positions.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Properties in `matplotlibrc` to place xasis and yaxis tick labels
--------------------------------------------------------------------------------
-
-Introducing four new boolean properties in `.matplotlibrc` for default
-positions of xaxis and yaxis tick labels, namely,
-`xtick.labeltop`, `xtick.labelbottom`, `ytick.labelright` and
-`ytick.labelleft`. These can also be changed in rcParams.
-
-
diff --git a/doc/users/next_whats_new/README.rst b/doc/users/next_whats_new/README.rst
index 5c9b9bb8c486..e29acc0f00a9 100644
--- a/doc/users/next_whats_new/README.rst
+++ b/doc/users/next_whats_new/README.rst
@@ -1,3 +1,5 @@
+:orphan:
+
What's new in unreleased Matplotlib?
====================================
diff --git a/doc/users/next_whats_new/constrained_layout.rst b/doc/users/next_whats_new/constrained_layout.rst
deleted file mode 100644
index a1af56601549..000000000000
--- a/doc/users/next_whats_new/constrained_layout.rst
+++ /dev/null
@@ -1,59 +0,0 @@
-Constrained Layout Manager
----------------------------
-
-.. warning::
-
- Constrained Layout is **experimental**. The
- behaviour and API are subject to change, or the whole functionality
- may be removed without a deprecation period.
-
-
-A new method to automatically decide spacing between subplots and their
-organizing ``GridSpec`` instances has been added. It is meant to
-replace the venerable ``tight_layout`` method. It is invoked via
-a new ``constrained_layout=True`` kwarg to
-`~.figure.Figure` or `~.figure.subplots`.
-
-There are new ``rcParams`` for this package, and spacing can be
-more finely tuned with the new `~.set_constrained_layout_pads`.
-
-Features include:
-
- - Automatic spacing for subplots with a fixed-size padding in inches around
- subplots and all their decorators, and space between as a fraction
- of subplot size between subplots.
- - Spacing for `~.figure.suptitle`, and colorbars that are attached to
- more than one axes.
- - Nested `~.GridSpec` layouts using `~.GridSpecFromSubplotSpec`.
-
- For more details and capabilities please see the new tutorial:
- :doc:`/tutorials/intermediate/constrainedlayout_guide`
-
-Note the new API to access this:
-
-New ``plt.figure`` and ``plt.subplots`` kwarg: ``constrained_layout``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-:meth:`~matplotlib.pyplot.figure` and :meth:`~matplotlib.pyplot.subplots`
-can now be called with ``constrained_layout=True`` kwarg to enable
-constrained_layout.
-
-New ``ax.set_position`` behaviour
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-:meth:`~matplotlib.axes.set_position` now makes the specified axis no
-longer responsive to ``constrained_layout``, consistent with the idea that the
-user wants to place an axis manually.
-
-Internally, this means that old ``ax.set_position`` calls *inside* the library
-are changed to private ``ax._set_position`` calls so that
-``constrained_layout`` will still work with these axes.
-
-New ``figure`` kwarg for ``GridSpec``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In order to facilitate ``constrained_layout``, ``GridSpec`` now accepts a
-``figure`` keyword. This is backwards compatible, in that not supplying this
-will simply cause ``constrained_layout`` to not operate on the subplots
-orgainzed by this ``GridSpec`` instance. Routines that use ``GridSpec`` (e.g.
-``fig.subplots``) have been modified to pass the figure to ``GridSpec``.
diff --git a/doc/users/next_whats_new/more-cairo.rst b/doc/users/next_whats_new/more-cairo.rst
deleted file mode 100644
index b81c6a981b01..000000000000
--- a/doc/users/next_whats_new/more-cairo.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Cairo rendering for Qt and WX canvases
---------------------------------------
-
-The new ``Qt4Cairo``, ``Qt5Cairo``, and ``WXCairo`` backends allow Qt and Wx
-canvases to use Cairo rendering instead of Agg.
diff --git a/doc/users/next_whats_new/new_color_cycle.rst b/doc/users/next_whats_new/new_color_cycle.rst
deleted file mode 100644
index 8e7df909b9dd..000000000000
--- a/doc/users/next_whats_new/new_color_cycle.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-New style colorblind-friendly color cycle
------------------------------------------
-
-A new style defining a color cycle has been added, tableau-colorblind10, to provide another option for
-colorblind-friendly plots.
diff --git a/doc/users/next_whats_new/qt-toolmanager.rst b/doc/users/next_whats_new/qt-toolmanager.rst
deleted file mode 100644
index db61617dca47..000000000000
--- a/doc/users/next_whats_new/qt-toolmanager.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-Added support for QT in new ToolManager
-=======================================
-
-Now it is possible to use the ToolManager with Qt5
-For example
-
- import matplotlib
-
- matplotlib.use('QT5AGG')
- matplotlib.rcParams['toolbar'] = 'toolmanager'
- import matplotlib.pyplot as plt
-
- plt.plot([1,2,3])
- plt.show()
-
-
-Treat the new Tool classes experimental for now, the API will likely change and perhaps the rcParam as well
-
-The main example `examples/user_interfaces/toolmanager_sgskip.py` shows more
-details, just adjust the header to use QT instead of GTK3
diff --git a/doc/users/prev_whats_new/whats_new_2.1.0.rst b/doc/users/prev_whats_new/whats_new_2.1.0.rst
new file mode 100644
index 000000000000..ff7260d07c91
--- /dev/null
+++ b/doc/users/prev_whats_new/whats_new_2.1.0.rst
@@ -0,0 +1,599 @@
+.. _whats-new-2-1-0:
+
+New in Matplotlib 2.1.0
+=======================
+
+Documentation
++++++++++++++
+
+The examples have been migrated to use `sphinx gallery
+`__. This allows
+better mixing of prose and code in the examples, provides links to
+download the examples as both a Python script and a Jupyter notebook,
+and improves the thumbnail galleries. The examples have been
+re-organized into :ref:`tutorials` and a :ref:`gallery`.
+
+Many docstrings and examples have been clarified and improved.
+
+
+New features
+++++++++++++
+
+String categorical values
+-------------------------
+
+All plotting functions now support string categorical values as input.
+For example:
+
+.. plot::
+ :include-source:
+ :align: center
+
+ data = {'apples': 10, 'oranges': 15, 'lemons': 5, 'limes': 20}
+ fig, ax = plt.subplots()
+ ax.bar(data.keys(), data.values(), color='lightgray')
+
+
+Interactive JS widgets for animation
+------------------------------------
+
+Jake Vanderplas' JSAnimation package has been merged into Matplotlib. This
+adds to Matplotlib the `~matplotlib.animation.HTMLWriter` class for
+generating a JavaScript HTML animation, suitable for the IPython notebook.
+This can be activated by default by setting the ``animation.html`` rc
+parameter to ``jshtml``. One can also call the
+`~matplotlib.animation.Animation.to_jshtml` method to manually convert an
+animation. This can be displayed using IPython's ``HTML`` display class::
+
+ from IPython.display import HTML
+ HTML(animation.to_jshtml())
+
+The `~matplotlib.animation.HTMLWriter` class can also be used to generate
+an HTML file by asking for the ``html`` writer.
+
+
+Enhancements to polar plot
+--------------------------
+
+The polar axes transforms have been greatly re-factored to allow for more
+customization of view limits and tick labelling. Additional options for view
+limits allow for creating an annulus, a sector, or some combination of the two.
+
+The :meth:`~matplotlib.projections.polar.PolarAxes.set_rorigin` method may
+be used to provide an offset to the minimum plotting radius, producing an
+annulus.
+
+The :meth:`~matplotlib.projections.polar.PolarAxes.set_theta_zero_location`
+method now has an optional :code:`offset` argument. This argument may be used
+to further specify the zero location based on the given anchor point.
+
+.. figure:: /gallery/pie_and_polar_charts/images/sphx_glr_polar_scatter_002.png
+ :target: ../../gallery/pie_and_polar_charts/polar_scatter.html#scatter-plot-on-polar-axis-with-offset-origin
+ :align: center
+ :scale: 70
+
+ Polar Offset Demo
+
+The :meth:`~matplotlib.projections.polar.PolarAxes.set_thetamin` and
+:meth:`~matplotlib.projections.polar.PolarAxes.set_thetamax` methods may
+be used to limit the range of angles plotted, producing sectors of a circle.
+
+.. figure:: /gallery/pie_and_polar_charts/images/sphx_glr_polar_scatter_003.png
+ :target: ../../gallery/pie_and_polar_charts/polar_scatter.html#scatter-plot-on-polar-axis-confined-to-a-sector
+ :align: center
+ :scale: 70
+
+ Polar Sector Demo
+
+Previous releases allowed plots containing negative radii for which the
+negative values are simply used as labels, and the real radius is shifted by
+the configured minimum. This release also allows negative radii to be used for
+grids and ticks, which were previously silently ignored.
+
+Radial ticks have been modified to be parallel to the circular grid line, and
+angular ticks have been modified to be parallel to the grid line. It may also
+be useful to rotate tick *labels* to match the boundary. Calling
+``ax.tick_params(rotation='auto')`` will enable the new behavior: radial tick
+labels will be parallel to the circular grid line, and angular tick labels will
+be perpendicular to the grid line (i.e., parallel to the outer boundary).
+Additionally, tick labels now obey the padding settings that previously only
+worked on Cartesian plots. Consequently, the ``frac`` argument to
+`.PolarAxes.set_thetagrids` is no longer applied. Tick padding can be modified
+with the ``pad`` argument to `.Axes.tick_params` or `.Axis.set_tick_params`.
+
+
+``Figure`` class now has ``subplots`` method
+--------------------------------------------
+
+The :class:`~matplotlib.figure.Figure` class now has a
+:meth:`~matplotlib.figure.Figure.subplots` method which behaves the same as
+:func:`.pyplot.subplots` but on an existing figure.
+
+
+Metadata savefig keyword argument
+---------------------------------
+
+:func:`~matplotlib.pyplot.savefig` now accepts ``metadata`` as a keyword
+argument. It can be used to store key/value pairs in the image metadata.
+
+
+* 'png' with Agg backend
+* 'pdf' with PDF backend (see
+ :func:`~matplotlib.backends.backend_pdf.PdfFile.writeInfoDict` for a list of
+ supported keywords)
+* 'eps' and 'ps' with PS backend (only 'Creator' key is accepted)
+
+::
+
+ plt.savefig('test.png', metadata={'Software': 'My awesome software'})
+
+
+Busy Cursor
+-----------
+
+The interactive GUI backends will now change the cursor to busy when
+Matplotlib is rendering the canvas.
+
+PolygonSelector
+---------------
+
+A :class:`~matplotlib.widgets.PolygonSelector` class has been added to
+:mod:`matplotlib.widgets`. See
+:ref:`sphx_glr_gallery_widgets_polygon_selector_demo.py` for details.
+
+
+Added `matplotlib.ticker.PercentFormatter`
+------------------------------------------
+
+The new `~matplotlib.ticker.PercentFormatter` formatter has some nice
+features like being able to convert from arbitrary data scales to
+percents, a customizable percent symbol and either automatic or manual
+control over the decimal points.
+
+
+Reproducible PS, PDF and SVG output
+-----------------------------------
+
+The ``SOURCE_DATE_EPOCH`` environment variable can now be used to set
+the timestamp value in the PS and PDF outputs. See `source date epoch
+`__.
+
+Alternatively, calling ``savefig`` with ``metadata={'CreationDate': None}``
+will omit the timestamp altogether for the PDF backend.
+
+The reproducibility of the output from the PS and PDF backends has so
+far been tested using various plot elements but only default values of
+options such as ``{ps,pdf}.fonttype`` that can affect the output at a
+low level, and not with the mathtext or usetex features. When
+Matplotlib calls external tools (such as PS distillers or LaTeX) their
+versions need to be kept constant for reproducibility, and they may
+add sources of nondeterminism outside the control of Matplotlib.
+
+For SVG output, the ``svg.hashsalt`` rc parameter has been added in an
+earlier release. This parameter changes some random identifiers in the
+SVG file to be deterministic. The downside of this setting is that if
+more than one file is generated using deterministic identifiers
+and they end up as parts of one larger document, the identifiers can
+collide and cause the different parts to affect each other.
+
+These features are now enabled in the tests for the PDF and SVG
+backends, so most test output files (but not all of them) are now
+deterministic.
+
+Orthographic projection for mplot3d
+-----------------------------------
+:class:`~mpl_toolkits.mplot3d.axes3d.Axes3D` now accepts ``proj_type`` keyword
+argument and has a method :meth:`~mpl_toolkits.mplot3d.axes3d.Axes3D.set_proj_type`.
+The default option is ``'persp'`` as before, and supplying ``'ortho'`` enables
+orthographic view.
+
+Compare the z-axis which is vertical in orthographic view, but slightly skewed
+in the perspective view.
+
+.. plot::
+ :include-source:
+ :align: center
+
+ import numpy as np
+ import matplotlib.pyplot as plt
+ from mpl_toolkits.mplot3d import Axes3D
+
+ fig = plt.figure(figsize=(4, 6))
+ ax1 = fig.add_subplot(2, 1, 1, projection='3d')
+ ax1.set_proj_type('persp')
+ ax1.set_title('Perspective (default)')
+
+ ax2 = fig.add_subplot(2, 1, 2, projection='3d')
+ ax2.set_proj_type('ortho')
+ ax2.set_title('Orthographic')
+
+ plt.show()
+
+
+``voxels`` function for mplot3d
+-------------------------------
+:class:`~mpl_toolkits.mplot3d.axes3d.Axes3D` now has a
+`~mpl_toolkits.mplot3d.axes3d.Axes3D.voxels` method, for visualizing boolean 3D
+data. Uses could include plotting a sparse 3D heat map, or visualizing a
+volumetric model.
+
+.. figure:: /gallery/mplot3d/images/sphx_glr_voxels_numpy_logo_001.png
+ :target: ../../gallery/mplot3d/voxels_numpy_logo.html
+ :align: center
+ :scale: 70
+
+ Voxel Demo
+
+
+Improvements
+++++++++++++
+
+CheckButtons widget ``get_status`` function
+-------------------------------------------
+
+A :func:`~matplotlib.widgets.CheckButtons.get_status` method has been added to
+the :class:`matplotlib.widgets.CheckButtons` class. This ``get_status`` method
+allows user to query the status (True/False) of all of the buttons in the
+``CheckButtons`` object.
+
+
+Add ``fill_bar`` argument to ``AnchoredSizeBar``
+------------------------------------------------
+
+The ``mpl_toolkits`` class
+:class:`~mpl_toolkits.axes_grid1.anchored_artists.AnchoredSizeBar` now has an
+additional ``fill_bar`` argument, which makes the size bar a solid rectangle
+instead of just drawing the border of the rectangle. The default is ``None``,
+and whether or not the bar will be filled by default depends on the value of
+``size_vertical``. If ``size_vertical`` is nonzero, ``fill_bar`` will be set to
+``True``. If ``size_vertical`` is zero then ``fill_bar`` will be set to
+``False``. If you wish to override this default behavior, set ``fill_bar`` to
+``True`` or ``False`` to unconditionally always or never use a filled patch
+rectangle for the size bar.
+
+
+.. plot::
+ :include-source:
+ :align: center
+
+ import matplotlib.pyplot as plt
+ from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
+
+ fig, ax = plt.subplots(figsize=(3, 3))
+
+ bar0 = AnchoredSizeBar(ax.transData, 0.3, 'unfilled', loc=3, frameon=False,
+ size_vertical=0.05, fill_bar=False)
+ ax.add_artist(bar0)
+ bar1 = AnchoredSizeBar(ax.transData, 0.3, 'filled', loc=4, frameon=False,
+ size_vertical=0.05, fill_bar=True)
+ ax.add_artist(bar1)
+
+ plt.show()
+
+Annotation can use a default arrow style
+----------------------------------------
+
+Annotations now use the default arrow style when setting ``arrowprops={}``,
+rather than no arrow (the new behavior actually matches the documentation).
+
+Barbs and Quiver Support Dates
+------------------------------
+
+When using the :func:`~matplotlib.axes.Axes.quiver` and
+:func:`~matplotlib.axes.Axes.barbs` plotting methods, it is now possible to
+pass dates, just like for other methods like :func:`~matplotlib.axes.Axes.plot`.
+This also allows these functions to handle values that need unit-conversion
+applied.
+
+
+Hexbin default line color
+-------------------------
+
+The default ``linecolor`` keyword argument for :func:`~matplotlib.axes.Axes.hexbin`
+is now ``'face'``, and supplying ``'none'`` now prevents lines from being drawn
+around the hexagons.
+
+Figure.legend() can be called without arguments
+-----------------------------------------------
+
+Calling :meth:`.Figure.legend` can now be done with no arguments. In this case
+a legend will be created that contains all the artists on all the axes
+contained within the figure.
+
+Multiple legend keys for legend entries
+---------------------------------------
+
+A legend entry can now contain more than one legend key. The extended
+`~matplotlib.legend_handler.HandlerTuple` class now accepts two parameters:
+``ndivide`` divides the legend area in the specified number of sections;
+``pad`` changes the padding between the legend keys.
+
+.. figure:: /gallery/text_labels_and_annotations/images/sphx_glr_legend_demo_004.png
+ :target: ../../gallery/text_labels_and_annotations/legend_demo.html
+ :align: center
+ :scale: 70
+
+ Multiple Legend Keys
+
+
+New parameter `clear` for :func:`~matplotlib.pyplot.figure`
+-----------------------------------------------------------
+
+When the pyplot's function :func:`~matplotlib.pyplot.figure` is called
+with a ``num`` parameter, a new window is only created if no existing
+window with the same value exists. A new bool parameter `clear` was
+added for explicitly clearing its existing contents. This is particularly
+useful when utilized in interactive sessions. Since
+:func:`~matplotlib.pyplot.subplots` also accepts keyword arguments
+from :func:`~matplotlib.pyplot.figure`, it can also be used there::
+
+ import matplotlib.pyplot as plt
+
+ fig0 = plt.figure(num=1)
+ fig0.suptitle("A fancy plot")
+ print("fig0.texts: ", [t.get_text() for t in fig0.texts])
+
+ fig1 = plt.figure(num=1, clear=False) # do not clear contents of window
+ fig1.text(0.5, 0.5, "Really fancy!")
+ print("fig0 is fig1: ", fig0 is fig1)
+ print("fig1.texts: ", [t.get_text() for t in fig1.texts])
+
+ fig2, ax2 = plt.subplots(2, 1, num=1, clear=True) # clear contents
+ print("fig0 is fig2: ", fig0 is fig2)
+ print("fig2.texts: ", [t.get_text() for t in fig2.texts])
+
+ # The output:
+ # fig0.texts: ['A fancy plot']
+ # fig0 is fig1: True
+ # fig1.texts: ['A fancy plot', 'Really fancy!']
+ # fig0 is fig2: True
+ # fig2.texts: []
+
+
+Specify minimum value to format as scalar for ``LogFormatterMathtext``
+----------------------------------------------------------------------
+
+:class:`~matplotlib.ticker.LogFormatterMathtext` now includes the
+option to specify a minimum value exponent to format as a scalar
+(i.e., 0.001 instead of 10\ :sup:`-3`).
+
+
+New quiverkey angle keyword argument
+------------------------------------
+
+Plotting a :func:`~matplotlib.axes.Axes.quiverkey` now admits the
+``angle`` keyword argument, which sets the angle at which to draw the
+key arrow.
+
+Colormap reversed method
+------------------------
+
+The methods :meth:`matplotlib.colors.LinearSegmentedColormap.reversed` and
+:meth:`matplotlib.colors.ListedColormap.reversed` return a reversed
+instance of the Colormap. This implements a way for any Colormap to be
+reversed.
+
+
+`Artist.setp` (and `pyplot.setp`) accept a ``file`` argument
+------------------------------------------------------------
+
+The argument is keyword-only. It allows an output file other than
+`sys.stdout` to be specified. It works exactly like the ``file`` argument
+to `print`.
+
+
+``streamplot`` streamline generation more configurable
+------------------------------------------------------
+
+The starting point, direction, and length of the stream lines can now
+be configured. This allows to follow the vector field for a longer
+time and can enhance the visibility of the flow pattern in some use
+cases.
+
+
+`Axis.set_tick_params` now responds to ``rotation``
+---------------------------------------------------
+
+Bulk setting of tick label rotation is now possible via
+:func:`~matplotlib.axis.Axis.set_tick_params` using the ``rotation``
+keyword.
+
+::
+
+ ax.xaxis.set_tick_params(which='both', rotation=90)
+
+
+Shading in 3D bar plots
+-----------------------
+
+A new ``shade`` parameter has been added the 3D
+`~mpl_toolkits.mplot3d.axes3d.Axes3D.bar` plotting method. The default behavior
+remains to shade the bars, but now users have the option of setting ``shade``
+to ``False``.
+
+
+.. plot::
+ :include-source:
+ :align: center
+
+ import numpy as np
+ import matplotlib.pyplot as plt
+ from mpl_toolkits.mplot3d import Axes3D
+
+ x = np.arange(2)
+ y = np.arange(3)
+ x2d, y2d = np.meshgrid(x, y)
+ x, y = x2d.ravel(), y2d.ravel()
+ z = np.zeros_like(x)
+ dz = x + y
+
+ fig = plt.figure(figsize=(4, 6))
+ ax1 = fig.add_subplot(2, 1, 1, projection='3d')
+ ax1.bar3d(x, y, z, 1, 1, dz, shade=True)
+ ax1.set_title('Shading On')
+
+ ax2 = fig.add_subplot(2, 1, 2, projection='3d')
+ ax2.bar3d(x, y, z, 1, 1, dz, shade=False)
+ ax2.set_title('Shading Off')
+
+ plt.show()
+
+
+New ``which`` Parameter for ``autofmt_xdate``
+---------------------------------------------
+
+A ``which`` parameter now exists for the method
+:func:`~matplotlib.figure.Figure.autofmt_xdate`. This allows a user to format
+``major``, ``minor`` or ``both`` tick labels selectively. The
+default behavior will rotate and align the ``major`` tick labels.
+
+
+::
+
+ fig.autofmt_xdate(bottom=0.2, rotation=30, ha='right', which='minor')
+
+
+New Figure Parameter for ``subplot2grid``
+-----------------------------------------
+
+A ``fig`` parameter now exists for the function
+:func:`~matplotlib.pyplot.subplot2grid`. This allows a user to specify the
+figure where the subplots will be created. If ``fig`` is ``None`` (default)
+then the method will use the current figure retrieved by
+:func:`~matplotlib.pyplot.gcf`.
+
+
+::
+
+ subplot2grid(shape, loc, rowspan=1, colspan=1, fig=myfig)
+
+
+Interpolation in ``fill_betweenx``
+----------------------------------
+
+The ``interpolate`` parameter now exists for the method
+:func:`~matplotlib.axes.Axes.fill_betweenx`. This allows a user to
+interpolate the data and fill the areas in the crossover points,
+similarly to :func:`~matplotlib.axes.Axes.fill_between`.
+
+
+New keyword argument ``sep`` for EngFormatter
+---------------------------------------------
+
+A new ``sep`` keyword argument has been added to
+:class:`~matplotlib.ticker.EngFormatter` and provides a means to
+define the string that will be used between the value and its
+unit. The default string is ``" "``, which preserves the former
+behavior. Additionally, the separator is now present between the value
+and its unit even in the absence of SI prefix. There was formerly a
+bug that was causing strings like ``"3.14V"`` to be returned instead of
+the expected ``"3.14 V"`` (with the default behavior).
+
+Extend ``MATPLOTLIBRC`` behavior
+--------------------------------
+
+The environmental variable can now specify the full file path or the
+path to a directory containing a :file:`matplotlibrc` file.
+
+
+``density`` kwarg to hist
+-------------------------
+
+The :meth:`~matplotlib.axes.Axes.hist` method now prefers ``density``
+to ``normed`` to control if the histogram should be normalized,
+following a change upstream to NumPy. This will reduce confusion as
+the behavior has always been that the integral of the histogram is 1
+(rather than sum or maximum value).
+
+
+
+Internals
++++++++++
+
+New TransformedPatchPath caching object
+---------------------------------------
+
+A newly added :class:`~matplotlib.transforms.TransformedPatchPath` provides a
+means to transform a :class:`~matplotlib.patches.Patch` into a
+:class:`~matplotlib.path.Path` via a :class:`~matplotlib.transforms.Transform`
+while caching the resulting path. If neither the patch nor the transform have
+changed, a cached copy of the path is returned.
+
+This class differs from the older
+:class:`~matplotlib.transforms.TransformedPath` in that it is able to refresh
+itself based on the underlying patch while the older class uses an immutable
+path.
+
+
+Abstract base class for movie writers
+-------------------------------------
+
+The new :class:`~matplotlib.animation.AbstractMovieWriter` class defines
+the API required by a class that is to be used as the ``writer`` in the
+:meth:`matplotlib.animation.Animation.save` method. The existing
+:class:`~matplotlib.animation.MovieWriter` class now derives from the new
+abstract base class.
+
+
+Stricter validation of line style rcParams
+------------------------------------------
+
+The validation of rcParams that are related to line styles
+(``lines.linestyle``, ``boxplot.*.linestyle``, ``grid.linestyle`` and
+``contour.negative_linestyle``) now effectively checks that the values
+are valid line styles. Strings like ``'dashed'`` or ``'--'`` are
+accepted, as well as even-length sequences of on-off ink like ``[1,
+1.65]``. In this latter case, the offset value is handled internally
+and should *not* be provided by the user.
+
+
+The new validation scheme replaces the former one used for the
+``contour.negative_linestyle`` rcParams, that was limited to
+``'solid'`` and ``'dashed'`` line styles.
+
+The validation is case-insensitive. The following are now valid:
+
+::
+
+ grid.linestyle : (1, 3) # loosely dotted grid lines
+ contour.negative_linestyle : dashdot # previously only solid or dashed
+
+
+pytest
+------
+
+The automated tests have been switched from `nose` to `pytest`.
+
+Performance
++++++++++++
+
+Path simplification updates
+---------------------------
+
+Line simplification controlled by the ``path.simplify`` and
+``path.simplify_threshold`` parameters has been improved. You should
+notice better rendering performance when plotting large amounts of
+data (as long as the above parameters are set accordingly). Only the
+line segment portion of paths will be simplified -- if you are also
+drawing markers and experiencing problems with rendering speed, you
+should consider using the ``markevery`` option to `~matplotlib.axes.Axes.plot`.
+See the :ref:`performance` section in the usage tutorial for more
+information.
+
+The simplification works by iteratively merging line segments
+into a single vector until the next line segment's perpendicular
+distance to the vector (measured in display-coordinate space)
+is greater than the ``path.simplify_threshold`` parameter. Thus, higher
+values of ``path.simplify_threshold`` result in quicker rendering times.
+If you are plotting just to explore data and not for publication quality,
+pixel perfect plots, then a value of ``1.0`` can be safely used. If you
+want to make sure your plot reflects your data *exactly*, then you should
+set ``path.simplify`` to false and/or ``path.simplify_threshold`` to ``0``.
+Matplotlib currently defaults to a conservative value of ``1/9``, smaller
+values are unlikely to cause any visible differences in your plots.
+
+Implement intersects_bbox in c++
+--------------------------------
+
+:meth:`~matplotlib.path.Path.intersects_bbox` has been implemented in
+c++ which improves the performance of automatically placing the legend.
diff --git a/doc/users/whats_new.rst b/doc/users/whats_new.rst
index 240a6f82ecde..12e228786b50 100644
--- a/doc/users/whats_new.rst
+++ b/doc/users/whats_new.rst
@@ -14,610 +14,397 @@ revision, see the :ref:`github-stats`.
..
For a release, add a new section after this, then comment out the include
and toctree below by indenting them. Uncomment them after the release.
-.. include:: next_whats_new/README.rst
-.. toctree::
- :glob:
- :maxdepth: 1
-
- next_whats_new/*
-
-New in Matplotlib 2.1
-=====================
-
-Documentation
-+++++++++++++
-
-The examples have been migrated to use `sphinx gallery
-`__. This allows
-better mixing of prose and code in the examples, provides links to
-download the examples as both a Python script and a Jupyter notebook,
-and improves the thumbnail galleries. The examples have been
-re-organized into :ref:`tutorials` and a :ref:`gallery`.
-
-Many docstrings and examples have been clarified and improved.
-
-
-New features
-++++++++++++
-
-String categorical values
--------------------------
-
-All plotting functions now support string categorical values as input.
-For example:
-
-.. plot::
- :include-source:
- :align: center
-
- data = {'apples': 10, 'oranges': 15, 'lemons': 5, 'limes': 20}
- fig, ax = plt.subplots()
- ax.bar(data.keys(), data.values(), color='lightgray')
-
-
-Interactive JS widgets for animation
-------------------------------------
+ .. include:: next_whats_new/README.rst
+ .. toctree::
+ :glob:
+ :maxdepth: 1
-Jake Vanderplas' JSAnimation package has been merged into Matplotlib. This
-adds to Matplotlib the `~matplotlib.animation.HTMLWriter` class for
-generating a JavaScript HTML animation, suitable for the IPython notebook.
-This can be activated by default by setting the ``animation.html`` rc
-parameter to ``jshtml``. One can also call the
-`~matplotlib.animation.Animation.to_jshtml` method to manually convert an
-animation. This can be displayed using IPython's ``HTML`` display class::
+ next_whats_new/*
- from IPython.display import HTML
- HTML(animation.to_jshtml())
-
-The `~matplotlib.animation.HTMLWriter` class can also be used to generate
-an HTML file by asking for the ``html`` writer.
+New in Matplotlib 2.2
+=====================
-Enhancements to polar plot
+Constrained Layout Manager
--------------------------
-The polar axes transforms have been greatly re-factored to allow for more
-customization of view limits and tick labelling. Additional options for view
-limits allow for creating an annulus, a sector, or some combination of the two.
-
-The :meth:`~matplotlib.projections.polar.PolarAxes.set_rorigin` method may
-be used to provide an offset to the minimum plotting radius, producing an
-annulus.
-
-The :meth:`~matplotlib.projections.polar.PolarAxes.set_theta_zero_location`
-method now has an optional :code:`offset` argument. This argument may be used
-to further specify the zero location based on the given anchor point.
-
-.. figure:: /gallery/pie_and_polar_charts/images/sphx_glr_polar_scatter_002.png
- :target: ../gallery/pie_and_polar_charts/polar_scatter.html#scatter-plot-on-polar-axis-with-offset-origin
- :align: center
- :scale: 70
-
- Polar Offset Demo
-
-The :meth:`~matplotlib.projections.polar.PolarAxes.set_thetamin` and
-:meth:`~matplotlib.projections.polar.PolarAxes.set_thetamax` methods may
-be used to limit the range of angles plotted, producing sectors of a circle.
-
-.. figure:: /gallery/pie_and_polar_charts/images/sphx_glr_polar_scatter_003.png
- :target: ../gallery/pie_and_polar_charts/polar_scatter.html#scatter-plot-on-polar-axis-confined-to-a-sector
- :align: center
- :scale: 70
-
- Polar Sector Demo
-
-Previous releases allowed plots containing negative radii for which the
-negative values are simply used as labels, and the real radius is shifted by
-the configured minimum. This release also allows negative radii to be used for
-grids and ticks, which were previously silently ignored.
+.. warning::
-Radial ticks have been modified to be parallel to the circular grid line, and
-angular ticks have been modified to be parallel to the grid line. It may also
-be useful to rotate tick *labels* to match the boundary. Calling
-``ax.tick_params(rotation='auto')`` will enable the new behavior: radial tick
-labels will be parallel to the circular grid line, and angular tick labels will
-be perpendicular to the grid line (i.e., parallel to the outer boundary).
-Additionally, tick labels now obey the padding settings that previously only
-worked on Cartesian plots. Consequently, the ``frac`` argument to
-`.PolarAxes.set_thetagrids` is no longer applied. Tick padding can be modified
-with the ``pad`` argument to `.Axes.tick_params` or `.Axis.set_tick_params`.
+ Constrained Layout is **experimental**. The
+ behaviour and API are subject to change, or the whole functionality
+ may be removed without a deprecation period.
-``Figure`` class now has ``subplots`` method
---------------------------------------------
-
-The :class:`~matplotlib.figure.Figure` class now has a
-:meth:`~matplotlib.figure.Figure.subplots` method which behaves the same as
-:func:`.pyplot.subplots` but on an existing figure.
-
-
-Metadata savefig keyword argument
----------------------------------
+A new method to automatically decide spacing between subplots and their
+organizing ``GridSpec`` instances has been added. It is meant to
+replace the venerable ``tight_layout`` method. It is invoked via
+a new ``constrained_layout=True`` kwarg to
+`~.figure.Figure` or `~.figure.subplots`.
-:func:`~matplotlib.pyplot.savefig` now accepts ``metadata`` as a keyword
-argument. It can be used to store key/value pairs in the image metadata.
+There are new ``rcParams`` for this package, and spacing can be
+more finely tuned with the new `~.set_constrained_layout_pads`.
+Features include:
-* 'png' with Agg backend
-* 'pdf' with PDF backend (see
- :func:`~matplotlib.backends.backend_pdf.PdfFile.writeInfoDict` for a list of
- supported keywords)
-* 'eps' and 'ps' with PS backend (only 'Creator' key is accepted)
+ - Automatic spacing for subplots with a fixed-size padding in inches around
+ subplots and all their decorators, and space between as a fraction
+ of subplot size between subplots.
+ - Spacing for `~.figure.suptitle`, and colorbars that are attached to
+ more than one axes.
+ - Nested `~.GridSpec` layouts using `~.GridSpecFromSubplotSpec`.
-::
+ For more details and capabilities please see the new tutorial:
+ :doc:`/tutorials/intermediate/constrainedlayout_guide`
- plt.savefig('test.png', metadata={'Software': 'My awesome software'})
+Note the new API to access this:
+New ``plt.figure`` and ``plt.subplots`` kwarg: ``constrained_layout``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Busy Cursor
------------
+:meth:`~matplotlib.pyplot.figure` and :meth:`~matplotlib.pyplot.subplots`
+can now be called with ``constrained_layout=True`` kwarg to enable
+constrained_layout.
-The interactive GUI backends will now change the cursor to busy when
-Matplotlib is rendering the canvas.
+New ``ax.set_position`` behaviour
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-PolygonSelector
----------------
+:meth:`~matplotlib.axes.set_position` now makes the specified axis no
+longer responsive to ``constrained_layout``, consistent with the idea that the
+user wants to place an axis manually.
-A :class:`~matplotlib.widgets.PolygonSelector` class has been added to
-:mod:`matplotlib.widgets`. See
-:ref:`sphx_glr_gallery_widgets_polygon_selector_demo.py` for details.
+Internally, this means that old ``ax.set_position`` calls *inside* the library
+are changed to private ``ax._set_position`` calls so that
+``constrained_layout`` will still work with these axes.
+New ``figure`` kwarg for ``GridSpec``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Added `matplotlib.ticker.PercentFormatter`
-------------------------------------------
+In order to facilitate ``constrained_layout``, ``GridSpec`` now accepts a
+``figure`` keyword. This is backwards compatible, in that not supplying this
+will simply cause ``constrained_layout`` to not operate on the subplots
+orgainzed by this ``GridSpec`` instance. Routines that use ``GridSpec`` (e.g.
+``fig.subplots``) have been modified to pass the figure to ``GridSpec``.
-The new `~matplotlib.ticker.PercentFormatter` formatter has some nice
-features like being able to convert from arbitrary data scales to
-percents, a customizable percent symbol and either automatic or manual
-control over the decimal points.
+xlabels and ylabels can now be automatically aligned
+----------------------------------------------------
-Reproducible PS, PDF and SVG output
------------------------------------
+Subplot axes ``ylabels`` can be misaligned horizontally if the tick labels
+are very different widths. The same can happen to ``xlabels`` if the
+ticklabels are rotated on one subplot (for instance). The new methods
+on the `Figure` class: `Figure.align_xlabels` and `Figure.align_ylabels`
+will now align these labels horizontally or vertically. If the user only
+wants to align some axes, a list of axes can be passed. If no list is
+passed, the algorithm looks at all the labels on the figure.
-The ``SOURCE_DATE_EPOCH`` environment variable can now be used to set
-the timestamp value in the PS and PDF outputs. See `source date epoch
-`__.
+Only labels that have the same subplot locations are aligned. i.e. the
+ylabels are aligned only if the subplots are in the same column of the
+subplot layout.
-Alternatively, calling ``savefig`` with ``metadata={'CreationDate': None}``
-will omit the timestamp altogether for the PDF backend.
+Alignemnt is persistent and automatic after these are called.
-The reproducibility of the output from the PS and PDF backends has so
-far been tested using various plot elements but only default values of
-options such as ``{ps,pdf}.fonttype`` that can affect the output at a
-low level, and not with the mathtext or usetex features. When
-Matplotlib calls external tools (such as PS distillers or LaTeX) their
-versions need to be kept constant for reproducibility, and they may
-add sources of nondeterminism outside the control of Matplotlib.
-
-For SVG output, the ``svg.hashsalt`` rc parameter has been added in an
-earlier release. This parameter changes some random identifiers in the
-SVG file to be deterministic. The downside of this setting is that if
-more than one file is generated using deterministic identifiers
-and they end up as parts of one larger document, the identifiers can
-collide and cause the different parts to affect each other.
-
-These features are now enabled in the tests for the PDF and SVG
-backends, so most test output files (but not all of them) are now
-deterministic.
-
-Orthographic projection for mplot3d
------------------------------------
-:class:`~mpl_toolkits.mplot3d.axes3d.Axes3D` now accepts ``proj_type`` keyword
-argument and has a method :meth:`~mpl_toolkits.mplot3d.axes3d.Axes3D.set_proj_type`.
-The default option is ``'persp'`` as before, and supplying ``'ortho'`` enables
-orthographic view.
-
-Compare the z-axis which is vertical in orthographic view, but slightly skewed
-in the perspective view.
+A convenience wrapper `Figure.align_labels` calls both functions at once.
.. plot::
- :include-source:
- :align: center
-
- import numpy as np
- import matplotlib.pyplot as plt
- from mpl_toolkits.mplot3d import Axes3D
-
- fig = plt.figure(figsize=(4, 6))
- ax1 = fig.add_subplot(2, 1, 1, projection='3d')
- ax1.set_proj_type('persp')
- ax1.set_title('Perspective (default)')
-
- ax2 = fig.add_subplot(2, 1, 2, projection='3d')
- ax2.set_proj_type('ortho')
- ax2.set_title('Orthographic')
-
- plt.show()
+ import matplotlib.gridspec as gridspec
-``voxels`` function for mplot3d
--------------------------------
-:class:`~mpl_toolkits.mplot3d.axes3d.Axes3D` now has a
-`~mpl_toolkits.mplot3d.axes3d.Axes3D.voxels` method, for visualizing boolean 3D
-data. Uses could include plotting a sparse 3D heat map, or visualizing a
-volumetric model.
+ fig = plt.figure(figsize=(5, 3), tight_layout=True)
+ gs = gridspec.GridSpec(2, 2)
-.. figure:: /gallery/mplot3d/images/sphx_glr_voxels_numpy_logo_001.png
- :target: ../gallery/mplot3d/voxels_numpy_logo.html
- :align: center
- :scale: 70
+ ax = fig.add_subplot(gs[0,:])
+ ax.plot(np.arange(0, 1e6, 1000))
+ ax.set_ylabel('Test')
+ for i in range(2):
+ ax = fig.add_subplot(gs[1, i])
+ ax.set_ylabel('Booooo')
+ ax.set_xlabel('Hello')
+ if i == 0:
+ for tick in ax.get_xticklabels():
+ tick.set_rotation(45)
+ fig.align_labels()
- Voxel Demo
+Axes legends now included in tight_bbox
+---------------------------------------
-Improvements
-++++++++++++
-
-CheckButtons widget ``get_status`` function
--------------------------------------------
-
-A :func:`~matplotlib.widgets.CheckButtons.get_status` method has been added to
-the :class:`matplotlib.widgets.CheckButtons` class. This ``get_status`` method
-allows user to query the status (True/False) of all of the buttons in the
-``CheckButtons`` object.
-
+Legends created via ``ax.legend`` can sometimes overspill the limits of
+the axis. Tools like ``fig.tight_layout()`` and
+``fig.savefig(bbox_inches='tight')`` would clip these legends. A change
+was made to include them in the ``tight`` calculations.
-Add ``fill_bar`` argument to ``AnchoredSizeBar``
-------------------------------------------------
-The ``mpl_toolkits`` class
-:class:`~mpl_toolkits.axes_grid1.anchored_artists.AnchoredSizeBar` now has an
-additional ``fill_bar`` argument, which makes the size bar a solid rectangle
-instead of just drawing the border of the rectangle. The default is ``None``,
-and whether or not the bar will be filled by default depends on the value of
-``size_vertical``. If ``size_vertical`` is nonzero, ``fill_bar`` will be set to
-``True``. If ``size_vertical`` is zero then ``fill_bar`` will be set to
-``False``. If you wish to override this default behavior, set ``fill_bar`` to
-``True`` or ``False`` to unconditionally always or never use a filled patch
-rectangle for the size bar.
+Cividis colormap
+----------------
+A new dark blue/yellow colormap named 'cividis' was added. Like
+viridis, cividis is perceptually uniform and colorblind
+friendly. However, cividis also goes a step further: not only is it
+usable by colorblind users, it should actually look effectively
+identical to colorblind and non-colorblind users. For more details,
+see Nunez J, Anderton C, and Renslow R. (submitted). Optimizing
+colormaps with consideration for color vision deficiency to enable
+accurate interpretation of scientific data."
.. plot::
- :include-source:
- :align: center
import matplotlib.pyplot as plt
- from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
+ import numpy as np
- fig, ax = plt.subplots(figsize=(3, 3))
+ fig, ax = plt.subplots()
+ pcm = ax.pcolormesh(np.random.rand(32,32), cmap='cividis')
+ fig.colorbar(pcm)
- bar0 = AnchoredSizeBar(ax.transData, 0.3, 'unfilled', loc=3, frameon=False,
- size_vertical=0.05, fill_bar=False)
- ax.add_artist(bar0)
- bar1 = AnchoredSizeBar(ax.transData, 0.3, 'filled', loc=4, frameon=False,
- size_vertical=0.05, fill_bar=True)
- ax.add_artist(bar1)
- plt.show()
+New style colorblind-friendly color cycle
+-----------------------------------------
-Annotation can use a default arrow style
-----------------------------------------
+A new style defining a color cycle has been added,
+tableau-colorblind10, to provide another option for
+colorblind-friendly plots.
-Annotations now use the default arrow style when setting ``arrowprops={}``,
-rather than no arrow (the new behavior actually matches the documentation).
-Barbs and Quiver Support Dates
-------------------------------
+Support for numpy.datetime64
+----------------------------
-When using the :func:`~matplotlib.axes.Axes.quiver` and
-:func:`~matplotlib.axes.Axes.barbs` plotting methods, it is now possible to
-pass dates, just like for other methods like :func:`~matplotlib.axes.Axes.plot`.
-This also allows these functions to handle values that need unit-conversion
-applied.
+Matplotlib has supported `datetime.datetime` dates for a long time in
+`matplotlib.dates`. We
+now support `numpy.datetime64` dates as well. Anywhere that
+`dateime.datetime` could be used, `numpy.datetime64` can be used. eg::
+ time = np.arange('2005-02-01', '2005-02-02', dtype='datetime64[h]')
+ plt.plot(time)
-Hexbin default line color
--------------------------
-The default ``linecolor`` keyword argument for :func:`~matplotlib.axes.Axes.hexbin`
-is now ``'face'``, and supplying ``'none'`` now prevents lines from being drawn
-around the hexagons.
-Figure.legend() can be called without arguments
------------------------------------------------
+Writing animations with Pillow
+------------------------------
+It is now possible to use Pillow as an animation writer. Supported output
+formats are currently gif (Pillow>=3.4) and webp (Pillow>=5.0). Use e.g. as ::
-Calling :meth:`.Figure.legend` can now be done with no arguments. In this case
-a legend will be created that contains all the artists on all the axes
-contained within the figure.
+ from __future__ import division
-Multiple legend keys for legend entries
----------------------------------------
+ from matplotlib import pyplot as plt
+ from matplotlib.animation import FuncAnimation, PillowWriter
-A legend entry can now contain more than one legend key. The extended
-`~matplotlib.legend_handler.HandlerTuple` class now accepts two parameters:
-``ndivide`` divides the legend area in the specified number of sections;
-``pad`` changes the padding between the legend keys.
+ fig, ax = plt.subplots()
+ line, = plt.plot([0, 1])
-.. figure:: /gallery/text_labels_and_annotations/images/sphx_glr_legend_demo_004.png
- :target: ../gallery/text_labels_and_annotations/legend_demo.html
- :align: center
- :scale: 70
+ def animate(i):
+ line.set_ydata([0, i / 20])
+ return [line]
- Multiple Legend Keys
+ anim = FuncAnimation(fig, animate, 20, blit=True)
+ anim.save("movie.gif", writer=PillowWriter(fps=24))
+ plt.show()
-New parameter `clear` for :func:`~matplotlib.pyplot.figure`
------------------------------------------------------------
+Slider UI widget can snap to discrete values
+--------------------------------------------
-When the pyplot's function :func:`~matplotlib.pyplot.figure` is called
-with a ``num`` parameter, a new window is only created if no existing
-window with the same value exists. A new bool parameter `clear` was
-added for explicitly clearing its existing contents. This is particularly
-useful when utilized in interactive sessions. Since
-:func:`~matplotlib.pyplot.subplots` also accepts keyword arguments
-from :func:`~matplotlib.pyplot.figure`, it can also be used there::
+The slider UI widget can take the optional argument *valstep*. Doing so
+forces the slider to take on only discrete values, starting from *valmin* and
+counting up to *valmax* with steps of size *valstep*.
- import matplotlib.pyplot as plt
+If *closedmax==True*, then the slider will snap to *valmax* as well.
- fig0 = plt.figure(num=1)
- fig0.suptitle("A fancy plot")
- print("fig0.texts: ", [t.get_text() for t in fig0.texts])
- fig1 = plt.figure(num=1, clear=False) # do not clear contents of window
- fig1.text(0.5, 0.5, "Really fancy!")
- print("fig0 is fig1: ", fig0 is fig1)
- print("fig1.texts: ", [t.get_text() for t in fig1.texts])
- fig2, ax2 = plt.subplots(2, 1, num=1, clear=True) # clear contents
- print("fig0 is fig2: ", fig0 is fig2)
- print("fig2.texts: ", [t.get_text() for t in fig2.texts])
+``capstyle`` and ``joinstyle`` attributes added to `Collection`
+---------------------------------------------------------------
- # The output:
- # fig0.texts: ['A fancy plot']
- # fig0 is fig1: True
- # fig1.texts: ['A fancy plot', 'Really fancy!']
- # fig0 is fig2: True
- # fig2.texts: []
+The `Collection` class now has customizable ``capstyle`` and ``joinstyle``
+attributes. This allows the user for example to set the ``capstyle`` of
+errorbars.
-Specify minimum value to format as scalar for ``LogFormatterMathtext``
-----------------------------------------------------------------------
+*pad* kwarg added to ax.set_title
+---------------------------------
-:class:`~matplotlib.ticker.LogFormatterMathtext` now includes the
-option to specify a minimum value exponent to format as a scalar
-(i.e., 0.001 instead of 10\ :sup:`-3`).
+The method `axes.set_title` now has a *pad* kwarg, that specifies the
+distance from the top of an axes to where the title is drawn. The units
+of *pad* is points, and the default is the value of the (already-existing)
+``rcParams['axes.titlepad']``.
-New quiverkey angle keyword argument
+Comparison of 2 colors in Matplotlib
------------------------------------
-Plotting a :func:`~matplotlib.axes.Axes.quiverkey` now admits the
-``angle`` keyword argument, which sets the angle at which to draw the
-key arrow.
-
-Colormap reversed method
-------------------------
-
-The methods :meth:`matplotlib.colors.LinearSegmentedColormap.reversed` and
-:meth:`matplotlib.colors.ListedColormap.reversed` return a reversed
-instance of the Colormap. This implements a way for any Colormap to be
-reversed.
-
+As the colors in Matplotlib can be specified with a wide variety of ways, the
+`matplotlib.colors.same_color` method has been added which checks if
+two `~matplotlib.colors` are the same.
-`Artist.setp` (and `pyplot.setp`) accept a ``file`` argument
-------------------------------------------------------------
-The argument is keyword-only. It allows an output file other than
-`sys.stdout` to be specified. It works exactly like the ``file`` argument
-to `print`.
-
-
-``streamplot`` streamline generation more configurable
-------------------------------------------------------
-
-The starting point, direction, and length of the stream lines can now
-be configured. This allows to follow the vector field for a longer
-time and can enhance the visibility of the flow pattern in some use
-cases.
-
-
-`Axis.set_tick_params` now responds to ``rotation``
----------------------------------------------------
-
-Bulk setting of tick label rotation is now possible via
-:func:`~matplotlib.axis.Axis.set_tick_params` using the ``rotation``
-keyword.
-
-::
-
- ax.xaxis.set_tick_params(which='both', rotation=90)
-
-
-Shading in 3D bar plots
------------------------
+Autoscaling a polar plot snaps to the origin
+--------------------------------------------
-A new ``shade`` parameter has been added the 3D
-`~mpl_toolkits.mplot3d.axes3d.Axes3D.bar` plotting method. The default behavior
-remains to shade the bars, but now users have the option of setting ``shade``
-to ``False``.
+Setting the limits automatically in a polar plot now snaps the radial limit
+to zero if the automatic limit is nearby. This means plotting from zero doesn't
+automatically scale to include small negative values on the radial axis.
+The limits can still be set manually in the usual way using `set_ylim`.
-.. plot::
- :include-source:
- :align: center
- import numpy as np
- import matplotlib.pyplot as plt
- from mpl_toolkits.mplot3d import Axes3D
+PathLike support
+----------------
- x = np.arange(2)
- y = np.arange(3)
- x2d, y2d = np.meshgrid(x, y)
- x, y = x2d.ravel(), y2d.ravel()
- z = np.zeros_like(x)
- dz = x + y
+On Python 3.6+, `~matplotlib.pyplot.savefig`, `~matplotlib.pyplot.imsave`,
+`~matplotlib.pyplot.imread`, and animation writers now accept `os.PathLike`\s
+as input.
- fig = plt.figure(figsize=(4, 6))
- ax1 = fig.add_subplot(2, 1, 1, projection='3d')
- ax1.bar3d(x, y, z, 1, 1, dz, shade=True)
- ax1.set_title('Shading On')
- ax2 = fig.add_subplot(2, 1, 2, projection='3d')
- ax2.bar3d(x, y, z, 1, 1, dz, shade=False)
- ax2.set_title('Shading Off')
+`Axes.tick_params` can set gridline properties
+----------------------------------------------
- plt.show()
+`Tick` objects hold gridlines as well as the tick mark and its label.
+`Axis.set_tick_params`, `Axes.tick_params` and `pyplot.tick_params`
+now have keyword arguments 'grid_color', 'grid_alpha', 'grid_linewidth',
+and 'grid_linestyle' for overriding the defaults in `rcParams`:
+'grid.color', etc.
-New ``which`` Parameter for ``autofmt_xdate``
----------------------------------------------
+`Axes.imshow` clips RGB values to the valid range
+-------------------------------------------------
-A ``which`` parameter now exists for the method
-:func:`~matplotlib.figure.Figure.autofmt_xdate`. This allows a user to format
-``major``, ``minor`` or ``both`` tick labels selectively. The
-default behavior will rotate and align the ``major`` tick labels.
+When `Axes.imshow` is passed an RGB or RGBA value with out-of-range
+values, it now logs a warning and clips them to the valid range.
+The old behaviour, wrapping back in to the range, often hid outliers
+and made interpreting RGB images unreliable.
-::
+Properties in `matplotlibrc` to place xasis and yaxis tick labels
+-----------------------------------------------------------------
- fig.autofmt_xdate(bottom=0.2, rotation=30, ha='right', which='minor')
+Introducing four new boolean properties in `.matplotlibrc` for default
+positions of xaxis and yaxis tick labels, namely,
+`xtick.labeltop`, `xtick.labelbottom`, `ytick.labelright` and
+`ytick.labelleft`. These can also be changed in rcParams.
-New Figure Parameter for ``subplot2grid``
------------------------------------------
+PGI bindings for gtk3
+---------------------
-A ``fig`` parameter now exists for the function
-:func:`~matplotlib.pyplot.subplot2grid`. This allows a user to specify the
-figure where the subplots will be created. If ``fig`` is ``None`` (default)
-then the method will use the current figure retrieved by
-:func:`~matplotlib.pyplot.gcf`.
+The GTK3 backends can now use PGI_ instead of PyGObject_. PGI is a fairly
+incomplete binding for GObject, thus its use is not recommended; its main
+benefit is its availability on Travis (thus allowing CI testing for the gtk3agg
+and gtk3cairo backends).
+The binding selection rules are as follows:
+- if ``gi`` has already been imported, use it; else
+- if ``pgi`` has already been imported, use it; else
+- if ``gi`` can be imported, use it; else
+- if ``pgi`` can be imported, use it; else
+- error out.
-::
+Thus, to force usage of PGI when both bindings are installed, import it first.
- subplot2grid(shape, loc, rowspan=1, colspan=1, fig=myfig)
+.. _PGI: https://pgi.readthedocs.io/en/latest/
+.. _PyGObject: http://pygobject.readthedocs.io/en/latest/#
-Interpolation in ``fill_betweenx``
-----------------------------------
-The ``interpolate`` parameter now exists for the method
-:func:`~matplotlib.axes.Axes.fill_betweenx`. This allows a user to
-interpolate the data and fill the areas in the crossover points,
-similarly to :func:`~matplotlib.axes.Axes.fill_between`.
+Cairo rendering for Qt and WX canvases
+--------------------------------------
+The new ``Qt4Cairo``, ``Qt5Cairo``, and ``WXCairo`` backends allow Qt and Wx
+canvases to use Cairo rendering instead of Agg.
-New keyword argument ``sep`` for EngFormatter
----------------------------------------------
-A new ``sep`` keyword argument has been added to
-:class:`~matplotlib.ticker.EngFormatter` and provides a means to
-define the string that will be used between the value and its
-unit. The default string is ``" "``, which preserves the former
-behavior. Additionally, the separator is now present between the value
-and its unit even in the absence of SI prefix. There was formerly a
-bug that was causing strings like ``"3.14V"`` to be returned instead of
-the expected ``"3.14 V"`` (with the default behavior).
+Added support for QT in new ToolManager
+---------------------------------------
-Extend ``MATPLOTLIBRC`` behavior
---------------------------------
+Now it is possible to use the ToolManager with Qt5
+For example
-The environmental variable can now specify the full file path or the
-path to a directory containing a :file:`matplotlibrc` file.
+ import matplotlib
+ matplotlib.use('QT5AGG')
+ matplotlib.rcParams['toolbar'] = 'toolmanager'
+ import matplotlib.pyplot as plt
-``density`` kwarg to hist
--------------------------
+ plt.plot([1,2,3])
+ plt.show()
-The :meth:`~matplotlib.axes.Axes.hist` method now prefers ``density``
-to ``normed`` to control if the histogram should be normalized,
-following a change upstream to NumPy. This will reduce confusion as
-the behavior has always been that the integral of the histogram is 1
-(rather than sum or maximum value).
+Treat the new Tool classes experimental for now, the API will likely change and perhaps the rcParam as well
+The main example `examples/user_interfaces/toolmanager_sgskip.py` shows more
+details, just adjust the header to use QT instead of GTK3
-Internals
-+++++++++
-New TransformedPatchPath caching object
----------------------------------------
-A newly added :class:`~matplotlib.transforms.TransformedPatchPath` provides a
-means to transform a :class:`~matplotlib.patches.Patch` into a
-:class:`~matplotlib.path.Path` via a :class:`~matplotlib.transforms.Transform`
-while caching the resulting path. If neither the patch nor the transform have
-changed, a cached copy of the path is returned.
+TkAgg backend reworked to support PyPy
+--------------------------------------
-This class differs from the older
-:class:`~matplotlib.transforms.TransformedPath` in that it is able to refresh
-itself based on the underlying patch while the older class uses an immutable
-path.
+PyPy_ can now plot using the TkAgg backend, supported on PyPy 5.9
+and greater (both PyPy for python 2.7 and PyPy for python 3.5).
+.. _PyPy: https:/www.pypy.org
-Abstract base class for movie writers
--------------------------------------
-The new :class:`~matplotlib.animation.AbstractMovieWriter` class defines
-the API required by a class that is to be used as the ``writer`` in the
-:meth:`matplotlib.animation.Animation.save` method. The existing
-:class:`~matplotlib.animation.MovieWriter` class now derives from the new
-abstract base class.
+Python logging library used for debug output
+--------------------------------------------
-Stricter validation of line style rcParams
-------------------------------------------
+Matplotlib has in the past (sporadically) used an internal
+verbose-output reporter. This version converts those calls to using the
+standard python `logging` library.
-The validation of rcParams that are related to line styles
-(``lines.linestyle``, ``boxplot.*.linestyle``, ``grid.linestyle`` and
-``contour.negative_linestyle``) now effectively checks that the values
-are valid line styles. Strings like ``'dashed'`` or ``'--'`` are
-accepted, as well as even-length sequences of on-off ink like ``[1,
-1.65]``. In this latter case, the offset value is handled internally
-and should *not* be provided by the user.
+Support for the old ``rcParams`` ``verbose.level`` and ``verbose.fileo`` is
+dropped.
+The command-line options ``--verbose-helpful`` and ``--verbose-debug`` are
+still accepted, but deprecated. They are now equivalent to setting
+``logging.INFO`` and ``logging.DEBUG``.
-The new validation scheme replaces the former one used for the
-``contour.negative_linestyle`` rcParams, that was limited to
-``'solid'`` and ``'dashed'`` line styles.
+The logger's root name is ``matplotlib`` and can be accessed from programs
+as::
-The validation is case-insensitive. The following are now valid:
+ import logging
+ mlog = logging.getLogger('matplotlib')
-::
+Instructions for basic usage are in :ref:`troubleshooting-faq` and for
+developers in :ref:`contributing`.
- grid.linestyle : (1, 3) # loosely dotted grid lines
- contour.negative_linestyle : dashdot # previously only solid or dashed
+.. _logging: https://docs.python.org/3/library/logging.html
+Improved `repr` for `Transform`\s
+---------------------------------
-pytest
-------
+`Transform`\s now indent their `repr`\s in a more legible manner:
-The automated tests have been switched from `nose` to `pytest`.
+.. code-block:: ipython
-Performance
-+++++++++++
+ In [1]: l, = plt.plot([]); l.get_transform()
+ Out[1]:
+ CompositeGenericTransform(
+ TransformWrapper(
+ BlendedAffine2D(
+ IdentityTransform(),
+ IdentityTransform())),
+ CompositeGenericTransform(
+ BboxTransformFrom(
+ TransformedBbox(
+ Bbox(x0=-0.05500000000000001, y0=-0.05500000000000001, x1=0.05500000000000001, y1=0.05500000000000001),
+ TransformWrapper(
+ BlendedAffine2D(
+ IdentityTransform(),
+ IdentityTransform())))),
+ BboxTransformTo(
+ TransformedBbox(
+ Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
+ BboxTransformTo(
+ TransformedBbox(
+ Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
+ Affine2D(
+ [[ 100. 0. 0.]
+ [ 0. 100. 0.]
+ [ 0. 0. 1.]])))))))
-Path simplification updates
----------------------------
-Line simplification controlled by the ``path.simplify`` and
-``path.simplify_threshold`` parameters has been improved. You should
-notice better rendering performance when plotting large amounts of
-data (as long as the above parameters are set accordingly). Only the
-line segment portion of paths will be simplified -- if you are also
-drawing markers and experiencing problems with rendering speed, you
-should consider using the ``markevery`` option to `~matplotlib.axes.Axes.plot`.
-See the :ref:`performance` section in the usage tutorial for more
-information.
-The simplification works by iteratively merging line segments
-into a single vector until the next line segment's perpendicular
-distance to the vector (measured in display-coordinate space)
-is greater than the ``path.simplify_threshold`` parameter. Thus, higher
-values of ``path.simplify_threshold`` result in quicker rendering times.
-If you are plotting just to explore data and not for publication quality,
-pixel perfect plots, then a value of ``1.0`` can be safely used. If you
-want to make sure your plot reflects your data *exactly*, then you should
-set ``path.simplify`` to false and/or ``path.simplify_threshold`` to ``0``.
-Matplotlib currently defaults to a conservative value of ``1/9``, smaller
-values are unlikely to cause any visible differences in your plots.
-Implement intersects_bbox in c++
---------------------------------
-:meth:`~matplotlib.path.Path.intersects_bbox` has been implemented in
-c++ which improves the performance of automatically placing the legend.
Previous Whats New