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