diff --git a/doc/_static/zenodo_cache/4638398.svg b/doc/_static/zenodo_cache/4638398.svg new file mode 100644 index 000000000000..8b50f14790dd --- /dev/null +++ b/doc/_static/zenodo_cache/4638398.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + DOI + + + DOI + + + 10.5281/zenodo.4638398 + + + 10.5281/zenodo.4638398 + + + \ No newline at end of file diff --git a/doc/_static/zenodo_cache/4649959.svg b/doc/_static/zenodo_cache/4649959.svg new file mode 100644 index 000000000000..a604de20cdd5 --- /dev/null +++ b/doc/_static/zenodo_cache/4649959.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + DOI + + + DOI + + + 10.5281/zenodo.4649959 + + + 10.5281/zenodo.4649959 + + + \ No newline at end of file diff --git a/doc/api/api_changes.rst b/doc/api/api_changes.rst index 534d3dea8f31..b861326911a9 100644 --- a/doc/api/api_changes.rst +++ b/doc/api/api_changes.rst @@ -38,5 +38,4 @@ added to Matplotlib, see :ref:`whats-new` next_api_changes/development/* next_api_changes/removals/* -.. include:: prev_api_changes/api_changes_3.3.1.rst -.. include:: prev_api_changes/api_changes_3.3.0.rst +.. include:: prev_api_changes/api_changes_3.4.0.rst diff --git a/doc/api/next_api_changes/behavior/15127-TAC.rst b/doc/api/next_api_changes/behavior/15127-TAC.rst deleted file mode 100644 index fd68c0150551..000000000000 --- a/doc/api/next_api_changes/behavior/15127-TAC.rst +++ /dev/null @@ -1,8 +0,0 @@ -Raise or warn on registering a colormap twice -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When using `matplotlib.cm.register_cmap` to register a user provided -or third-party colormap it will now raise a `ValueError` if trying to -over-write one of the built in colormaps and warn if trying to over -write a user registered colormap. This may raise for user-registered -colormaps in the future. diff --git a/doc/api/next_api_changes/behavior/16220-AL.rst b/doc/api/next_api_changes/behavior/16220-AL.rst deleted file mode 100644 index e2ecca545d06..000000000000 --- a/doc/api/next_api_changes/behavior/16220-AL.rst +++ /dev/null @@ -1,8 +0,0 @@ -Canvas's callback registry now stored on Figure -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The canonical location of the `~.cbook.CallbackRegistry` used to -handle Figure/Canvas events has been moved from the Canvas to the -Figure. This change should be transparent to almost all users, -however if you are swapping switching the Figure out from on top of a -Canvas or visa versa you may see a change in behavior. diff --git a/doc/api/next_api_changes/behavior/17159-ST.rst b/doc/api/next_api_changes/behavior/17159-ST.rst deleted file mode 100644 index 5aed41e9f352..000000000000 --- a/doc/api/next_api_changes/behavior/17159-ST.rst +++ /dev/null @@ -1,15 +0,0 @@ -Consecutive rasterized draws now merged ---------------------------------------- - -Tracking of depth of raster draws has moved from -`.backend_mixed.MixedModeRenderer.start_rasterizing` and -`.backend_mixed.MixedModeRenderer.stop_rasterizing` into -`.artist.allow_rasterization`. This means the start and stop functions are -only called when the rasterization actually needs to be started and stopped. - -The output of vector backends will change in the case that rasterized -elements are merged. This should not change the appearance of outputs. - -The renders in 3rd party backends are now expected to have -``self._raster_depth`` and ``self._rasterizing`` initialized to ``0`` and -``False`` respectively. diff --git a/doc/api/next_api_changes/behavior/17371-IHI.rst b/doc/api/next_api_changes/behavior/17371-IHI.rst deleted file mode 100644 index 34fa9e03ae85..000000000000 --- a/doc/api/next_api_changes/behavior/17371-IHI.rst +++ /dev/null @@ -1,7 +0,0 @@ -ioff and ion can be used as context managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`.pyplot.ion` and `.pyplot.ioff` may now be used as context managers to create -a context with interactive mode on, or off respectively. The old behavior of -calling these functions is maintained. To use the new functionality -call as ``with plt.ioff():`` diff --git a/doc/api/next_api_changes/behavior/17494-JMK.rst b/doc/api/next_api_changes/behavior/17494-JMK.rst deleted file mode 100644 index 2833ff3dcdbf..000000000000 --- a/doc/api/next_api_changes/behavior/17494-JMK.rst +++ /dev/null @@ -1,25 +0,0 @@ -Constrained layout rewrite -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The layout manager ``constrained_layout`` was re-written with different -outer constraints that should be more robust to complicated subplot layouts. -User-facing changes are: - -- some poorly constrained layouts will have different width/height plots than - before. -- colorbars now respect the ``anchor`` keyword argument of - `matplotlib.colorbar.make_axes` -- colorbars are wider. -- colorbars in different rows or columns line up more robustly. -- *hspace* and *wspace* options to `.Figure.set_constrained_layout_pads` - were twice as wide as the docs said they should be. So these now follow - the docs. - -This feature will remain "experimental" until the new changes have been -used enough by users, so we anticipate version 3.5 or 3.6. On the other hand, -``constrained_layout`` is extensively tested and used in examples in the -library, so using it should be safe, but layouts may not be exactly the same -as more development takes place. - -Details of using ``constrained_layout``, and its algorithm are available at -:doc:`/tutorials/intermediate/constrainedlayout_guide` diff --git a/doc/api/next_api_changes/behavior/17727-JMK.rst b/doc/api/next_api_changes/behavior/17727-JMK.rst deleted file mode 100644 index cc6716f29184..000000000000 --- a/doc/api/next_api_changes/behavior/17727-JMK.rst +++ /dev/null @@ -1,10 +0,0 @@ - -Date locator for DAILY interval now returns middle of month -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The `matplotlib.dates.AutoDateLocator` has a default of -``interval_multiples=True`` that attempts to align ticks with the start of -meaningful intervals like the start of the month, or start of the day, etc. -That lead to approximately 140-day intervals being mapped to the first and 22nd -of the month. This has now been changed so that it chooses the first and -15th of the month, which is probably what most people want. diff --git a/doc/api/next_api_changes/behavior/17791-AL.rst b/doc/api/next_api_changes/behavior/17791-AL.rst deleted file mode 100644 index 64147f2122f1..000000000000 --- a/doc/api/next_api_changes/behavior/17791-AL.rst +++ /dev/null @@ -1,28 +0,0 @@ -Harmonized key event data across backends -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The different backends wth key translation support, now handle 'shift' -as a sometimes modifier, where the 'shift' prefix won't be added if a -key translation was made. - -The *matplotlib.backends.backend_qt5.SPECIAL_KEYS* dictionary contains -keys that do *not* return their unicode name instead they have -manually specified names. The name for *QtCore.Qt.Key_Meta* has -changed to 'meta' to be consistent with the other GUI backends. - -The WebAgg backend now handles key translations correctly on non-US -keyboard layouts. - - -**GTK/Tk key name changes** - -The handling of non-ASCII keypresses (as reported in the KeyEvent passed to -``key_press_event``-handlers) in the GTK and Tk backends now correctly reports -Unicode characters (e.g., €), and better respects NumLock on the numpad. - -The following key names have changed; the new names are consistent with those -reported by the Qt backends: - -- The "Break/Pause" key (keysym 0xff13) is now reported as "pause" instead of - "break" (this is also consistent with the X key name). -- The numpad "delete" key is now reported as "delete" instead of "dec". diff --git a/doc/api/next_api_changes/behavior/17828-TAC.rst b/doc/api/next_api_changes/behavior/17828-TAC.rst deleted file mode 100644 index 5781f9088f82..000000000000 --- a/doc/api/next_api_changes/behavior/17828-TAC.rst +++ /dev/null @@ -1,20 +0,0 @@ -xunits=None and yunits=None passed as kwargs are treated as "no action" -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Many (but not all) of the methods on `~.axes.Axes` take the (undocumented) -kwargs *xunits* and *yunits* that will update the units on the given -Axis by calling `.Axis.set_units` and `.Axis.update_units`. - -Previously if `None` was passed it would clear the value stored in -``.Axis.units`` which will in turn break converters (notably -`.StrCategoryConverter`) which rely on the value in -``.Axis.units`` to work properly. - -This changes the semantics of ``ax.meth(..., xunits=None, -yunits=None)`` from "please clear the units" to "do the default thing -as if they had not been passed" which is consistent with the standard -behavior of Matplotlib keyword arguments. - -If you were relying on passing ``xuints=None`` to plotting methods to -clear the ``.Axes.units`` attribute, directly call `.Axis.set_units` (and -`.Axis.update_units` if you also require the converter to be updated). diff --git a/doc/api/next_api_changes/behavior/17834-AL.rst b/doc/api/next_api_changes/behavior/17834-AL.rst deleted file mode 100644 index 027077dc1598..000000000000 --- a/doc/api/next_api_changes/behavior/17834-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -``Colorbar.dividers`` changes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This attribute is now always a `.LineCollection` -- an empty one if -``drawedges`` is False. Its default colors and linewidth (:rc:`axes.edgecolor`, -:rc:`axes.linewidth`) are now resolved at instantiation time, not at draw time. diff --git a/doc/api/next_api_changes/behavior/17897-KLP.rst b/doc/api/next_api_changes/behavior/17897-KLP.rst deleted file mode 100644 index f53534e8d1b9..000000000000 --- a/doc/api/next_api_changes/behavior/17897-KLP.rst +++ /dev/null @@ -1,11 +0,0 @@ -pyplot.specgram always uses origin='upper' -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Previously if ``image.origin`` was set to something other than 'upper' or if the -``origin`` keyword argument was passed with a value other than 'upper', the spectrogram -itself would flip, but the axes would remain oriented for an origin value of 'upper', so -that the resulting plot was incorrectly labelled. - -Now, the ``origin`` keyword argument is not supported and the ``image.origin`` rcParam is -ignored. The function matplotlib.pyplot.specgram is forced to use ``origin='upper'``, so -that the axes are correct for the plotted spectrogram. diff --git a/doc/api/next_api_changes/behavior/17930-ES.rst b/doc/api/next_api_changes/behavior/17930-ES.rst deleted file mode 100644 index c42b95b6f52f..000000000000 --- a/doc/api/next_api_changes/behavior/17930-ES.rst +++ /dev/null @@ -1,8 +0,0 @@ -``Axes.errorbar`` cycles non-color properties correctly -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Formerly, `.Axes.errorbar` incorrectly skipped the Axes property cycle if a -color was explicitly specified, even if the property cycler was for other -properties (such as line style). Now, `.Axes.errorbar` will advance the Axes -property cycle as done for `.Axes.plot`, i.e., as long as all properties in the -cycler are not explicitly passed. diff --git a/doc/api/next_api_changes/behavior/18127-ES.rst b/doc/api/next_api_changes/behavior/18127-ES.rst deleted file mode 100644 index 252796ab34ef..000000000000 --- a/doc/api/next_api_changes/behavior/18127-ES.rst +++ /dev/null @@ -1,11 +0,0 @@ -Autoscaling in Axes3D -~~~~~~~~~~~~~~~~~~~~~ - -In Matplotlib 3.2.0, autoscaling was made lazier for 2D Axes, i.e., limits -would only be recomputed when actually rendering the canvas, or when the user -queries the Axes limits. This performance improvement is now extended to -`.Axes3D`. This also fixes some issues with autoscaling being triggered -unexpectedly in Axes3D. - -Please see :ref:`the API change for 2D Axes ` -for further details. diff --git a/doc/api/next_api_changes/behavior/18172-IHI.rst b/doc/api/next_api_changes/behavior/18172-IHI.rst deleted file mode 100644 index 6a88acbeb71a..000000000000 --- a/doc/api/next_api_changes/behavior/18172-IHI.rst +++ /dev/null @@ -1,6 +0,0 @@ -webAgg backend no longer reports a middle click as a right click -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Previously when using the webAgg backend the event passed to a callback -by ``fig.canvas.mpl_connect('mouse_button_event', callback)`` on a middle click -would report `.MouseButton.RIGHT` instead of `.MouseButton.MIDDLE` diff --git a/doc/api/next_api_changes/behavior/18193-BKB.rst b/doc/api/next_api_changes/behavior/18193-BKB.rst deleted file mode 100644 index 67cfc79bfa13..000000000000 --- a/doc/api/next_api_changes/behavior/18193-BKB.rst +++ /dev/null @@ -1,10 +0,0 @@ -ID attribute of XML tags in SVG files now based on SHA256 rather than MD5 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Matplotlib generates unique ID attributes for various tags in SVG files. -Matplotlib previously generated these unique IDs using the first 10 -characters of an MD5 hash. The MD5 hashing algorithm is not available in -Python on systems with Federal Information Processing Standards (FIPS) -enabled. Matplotlib now uses the first 10 characters of an SHA256 hash -instead. SVG files that would otherwise match those saved with earlier -versions of matplotlib, will have different ID attributes. diff --git a/doc/api/next_api_changes/behavior/18203-DS.rst b/doc/api/next_api_changes/behavior/18203-DS.rst deleted file mode 100644 index cf566f63f057..000000000000 --- a/doc/api/next_api_changes/behavior/18203-DS.rst +++ /dev/null @@ -1,5 +0,0 @@ -Locators and formatters -~~~~~~~~~~~~~~~~~~~~~~~ - -Axis locators and formatters must now be subclasses of -`~matplotlib.ticker.Locator` and `~matplotlib.ticker.Formatter` respectively. diff --git a/doc/api/next_api_changes/behavior/18320-ES.rst b/doc/api/next_api_changes/behavior/18320-ES.rst deleted file mode 100644 index c805b4ac40f6..000000000000 --- a/doc/api/next_api_changes/behavior/18320-ES.rst +++ /dev/null @@ -1,6 +0,0 @@ -``Colorbar`` outline is now a ``Spine`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The outline of `~matplotlib.colorbar.Colorbar` is now a `.Spine` and drawn as -one, instead of a `.Polygon` drawn as an artist. This ensures it will always -be drawn after all artists, consistent with Spines on normal Axes. diff --git a/doc/api/next_api_changes/behavior/18440-AL.rst b/doc/api/next_api_changes/behavior/18440-AL.rst deleted file mode 100644 index 8b9447c969ab..000000000000 --- a/doc/api/next_api_changes/behavior/18440-AL.rst +++ /dev/null @@ -1,2 +0,0 @@ -docstring.Substitution now always dedents docstrings before string interpolation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/api/next_api_changes/behavior/18525-ES.rst b/doc/api/next_api_changes/behavior/18525-ES.rst deleted file mode 100644 index 457a9f1200d9..000000000000 --- a/doc/api/next_api_changes/behavior/18525-ES.rst +++ /dev/null @@ -1,5 +0,0 @@ -``mplot3d.art3d.get_dir_vector`` always returns NumPy arrays -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For consistency, `~.mplot3d.art3d.get_dir_vector` now always returns NumPy -arrays, even if the input is a 3-element iterable. diff --git a/doc/api/next_api_changes/behavior/18532-AL.rst b/doc/api/next_api_changes/behavior/18532-AL.rst deleted file mode 100644 index 9d8042b0adc3..000000000000 --- a/doc/api/next_api_changes/behavior/18532-AL.rst +++ /dev/null @@ -1,4 +0,0 @@ -Consistent behavior of ``draw_if_interactive()`` across backends -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`.pyplot.draw_if_interactive` no longer shows the window (if it was previously -unshown) on the tk and nbagg backends, consistently with all other backends. diff --git a/doc/api/next_api_changes/behavior/18560-AL.rst b/doc/api/next_api_changes/behavior/18560-AL.rst deleted file mode 100644 index abe54fa2e37e..000000000000 --- a/doc/api/next_api_changes/behavior/18560-AL.rst +++ /dev/null @@ -1,4 +0,0 @@ -Parasite Axes pcolor and pcolormesh now defaults to placing grid edges at integers, not half-integers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This is consistent with `~.Axes.pcolor` and `~.Axes.pcolormesh`. diff --git a/doc/api/next_api_changes/behavior/18564-AL.rst b/doc/api/next_api_changes/behavior/18564-AL.rst deleted file mode 100644 index 438949180e6c..000000000000 --- a/doc/api/next_api_changes/behavior/18564-AL.rst +++ /dev/null @@ -1,25 +0,0 @@ -Axes3D automatically adding self to Figure is deprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -New `.Axes3D` objects previously added themselves to figures when they -were created, unlike all other Axes classes, which lead to them being -added twice if ``fig.add_subplot(111, projection='3d')`` was called. - -This behavior is now deprecated and will warn. The new keyword argument -*auto_add_to_figure* controls the behavior and can be used to suppress the -warning. The default value will change to False in mpl3.5, and any -non-False value will be an error in mpl3.6. - -In the future, `.Axes3D` will need to be explicitly added to the -figure :: - - fig = Figure() - # create Axes3D - ax = Axes3d(fig) - # add to Figure - fig.add_axes(ax) - -as needs to be done for other `.axes.Axes` sub-classes. Or, a 3-d -projection can be made via:: - - fig.add_subplot(projection='3d') diff --git a/doc/api/next_api_changes/behavior/18623-AL.rst b/doc/api/next_api_changes/behavior/18623-AL.rst deleted file mode 100644 index b6c3c1bddcbe..000000000000 --- a/doc/api/next_api_changes/behavior/18623-AL.rst +++ /dev/null @@ -1,8 +0,0 @@ -Changed cursive and fantasy font definitions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The Comic Sans and Comic Neue fonts were moved from the default :rc:`font.fantasy` -list to the default :rc:`font.cursive` setting, in accordance with the CSS -font families example_ and in order to provide a cursive font present in -Microsoft's Core Fonts set. - -.. _example: https://www.w3.org/Style/Examples/007/fonts.en.html diff --git a/doc/api/next_api_changes/behavior/18772-BGB.rst b/doc/api/next_api_changes/behavior/18772-BGB.rst deleted file mode 100644 index bf1536c5494b..000000000000 --- a/doc/api/next_api_changes/behavior/18772-BGB.rst +++ /dev/null @@ -1,12 +0,0 @@ -Annotations with ``annotation_clip`` no longer affect ``tight_layout`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Previously, `.text.Annotation.get_tightbbox` always returned the full -`.text.Annotation.get_window_extent` of the object, independent of the value -of ``annotation_clip``. `.text.Annotation.get_tightbbox` now correctly takes -this extra clipping box into account, meaning that `~.text.Annotation`\s that -are not drawn because of ``annotation_clip`` will not count towards the axes -bounding box calculations, such as those done by `~.pyplot.tight_layout`. - -This is now consistent with the API described in `~.artist.Artist`, which -specifies that ``get_window_extent`` should return the full extents and -``get_tightbbox`` should "account for any clipping". diff --git a/doc/api/next_api_changes/behavior/18894-AL.rst b/doc/api/next_api_changes/behavior/18894-AL.rst deleted file mode 100644 index 06559d7705f4..000000000000 --- a/doc/api/next_api_changes/behavior/18894-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -``RendererPS.set_font`` is no longer a no-op in AFM mode -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It now sets the current PostScript font in all cases. diff --git a/doc/api/next_api_changes/behavior/18989-TH.rst b/doc/api/next_api_changes/behavior/18989-TH.rst deleted file mode 100644 index d286e88da8cd..000000000000 --- a/doc/api/next_api_changes/behavior/18989-TH.rst +++ /dev/null @@ -1,5 +0,0 @@ -The Artist property *rasterized* cannot be *None* anymore -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It is now a bool only. Before the default was *None* and -`.Artist.set_rasterized` documented to accept *None*. However, *None* did not -have a special meaning and was treated as *False*. diff --git a/doc/api/next_api_changes/behavior/19438-TAC.rst b/doc/api/next_api_changes/behavior/19438-TAC.rst deleted file mode 100644 index c491c3a30fbd..000000000000 --- a/doc/api/next_api_changes/behavior/19438-TAC.rst +++ /dev/null @@ -1,65 +0,0 @@ -``plt.subplot`` re-selection without keyword arguments -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The purpose of `.pyplot.subplot` is to facilitate creating and re-selecting -Axes in a Figure when working strictly in the implicit pyplot API. When -creating new Axes it is possible to select the projection (e.g. polar, 3D, or -various cartographic projections) as well as to pass additional keyword -arguments through to the Axes-subclass that is created. - -The first time `.pyplot.subplot` is called for a given position in the Axes -grid it always creates and return a new Axes with the passed arguments and -projection (defaulting to a rectilinear). On subsequent calls to -`.pyplot.subplot` we have to determine if an existing Axes has equivalent -parameters, in which case in should be selected as the current Axes and -returned, or different parameters, in which case a new Axes is created and the -existing Axes is removed. This leaves the question of what is "equivalent -parameters". - -Previously it was the case that an existing Axes subclass, except for Axes3D, -would be considered equivalent to a 2D rectilinear Axes, despite having -different projections, if the kwargs (other than *projection*) matched. Thus -:: - - ax1 = plt.subplot(1, 1, 1, projection='polar') - ax2 = plt.subplots(1, 1, 1) - ax1 is ax2 - -We are embracing this long standing behavior to ensure that in the case when no -keyword arguments (of any sort) are passed to `.pyplot.subplot` any existing -Axes is returned, without consideration for keywords or projection used to -initially create it. This will cause a change in behavior when additional -keywords were passed to the original axes :: - - ax1 = plt.subplot(111, projection='polar', theta_offset=.75) - ax2 = plt.subplots(1, 1, 1) - ax1 is ax2 # new behavior - # ax1 is not ax2 # old behavior, made a new axes - - ax1 = plt.subplot(111, label='test') - ax2 = plt.subplots(1, 1, 1) - ax1 is ax2 # new behavior - # ax1 is not ax2 # old behavior, made a new axes - - -For the same reason, if there was an existing Axes that was not rectilinear, -passing ``projection='rectilinear'`` would reuse the existing Axes :: - - ax1 = plt.subplot(projection='polar') - ax2 = plt.subplot(projection='rectilinear') - ax1 is not ax2 # new behavior, makes new axes - # ax1 is ax2 # old behavior - - -contrary to the users request. - -Previously Axes3D could not be re-selected with `.pyplot.subplot` due to an -unrelated bug (also fixed in mpl3.4). While Axes3D are now consistent with all -other projections there is a change in behavior for :: - - plt.subplot(projection='3d') # create a 3D Axes - - plt.subplot() # now returns existing 3D Axes, but - # previously created new 2D Axes - - plt.subplot(projection='rectilinear') # to get a new 2D Axes diff --git a/doc/api/next_api_changes/behavior/8987-Z.rst b/doc/api/next_api_changes/behavior/8987-Z.rst deleted file mode 100644 index a76d5614cd07..000000000000 --- a/doc/api/next_api_changes/behavior/8987-Z.rst +++ /dev/null @@ -1,6 +0,0 @@ -``ScalarFormatter`` *useLocale* option obeys grouping -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When the `~.ScalarFormatter` option *useLocale* is enabled (or -:rc:`axes.formatter.use_locale` is *True*) and the configured locale uses -grouping, a separator will be added as described in `locale.format_string`. diff --git a/doc/api/next_api_changes/deprecations/00009-AL.rst b/doc/api/next_api_changes/deprecations/00009-AL.rst deleted file mode 100644 index db8fbfd80f0c..000000000000 --- a/doc/api/next_api_changes/deprecations/00009-AL.rst +++ /dev/null @@ -1,19 +0,0 @@ -``dpi_cor`` property of `.FancyArrowPatch` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This parameter is considered internal and deprecated. - -Colorbar docstrings -~~~~~~~~~~~~~~~~~~~ -The following globals in :mod:`matplotlib.colorbar` are deprecated: -``colorbar_doc``, ``colormap_kw_doc``, ``make_axes_kw_doc``. - -``FancyBboxPatch(..., boxstyle="custom", bbox_transmuter=...)`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In order to use a custom boxstyle, directly pass it as the *boxstyle* argument -to `.FancyBboxPatch`. This was previously already possible, and is consistent -with custom arrow styles and connection styles. - -``FigureCanvasBase.get_window_title`` and ``FigureCanvasBase.set_window_title`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... are deprecated. Use the corresponding methods on the FigureManager if -using pyplot, or GUI-specific methods if embedding. diff --git a/doc/api/next_api_changes/deprecations/12443-AL.rst b/doc/api/next_api_changes/deprecations/12443-AL.rst deleted file mode 100644 index cc1b6bac2c04..000000000000 --- a/doc/api/next_api_changes/deprecations/12443-AL.rst +++ /dev/null @@ -1,8 +0,0 @@ -``colorbar`` now warns when the mappable's axes is different from the current axes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Currently, `.Figure.colorbar` and `.pyplot.colorbar` steal space by default -from the current axes to place the colorbar. In a future version, they will -steal space from the mappable's axes instead. In preparation for this change, -`.Figure.colorbar` and `.pyplot.colorbar` now emits a warning when the current -axes is not the same as the mappable's axes. diff --git a/doc/api/next_api_changes/deprecations/17662-TAC.rst b/doc/api/next_api_changes/deprecations/17662-TAC.rst deleted file mode 100644 index 7fdfce7977cb..000000000000 --- a/doc/api/next_api_changes/deprecations/17662-TAC.rst +++ /dev/null @@ -1,22 +0,0 @@ -Increase minimum supported versions of Python and dependencies -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -For Maptlotlib 3.4 the :ref:`minimum supported versions ` -are being bumped - -+------------+-----------------+---------------+ -| Dependency | min in mpl3.3 | min in mpl3.4 | -+============+=================+===============+ -| Python | 3.6 | 3.7 | -+------------+-----------------+---------------+ -| dateutil | 2.1 | 2.2.1 | -+------------+-----------------+---------------+ -| numpy | 1.15 | 1.16 | -+------------+-----------------+---------------+ -| pyparsing | 2.0.3 | 2.2.1 | -+------------+-----------------+---------------+ - - -This consistent with our :ref:`min_deps_policy` and `NEP29 -`__ diff --git a/doc/api/next_api_changes/deprecations/17684-AL.rst b/doc/api/next_api_changes/deprecations/17684-AL.rst deleted file mode 100644 index 10923c0d50d5..000000000000 --- a/doc/api/next_api_changes/deprecations/17684-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -Passing `bytes` to ``FT2Font.set_text`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated, pass `str` instead. diff --git a/doc/api/next_api_changes/deprecations/17737-AL.rst b/doc/api/next_api_changes/deprecations/17737-AL.rst deleted file mode 100644 index 1757a8563639..000000000000 --- a/doc/api/next_api_changes/deprecations/17737-AL.rst +++ /dev/null @@ -1,6 +0,0 @@ -BoxStyles are now called without passing the *mutation_aspect* parameter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Mutation aspect is now handled by the artist itself. Hence the -*mutation_aspect* parameter of ``BoxStyle._Base.__call__`` is deprecated, and -custom boxstyles should be implemented to not require this parameter (it can be -left as a parameter defaulting to 1 for back-compatibility). diff --git a/doc/api/next_api_changes/deprecations/17788-AL.rst b/doc/api/next_api_changes/deprecations/17788-AL.rst deleted file mode 100644 index 7f4acc9894e0..000000000000 --- a/doc/api/next_api_changes/deprecations/17788-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -``RendererAgg.get_content_extents``, ``RendererAgg.tostring_rgba_minimized`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... are deprecated. diff --git a/doc/api/next_api_changes/deprecations/17926-ES.rst b/doc/api/next_api_changes/deprecations/17926-ES.rst deleted file mode 100644 index 598737c7457a..000000000000 --- a/doc/api/next_api_changes/deprecations/17926-ES.rst +++ /dev/null @@ -1,5 +0,0 @@ -Invalid hatch pattern characters are no longer ignored -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When specifying hatching patterns, characters that are not recognized will -raise a DeprecationWarning. In the future, this will become a hard error. diff --git a/doc/api/next_api_changes/deprecations/18002-AL.rst b/doc/api/next_api_changes/deprecations/18002-AL.rst deleted file mode 100644 index a61429712401..000000000000 --- a/doc/api/next_api_changes/deprecations/18002-AL.rst +++ /dev/null @@ -1,11 +0,0 @@ -Deprecation of various mathtext helpers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The ``MathtextBackendPdf``, ``MathtextBackendPs``, ``MathtextBackendSvg``, -and ``MathtextBackendCairo`` classes from the :mod:`.mathtext` module, as -well as the corresponding ``.mathtext_parser`` attributes on ``RendererPdf``, -``RendererPS``, ``RendererSVG``, and ``RendererCairo``, are deprecated. The -``MathtextBackendPath`` class can be used to obtain a list of glyphs and -rectangles in a mathtext expression, and renderer-specific logic should be -directly implemented in the renderer. - -``StandardPsFonts.pswriter`` is unused and deprecated. diff --git a/doc/api/next_api_changes/deprecations/18003-AL.rst b/doc/api/next_api_changes/deprecations/18003-AL.rst deleted file mode 100644 index c5c941e784ca..000000000000 --- a/doc/api/next_api_changes/deprecations/18003-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -mathtext.Fonts.destroy -~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated, because Fonts do not create reference loops anyways. diff --git a/doc/api/next_api_changes/deprecations/18004-AL.rst b/doc/api/next_api_changes/deprecations/18004-AL.rst deleted file mode 100644 index fbdb4e6ff958..000000000000 --- a/doc/api/next_api_changes/deprecations/18004-AL.rst +++ /dev/null @@ -1,4 +0,0 @@ -*facename* parameter of ``mathtext.Fonts.render_glyph`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This parameter was renamed to *font* for consistency with the rest of the -``Fonts`` API. diff --git a/doc/api/next_api_changes/deprecations/18226-ES.rst b/doc/api/next_api_changes/deprecations/18226-ES.rst deleted file mode 100644 index ad85203d7876..000000000000 --- a/doc/api/next_api_changes/deprecations/18226-ES.rst +++ /dev/null @@ -1,12 +0,0 @@ -Widget class internals -~~~~~~~~~~~~~~~~~~~~~~ - -Several `.widgets.Widget` class internals have been privatized and deprecated: - -* ``AxesWidget.cids`` -* ``Button.cnt`` and ``Button.observers`` -* ``CheckButtons.cnt`` and ``CheckButtons.observers`` -* ``RadioButtons.cnt`` and ``RadioButtons.observers`` -* ``Slider.cnt`` and ``Slider.observers`` -* ``TextBox.cnt``, ``TextBox.change_observers`` and - ``TextBox.submit_observers`` diff --git a/doc/api/next_api_changes/deprecations/18302-ES.rst b/doc/api/next_api_changes/deprecations/18302-ES.rst deleted file mode 100644 index 6a72743e8302..000000000000 --- a/doc/api/next_api_changes/deprecations/18302-ES.rst +++ /dev/null @@ -1,26 +0,0 @@ -3D properties on renderers -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The properties of the 3D Axes that were placed on the Renderer during draw are -now deprecated: - -* ``renderer.M`` -* ``renderer.eye`` -* ``renderer.vvec`` -* ``renderer.get_axis_position`` - -These attributes are all available via `.Axes3D`, which can be accessed via -``self.axes`` on all `.Artist`\s. - -*renderer* argument of ``do_3d_projection`` method for ``Collection3D``/``Patch3D`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The *renderer* argument for the ``do_3d_projection`` method on ``Collection3D`` -and ``Patch3D`` is no longer necessary, and passing it during draw is -deprecated. - -*project* argument of ``draw`` method for ``Line3DCollection`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The *project* argument for the ``draw`` method on ``Line3DCollection`` is -deprecated. Call `.Line3DCollection.do_3d_projection` explicitly instead. diff --git a/doc/api/next_api_changes/deprecations/18378-AL.rst b/doc/api/next_api_changes/deprecations/18378-AL.rst deleted file mode 100644 index ce9ace65981e..000000000000 --- a/doc/api/next_api_changes/deprecations/18378-AL.rst +++ /dev/null @@ -1,9 +0,0 @@ -Deprecation of mathtext internals -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The following API elements previously exposed by the :mod:`.mathtext` module -are considered to be implementation details of and public access to them is -deprecated: ``Fonts`` and all its subclasses, ``FontConstantsBase`` and all its -subclasses, ``Node`` and all its subclasses, ``Ship``, ``ship``, ``Error``, -``Parser``, ``SHRINK_FACTOR``, ``GROW_FACTOR``, ``NUM_SIZE_LEVELS``, -``latex_to_bakoma``, ``latex_to_cmex``, ``latex_to_standard``, -``stix_virtual_fonts``, ``tex2uni``. diff --git a/doc/api/next_api_changes/deprecations/18527-AL.rst b/doc/api/next_api_changes/deprecations/18527-AL.rst deleted file mode 100644 index 3fca934bbf3b..000000000000 --- a/doc/api/next_api_changes/deprecations/18527-AL.rst +++ /dev/null @@ -1,4 +0,0 @@ -``ColorbarPatch`` and ``colorbar_factory`` are deprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -All the relevant functionality has been moved to the -`~matplotlib.colorbar.Colorbar` class. diff --git a/doc/api/next_api_changes/deprecations/18528-AL.rst b/doc/api/next_api_changes/deprecations/18528-AL.rst deleted file mode 100644 index 73674f8611b0..000000000000 --- a/doc/api/next_api_changes/deprecations/18528-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -*minimumdescent* parameter/property of ``TextArea`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`.offsetbox.TextArea` has behaved as if *minimumdescent* was always True -(regardless of the value to which it was set) since Matplotlib 1.3, so the -parameter/property is deprecated. diff --git a/doc/api/next_api_changes/deprecations/18564-AL.rst b/doc/api/next_api_changes/deprecations/18564-AL.rst deleted file mode 100644 index d4e38763a196..000000000000 --- a/doc/api/next_api_changes/deprecations/18564-AL.rst +++ /dev/null @@ -1,19 +0,0 @@ -Subplot-related attributes and methods -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Some ``SubplotBase`` methods and attributes have been deprecated and/or moved -to `.SubplotSpec`: ``get_geometry`` (use `.SubplotBase.get_subplotspec` -instead), ``change_geometry`` (use `.SubplotBase.set_subplotspec` -instead), ``is_first_row``, ``is_last_row``, ``is_first_col``, -``is_last_col`` (use the corresponding methods on the `.SubplotSpec` -instance instead), ``update_params`` (now a no-op), ``figbox`` (use -``ax.get_subplotspec().get_geometry(ax.figure)`` instead to recompute -the geometry, or ``ax.get_position()`` to read its current value), -``numRows``, ``numCols`` (use the ``nrows`` and ``ncols`` attribute on the -`.GridSpec` instead). Likewise, the ``get_geometry``, ``change_geometry``, -``update_params``, and ``figbox`` methods/attributes of `.SubplotDivider` have -been deprecated, with similar replacements. - -Axes constructor -~~~~~~~~~~~~~~~~ -Parameters of the Axes constructor other than *fig* and *rect* will become -keyword-only in a future version. diff --git a/doc/api/next_api_changes/deprecations/18591-AL.rst b/doc/api/next_api_changes/deprecations/18591-AL.rst deleted file mode 100644 index 67398d5196fc..000000000000 --- a/doc/api/next_api_changes/deprecations/18591-AL.rst +++ /dev/null @@ -1,24 +0,0 @@ -``MathTextParser("bitmap")`` is deprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The associated APIs ``MathtextBackendBitmap``, ``MathTextParser.to_mask``, -``MathTextParser.to_rgba``, ``MathTextParser.to_png``, and -``MathTextParser.get_depth`` are likewise deprecated. - -To convert a text string to an image, either directly draw the text to an -empty `.Figure` and save the figure using a tight bbox, as demonstrated in -:doc:`/gallery/text_labels_and_annotations/mathtext_asarray`, or use -`.mathtext.math_to_image`. - -When using `.math_to_image`, text color can be set with e.g.:: - - with plt.rc_context({"text.color": "tab:blue"}): - mathtext.math_to_image(text, filename) - -and an RGBA array can be obtained with e.g.:: - - from io import BytesIO - buf = BytesIO() - mathtext.math_to_image(text, buf, format="png") - buf.seek(0) - rgba = plt.imread(buf) diff --git a/doc/api/next_api_changes/deprecations/18649-TH.rst b/doc/api/next_api_changes/deprecations/18649-TH.rst deleted file mode 100644 index 7d73d9bbe362..000000000000 --- a/doc/api/next_api_changes/deprecations/18649-TH.rst +++ /dev/null @@ -1,7 +0,0 @@ -``imread()`` reading from URLs -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Passing a URL to `~.pyplot.imread()` is deprecated. Please open the URL for -reading and directly use the Pillow API -(``PIL.Image.open(urllib.request.urlopen(url))``, or -``PIL.Image.open(io.BytesIO(requests.get(url).content))``) instead. diff --git a/doc/api/next_api_changes/deprecations/18657-TH.rst b/doc/api/next_api_changes/deprecations/18657-TH.rst deleted file mode 100644 index d6e07e879041..000000000000 --- a/doc/api/next_api_changes/deprecations/18657-TH.rst +++ /dev/null @@ -1,12 +0,0 @@ -Deprecation-related functionality is considered internal -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The module ``matplotlib.cbook.deprecation`` is considered internal and will be -removed from the public API. This also holds for deprecation-related re-imports -in ``matplotlib.cbook``, i.e. ``matplotlib.cbook.deprecated()``, -``matplotlib.cbook.warn_deprecated()``, -``matplotlib.cbook.MatplotlibDeprecationWarning`` and -``matplotlib.cbook.mplDeprecation``. - -If needed, external users may import ``MatplotlibDeprecationWarning`` directly -from the ``matplotlib`` namespace. ``mplDeprecation`` is only an alias of -``MatplotlibDeprecationWarning`` and should not be used anymore. \ No newline at end of file diff --git a/doc/api/next_api_changes/deprecations/18673-AL.rst b/doc/api/next_api_changes/deprecations/18673-AL.rst deleted file mode 100644 index f641ca3daedc..000000000000 --- a/doc/api/next_api_changes/deprecations/18673-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -``ParasiteAxesAuxTransBase.update_viewlim`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated; use ``apply_aspect`` instead. diff --git a/doc/api/next_api_changes/deprecations/18675-AL.rst b/doc/api/next_api_changes/deprecations/18675-AL.rst deleted file mode 100644 index a41dbd5979e4..000000000000 --- a/doc/api/next_api_changes/deprecations/18675-AL.rst +++ /dev/null @@ -1,11 +0,0 @@ -ParasiteAxesAuxTransBase -~~~~~~~~~~~~~~~~~~~~~~~~ -The functionality of that mixin class has been moved to the base -``ParasiteAxesBase`` class. Thus, ``ParasiteAxesAuxTransBase``, -``ParasiteAxesAuxTrans``, and ``parasite_axes_auxtrans_class_factory`` are -deprecated. - -In general, it is suggested to use ``HostAxes.get_aux_axes`` to create -parasite axes, as this saves the need of manually appending the parasite -to ``host.parasites`` and makes sure that their ``remove()`` method works -properly. diff --git a/doc/api/next_api_changes/deprecations/18679-AL.rst b/doc/api/next_api_changes/deprecations/18679-AL.rst deleted file mode 100644 index 417dd6a35a77..000000000000 --- a/doc/api/next_api_changes/deprecations/18679-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -``backend_pgf.TmpDirCleaner`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated, with no replacement. diff --git a/doc/api/next_api_changes/deprecations/18680-AL.rst b/doc/api/next_api_changes/deprecations/18680-AL.rst deleted file mode 100644 index ce9e44e10397..000000000000 --- a/doc/api/next_api_changes/deprecations/18680-AL.rst +++ /dev/null @@ -1,8 +0,0 @@ -wx backend cleanups -~~~~~~~~~~~~~~~~~~~ -The *origin* parameter to ``_FigureCanvasWxBase.gui_repaint`` is deprecated -with no replacement; ``gui_repaint`` now automatically detects the case where -it is used with the wx renderer. - -The ``NavigationToolbar2Wx.get_canvas`` method is deprecated; directly -instantiate a canvas (``FigureCanvasWxAgg(frame, -1, figure)``) if needed. diff --git a/doc/api/next_api_changes/deprecations/18682-AL.rst b/doc/api/next_api_changes/deprecations/18682-AL.rst deleted file mode 100644 index e69b9013ff36..000000000000 --- a/doc/api/next_api_changes/deprecations/18682-AL.rst +++ /dev/null @@ -1,4 +0,0 @@ -``sphinext.plot_directive.align`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated. Use ``docutils.parsers.rst.directives.images.Image.align`` -instead. diff --git a/doc/api/next_api_changes/deprecations/18687-AL.rst b/doc/api/next_api_changes/deprecations/18687-AL.rst deleted file mode 100644 index 45416c897631..000000000000 --- a/doc/api/next_api_changes/deprecations/18687-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -GraphicsContextPS -~~~~~~~~~~~~~~~~~ -... is deprecated. The PostScript backend now uses `.GraphicsContextBase`. diff --git a/doc/api/next_api_changes/deprecations/18710-TH.rst b/doc/api/next_api_changes/deprecations/18710-TH.rst deleted file mode 100644 index ea0a5c498721..000000000000 --- a/doc/api/next_api_changes/deprecations/18710-TH.rst +++ /dev/null @@ -1,3 +0,0 @@ -``Axis.cla()``, ``RadialAxis.cla()``, ``ThetaAxis.cla()`` and ``Spine.cla()`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -These methods are deprecated in favor of the respective ``clear()`` methods. \ No newline at end of file diff --git a/doc/api/next_api_changes/deprecations/18798-JKS.rst b/doc/api/next_api_changes/deprecations/18798-JKS.rst deleted file mode 100644 index b42f46462d42..000000000000 --- a/doc/api/next_api_changes/deprecations/18798-JKS.rst +++ /dev/null @@ -1,8 +0,0 @@ -``ps.useafm`` deprecated for mathtext -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Outputting mathtext using only standard PostScript fonts has likely -been broken for a while (issue `#18722 -`_). In -Matplotlib 3.5, the setting ``ps.useafm`` will have no effect on -mathtext. diff --git a/doc/api/next_api_changes/deprecations/18817-BGB.rst b/doc/api/next_api_changes/deprecations/18817-BGB.rst deleted file mode 100644 index 3088cd5d0db5..000000000000 --- a/doc/api/next_api_changes/deprecations/18817-BGB.rst +++ /dev/null @@ -1,3 +0,0 @@ -Line2D and Patch no longer duplicate ``validJoin`` and ``validCap`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Validation of joinstyle and capstyles is now centralized in ``rcsetup``. diff --git a/doc/api/next_api_changes/deprecations/18949-TH.rst b/doc/api/next_api_changes/deprecations/18949-TH.rst deleted file mode 100644 index c5e5d60df383..000000000000 --- a/doc/api/next_api_changes/deprecations/18949-TH.rst +++ /dev/null @@ -1,3 +0,0 @@ -``AxisArtist.ZORDER`` -~~~~~~~~~~~~~~~~~~~~~ -use ``AxisArtist.zorder`` instead. \ No newline at end of file diff --git a/doc/api/next_api_changes/deprecations/19008-AL.rst b/doc/api/next_api_changes/deprecations/19008-AL.rst deleted file mode 100644 index fa76e9b0f847..000000000000 --- a/doc/api/next_api_changes/deprecations/19008-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -``FigureManagerBase.key_press`` and ``button_press`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -These methods, which incorrectly did nothing when using ``toolmanager``, are -deprecated in favor of directly passing the event to the `.CallbackRegistry` -via ``self.canvas.callbacks.process(event.name, event)``. diff --git a/doc/api/next_api_changes/deprecations/19018-AL.rst b/doc/api/next_api_changes/deprecations/19018-AL.rst deleted file mode 100644 index 69236e78edf8..000000000000 --- a/doc/api/next_api_changes/deprecations/19018-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -``ContourLabeler.get_label_coords`` is deprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It is considered an internal helper. diff --git a/doc/api/next_api_changes/deprecations/19019-AL.rst b/doc/api/next_api_changes/deprecations/19019-AL.rst deleted file mode 100644 index 847c8770a676..000000000000 --- a/doc/api/next_api_changes/deprecations/19019-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -*resize_callback* parameter to ``FigureCanvasTk`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This parameter was never used internally and is deprecated. Tk-level custom -event handlers for resize events can be added to a ``FigureCanvasTk`` using -e.g. ``get_tk_widget().bind('', ..., True)``. diff --git a/doc/api/next_api_changes/deprecations/19042-AL.rst b/doc/api/next_api_changes/deprecations/19042-AL.rst deleted file mode 100644 index 24061f53fac4..000000000000 --- a/doc/api/next_api_changes/deprecations/19042-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -``GridHelperBase`` invalidation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The ``GridHelperBase.invalidate``, ``GridHelperBase.valid``, and -``axislines.Axes.invalidate_grid_helper`` methods are considered internal -and deprecated. diff --git a/doc/api/next_api_changes/deprecations/19046-AL.rst b/doc/api/next_api_changes/deprecations/19046-AL.rst deleted file mode 100644 index 431adcfeb0bb..000000000000 --- a/doc/api/next_api_changes/deprecations/19046-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -``MovieWriter.cleanup`` is deprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Cleanup logic is now fully implemented in `.MovieWriter.finish`. Third-party -movie writers should likewise move the relevant cleanup logic there, as -overridden ``cleanup``\s will no longer be called in the future. diff --git a/doc/api/next_api_changes/deprecations/19153-LPS.rst b/doc/api/next_api_changes/deprecations/19153-LPS.rst deleted file mode 100644 index b3094e3163e9..000000000000 --- a/doc/api/next_api_changes/deprecations/19153-LPS.rst +++ /dev/null @@ -1,5 +0,0 @@ -``pyplot.gca()``, ``Figure.gca`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Passing keyword arguments to `.pyplot.gca` or `.figure.Figure.gca` will not be -supported in a future release. diff --git a/doc/api/next_api_changes/deprecations/19176-AL.rst b/doc/api/next_api_changes/deprecations/19176-AL.rst deleted file mode 100644 index d169ac7ed9b1..000000000000 --- a/doc/api/next_api_changes/deprecations/19176-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -Extra positional parameters to ``plot_surface`` and ``plot_wireframe`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Positional parameters to `~.axes3d.Axes3D.plot_surface` and -`~.axes3d.Axes3D.plot_wireframe` other than ``X``, ``Y``, and ``Z`` are -deprecated. Pass additional artist properties as keyword arguments instead. diff --git a/doc/api/next_api_changes/deprecations/19336-AL.rst b/doc/api/next_api_changes/deprecations/19336-AL.rst deleted file mode 100644 index b77bca4c8cf5..000000000000 --- a/doc/api/next_api_changes/deprecations/19336-AL.rst +++ /dev/null @@ -1,3 +0,0 @@ -Setting a Line2D's pickradius via ``set_picker`` is undeprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This cancels the deprecation introduced in Matplotlib 3.3.0. diff --git a/doc/api/next_api_changes/deprecations/19341-TH.rst b/doc/api/next_api_changes/deprecations/19341-TH.rst deleted file mode 100644 index 07ab5bdde4b8..000000000000 --- a/doc/api/next_api_changes/deprecations/19341-TH.rst +++ /dev/null @@ -1,5 +0,0 @@ -``MarkerStyle`` is considered immutable -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``MarkerStyle.set_fillstyle()`` and ``MarkerStyle.set_marker()`` are -deprecated. Create a new ``MarkerStyle`` with the respective parameters -instead. diff --git a/doc/api/next_api_changes/deprecations/19503-AL.rst b/doc/api/next_api_changes/deprecations/19503-AL.rst deleted file mode 100644 index c9c43da5043f..000000000000 --- a/doc/api/next_api_changes/deprecations/19503-AL.rst +++ /dev/null @@ -1,6 +0,0 @@ -The *dpi* parameter of ``FigureCanvas.print_foo`` printers is deprecated -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The `~.Figure.savefig` machinery already took care of setting the figure dpi -to the desired value, so ``print_foo`` can directly read it from there. Not -passing *dpi* to ``print_foo`` allows clearer detection of unused parameters -passed to `~.Figure.savefig`. diff --git a/doc/api/next_api_changes/development/18356-JMK.rst b/doc/api/next_api_changes/development/18356-JMK.rst deleted file mode 100644 index 14d567c1fa38..000000000000 --- a/doc/api/next_api_changes/development/18356-JMK.rst +++ /dev/null @@ -1,17 +0,0 @@ -FigureBase class added, and Figure class made a child -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The new subfigure feature motivated some re-organization of the -`.figure.Figure` class, so that the new `.figure.SubFigure` class could have -all the capabilities of a figure. - -The `.figure.Figure` class is now a subclass of `.figure.FigureBase`, where -`.figure.FigureBase` contains figure-level artist addition routines, and -the `.figure.Figure` subclass just contains features that are unique to the -outer figure. - -Note that there is a new *transSubfigure* transform -associated with the subfigure. This transform also exists for a -`.Figure` instance, and is equal to *transFigure* in that case, -so code that uses the transform stack that wants to place objects on either -the parent figure or one of the subfigures should use *transSubfigure*. diff --git a/doc/api/next_api_changes/development/19500-AL.rst b/doc/api/next_api_changes/development/19500-AL.rst deleted file mode 100644 index 677287905f25..000000000000 --- a/doc/api/next_api_changes/development/19500-AL.rst +++ /dev/null @@ -1,2 +0,0 @@ -Matplotlib now requires numpy>=1.16 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/api/next_api_changes/removals/18069.DS.rst b/doc/api/next_api_changes/removals/18069.DS.rst deleted file mode 100644 index f55bf30bbd07..000000000000 --- a/doc/api/next_api_changes/removals/18069.DS.rst +++ /dev/null @@ -1,5 +0,0 @@ -Removed support for single color strings in `~.colors.to_rgba_array` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Converting a string with single color characters (e.g. ``'cymk'``) in -`~.colors.to_rgba_array` is no longer supported. Instead, the colors can be -passed individually in a list (e.g. ``['c', 'y', 'm', 'k']``). diff --git a/doc/api/next_api_changes/removals/18070-DS.rst b/doc/api/next_api_changes/removals/18070-DS.rst deleted file mode 100644 index d6bbe3f86263..000000000000 --- a/doc/api/next_api_changes/removals/18070-DS.rst +++ /dev/null @@ -1,15 +0,0 @@ -`.rcsetup` removals -~~~~~~~~~~~~~~~~~~~ -The following functions in `matplotlib.rcsetup` have been removed: - -- ``validate_path_exists`` - use `os.path.exists` instead. -- ``update_savefig_format`` - this just replaced ``'auto'`` with ``'png'``. -- ``validate_animation_writer_path``. - -Changes to valid rcParams -~~~~~~~~~~~~~~~~~~~~~~~~~ -The following rcParam values are no longer valid: - -- Setting :rc:`savefig.format` to ``"auto"`` - use ``"png"`` instead. -- Seeting :rc:`boxplot.whiskers` to ``"range"`` - set it to ``0, 100`` instead. -- Setting :rc:`text.hinting` to `False` or `True` - set it to ``"auto"`` or ``"none"`` respectively. diff --git a/doc/api/next_api_changes/removals/18071-DS.rst b/doc/api/next_api_changes/removals/18071-DS.rst deleted file mode 100644 index b3895d909bd9..000000000000 --- a/doc/api/next_api_changes/removals/18071-DS.rst +++ /dev/null @@ -1,9 +0,0 @@ -`matplotlib.animation` -~~~~~~~~~~~~~~~~~~~~~~ - -The following `~.animation.MovieWriterRegistry` methods have been removed: - -- ``.set_dirty()`` - does nothing. -- ``.ensure_not_dirty()`` - does nothing. -- ``.reset_available_writers()`` - does nothing. -- ``.avail()`` - use ``.list()`` instead to get a list of available writers. diff --git a/doc/api/next_api_changes/removals/18073-DS.rst b/doc/api/next_api_changes/removals/18073-DS.rst deleted file mode 100644 index 015ba418ffd6..000000000000 --- a/doc/api/next_api_changes/removals/18073-DS.rst +++ /dev/null @@ -1,5 +0,0 @@ -``matplotlib.testing.disable_internet`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The entire ``matplotlib.testing.disable_internet`` sub-module has been removed. -The `pytest-remotedata package `_ -can be used instead. diff --git a/doc/api/next_api_changes/removals/18095-DS.rst b/doc/api/next_api_changes/removals/18095-DS.rst deleted file mode 100644 index 379877cbf4e6..000000000000 --- a/doc/api/next_api_changes/removals/18095-DS.rst +++ /dev/null @@ -1,5 +0,0 @@ -`~matplotlib.scale` keyword arguments -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`.scale.ScaleBase`, `.scale.LinearScale` and `.scale.SymmetricalLogScale` -now error if any unexpected keyword arguments are passed to their -constructors. diff --git a/doc/api/next_api_changes/removals/18201-DS.rst b/doc/api/next_api_changes/removals/18201-DS.rst deleted file mode 100644 index 0e079262fb7f..000000000000 --- a/doc/api/next_api_changes/removals/18201-DS.rst +++ /dev/null @@ -1,5 +0,0 @@ -`matplotlib.colors` removals -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- ``makeMappingArray`` has been removed. -- ``DivergingNorm`` has been renamed to `~matplotlib.colors.TwoSlopeNorm`. diff --git a/doc/api/next_api_changes/removals/18202-DS.rst b/doc/api/next_api_changes/removals/18202-DS.rst deleted file mode 100644 index 840c28010bfe..000000000000 --- a/doc/api/next_api_changes/removals/18202-DS.rst +++ /dev/null @@ -1,6 +0,0 @@ -`matplotlib.testing` removals -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- ``testing.is_called_from_pytest`` has been removed. -- ``jpl_units.Unitdbl.checkUnits`` has been removed. Use - ``units not in self.allowed`` instead. diff --git a/doc/api/next_api_changes/removals/18502-TH.rst b/doc/api/next_api_changes/removals/18502-TH.rst deleted file mode 100644 index e4488c8774f7..000000000000 --- a/doc/api/next_api_changes/removals/18502-TH.rst +++ /dev/null @@ -1,5 +0,0 @@ -``matplotlib.cm`` removals -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- ``matplotlib.cm.revcmap()`` has been removed. Use ``Colormap.reversed()`` - instead. diff --git a/doc/api/next_api_changes/removals/18513-ES.rst b/doc/api/next_api_changes/removals/18513-ES.rst deleted file mode 100644 index 62ed3b92565e..000000000000 --- a/doc/api/next_api_changes/removals/18513-ES.rst +++ /dev/null @@ -1,11 +0,0 @@ -Locators -~~~~~~~~ -The unused ``Locator.autoscale`` method has been removed (pass the axis limits -to `.Locator.view_limits` instead). Any derived methods are also removed: - -* ``Locator.autoscale`` -* ``AutoDateLocator.autoscale`` -* ``RRuleLocator.autoscale`` -* ``RadialLocator.autoscale`` -* ``ThetaLocator.autoscale`` -* ``YearLocator.autoscale`` diff --git a/doc/api/next_api_changes/removals/18515-ES.rst b/doc/api/next_api_changes/removals/18515-ES.rst deleted file mode 100644 index e9724e82725b..000000000000 --- a/doc/api/next_api_changes/removals/18515-ES.rst +++ /dev/null @@ -1,33 +0,0 @@ -GTK -~~~ - -The following methods and properties have been removed: - -* ``ConfigureSubplotsGTK3.destroy`` method -* ``ConfigureSubplotsGTK3.init_window`` method -* ``ConfigureSubplotsGTK3.window`` property - -WX -~~ -``FigureFrameWx.statusbar``, ``NavigationToolbar2Wx.set_status_bar``, and -``NavigationToolbar2Wx.statbar`` have been removed. The status bar can be -retrieved by calling standard wx methods (``frame.GetStatusBar()`` and -``toolbar.GetTopLevelParent().GetStatusBar()``). - -``backend_wx.ConfigureSubplotsWx.configure_subplots`` and -``backend_wx.ConfigureSubplotsWx.get_canvas`` have been removed. - -PGF -~~~ -``backend_pgf.repl_escapetext`` and ``backend_pgf.repl_mathdefault`` have been -removed. - -``RendererPgf.latexManager`` has been removed. - -FigureCanvas -~~~~~~~~~~~~ -``FigureCanvasBase.draw_cursor`` and ``FigureCanvasMac.invalidate`` have been -removed. - -The ``dryrun`` parameter to the various ``FigureCanvasFoo.print_foo`` methods -has been removed. diff --git a/doc/api/next_api_changes/removals/18516-ES.rst b/doc/api/next_api_changes/removals/18516-ES.rst deleted file mode 100644 index e1469bcd39dc..000000000000 --- a/doc/api/next_api_changes/removals/18516-ES.rst +++ /dev/null @@ -1,11 +0,0 @@ -Fonts -~~~~~ -``font_manager.JSONEncoder`` has been removed. Use `.font_manager.json_dump` to -dump a `.FontManager` instance. - -``font_manager.createFontList`` has been removed. `.font_manager.FontManager.addfont` -is now available to register a font at a given path. - -The ``as_str``, ``as_rgba_str``, ``as_array``, ``get_width`` and ``get_height`` -methods of ``matplotlib.ft2font.FT2Image`` have been removed. Convert the -``FT2Image`` to a NumPy array with ``np.asarray`` before processing it. diff --git a/doc/api/next_api_changes/removals/18522-ES.rst b/doc/api/next_api_changes/removals/18522-ES.rst deleted file mode 100644 index 27f5bd5bc8bd..000000000000 --- a/doc/api/next_api_changes/removals/18522-ES.rst +++ /dev/null @@ -1,39 +0,0 @@ -``matplotlib.mlab`` -~~~~~~~~~~~~~~~~~~~ -``mlab.apply_window`` and ``mlab.stride_repeat`` have been removed. - -Axes3D -~~~~~~ -``axes3d.unit_bbox`` has been removed; use ``Bbox.unit`` instead. - -axisartist -~~~~~~~~~~ -``mpl_toolkits.axisartist.grid_finder.GridFinderBase`` has been removed; use -`.GridFinder` instead. - -``axisartist.axis_artist.BezierPath`` has been removed; use -`.patches.PathPatch` instead. - -Returning a factor equal to None from axisartist Locators (which are **not** -the same as "standard" tick Locators), or passing a factor equal to None -to axisartist Formatters (which are **not** the same as "standard" tick -Formatters) is no longer supported. Pass a factor equal to 1 instead. - -Misc -~~~~ -``matplotlib.get_home`` has been removed; use standard library instead. - -``matplotlib.compare_versions`` has been removed; use comparison of -``distutils.version.LooseVersion``\s instead. - -``matplotlib.checkdep_ps_distiller`` has been removed. - -``matplotlib.figure.AxesStack`` has been removed. - -``BboxBase.is_unit`` has been removed; check the `.Bbox` extents if needed. - -``Affine2DBase.matrix_from_values(...)`` has been removed; use (for example) -``Affine2D.from_values(...).get_matrix()`` instead. - -``style.core.is_style_file`` and ``style.core.iter_style_files`` have been -removed. diff --git a/doc/api/next_api_changes/removals/18691-AL.rst b/doc/api/next_api_changes/removals/18691-AL.rst deleted file mode 100644 index 5205383f1f1c..000000000000 --- a/doc/api/next_api_changes/removals/18691-AL.rst +++ /dev/null @@ -1,9 +0,0 @@ -sample_data removals -~~~~~~~~~~~~~~~~~~~~ -The sample datasets listed below have been removed. Suggested replacements for -demonstration purposes are listed in parentheses. -- ``None_vs_nearest-pdf.png``, -- ``aapl.npz`` (use ``goog.npz``), -- ``ada.png``, ``grace_hopper.png`` (use ``grace_hopper.jpg``), -- ``ct.raw.gz`` (use ``s1045.ima.gz``), -- ``damodata.csv`` (use ``msft.csv``). diff --git a/doc/api/next_api_changes/removals/18747-ES.rst b/doc/api/next_api_changes/removals/18747-ES.rst deleted file mode 100644 index 8216000dd95d..000000000000 --- a/doc/api/next_api_changes/removals/18747-ES.rst +++ /dev/null @@ -1,57 +0,0 @@ -``Axes`` methods and properties -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- ``axes.Axes.get_data_ratio_log`` -- ``axes.SubplotBase.rowNum``; use ``ax.get_subplotspec().rowspan.start`` - instead -- ``axes.SubplotBase.colNum``; use ``ax.get_subplotspec().colspan.start`` - instead -- the *verts* parameter to ``scatter`` (use *marker* instead) -- Passing more than one positional argument to `~matplotlib.axes.Axes.axis` - will now raise an error. -- Passing ``"range"`` to the *whis* parameter of `.Axes.boxplot` and - `.cbook.boxplot_stats` to mean "the whole data range" is no longer - supported. -- Passing scalars to parameter *where* in `.axes.Axes.fill_between` and - `.axes.Axes.fill_betweenx` is no longer accepted and non-matching sizes now - raise a `ValueError`. - -``dates`` functions -~~~~~~~~~~~~~~~~~~~ -- ``dates.mx2num`` - -``quiver`` methods -~~~~~~~~~~~~~~~~~~ - -- ``quiver.QuiverKey.quiverkey_doc`` has been removed; use - ``quiver.QuiverKey.__init__.__doc__`` instead. - -Smart bounds -~~~~~~~~~~~~ - -The "smart bounds" functionality on `~.axis.Axis` and `.Spine` has been -deleted, and the following methods are removed: - -- ``Axis.set_smart_bounds`` and ``Axis.get_smart_bounds`` -- ``Spine.set_smart_bounds`` and ``Spine.get_smart_bounds`` - -Testing -~~~~~~~ -The *switch_backend_warn* parameter to ``matplotlib.test`` has no effect and -has been removed. - -``tight_layout()`` -~~~~~~~~~~~~~~~~~~ -The *renderer* parameter to `.Figure.tight_layout` has been removed; this -method now always uses the renderer instance cached on the `.Figure`. - -``axes_grid1`` -~~~~~~~~~~~~~~ -The ``mpl_toolkits.axes_grid1.colorbar`` module and its colorbar implementation -have been removed in favor of :mod:`matplotlib.colorbar`. Additionally: - -- The *locator* parameter to ``colorbar()`` has been removed in favor of its - synonym *ticks* (which already existed previously, and is consistent with - :mod:`matplotlib.colorbar`). -- The ``mpl_toolkits.legacy_colorbar`` rcParam has no effect and also has been - removed. diff --git a/doc/api/next_api_changes/removals/18868-TH.rst b/doc/api/next_api_changes/removals/18868-TH.rst deleted file mode 100644 index 3c96775fde80..000000000000 --- a/doc/api/next_api_changes/removals/18868-TH.rst +++ /dev/null @@ -1,4 +0,0 @@ -Parameter minor in set_ticks() is keyword-only -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The parameter *minor* in `.Axis.set_ticks` and ``SecondaryAxis.set_ticks`` is -now keyword-only. \ No newline at end of file diff --git a/doc/api/next_api_changes/removals/18909-TH.rst b/doc/api/next_api_changes/removals/18909-TH.rst deleted file mode 100644 index 76fbd3260958..000000000000 --- a/doc/api/next_api_changes/removals/18909-TH.rst +++ /dev/null @@ -1,3 +0,0 @@ -``Artist.eventson`` and ``Container.eventson`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -These attributes have no effect and thus have been removed. diff --git a/doc/api/prev_api_changes/api_changes_3.4.0.rst b/doc/api/prev_api_changes/api_changes_3.4.0.rst new file mode 100644 index 000000000000..309c1c677e1c --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.4.0.rst @@ -0,0 +1,14 @@ +API Changes for 3.4.0 +===================== + +.. contents:: + :local: + :depth: 1 + +.. include:: /api/prev_api_changes/api_changes_3.4.0/behaviour.rst + +.. include:: /api/prev_api_changes/api_changes_3.4.0/deprecations.rst + +.. include:: /api/prev_api_changes/api_changes_3.4.0/removals.rst + +.. include:: /api/prev_api_changes/api_changes_3.4.0/development.rst diff --git a/doc/api/prev_api_changes/api_changes_3.4.0/behaviour.rst b/doc/api/prev_api_changes/api_changes_3.4.0/behaviour.rst new file mode 100644 index 000000000000..f6d6459be8f1 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.4.0/behaviour.rst @@ -0,0 +1,353 @@ +Behaviour changes +----------------- + +Constrained layout rewrite +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The layout manager ``constrained_layout`` was re-written with different outer +constraints that should be more robust to complicated subplot layouts. +User-facing changes are: + +- some poorly constrained layouts will have different width/height plots than + before. +- colorbars now respect the ``anchor`` keyword argument of + `matplotlib.colorbar.make_axes` +- colorbars are wider. +- colorbars in different rows or columns line up more robustly. +- *hspace* and *wspace* options to `.Figure.set_constrained_layout_pads` were + twice as wide as the docs said they should be. So these now follow the docs. + +This feature will remain "experimental" until the new changes have been used +enough by users, so we anticipate version 3.5 or 3.6. On the other hand, +``constrained_layout`` is extensively tested and used in examples in the +library, so using it should be safe, but layouts may not be exactly the same as +more development takes place. + +Details of using ``constrained_layout``, and its algorithm are available at +:doc:`/tutorials/intermediate/constrainedlayout_guide` + +``plt.subplot`` re-selection without keyword arguments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The purpose of `.pyplot.subplot` is to facilitate creating and re-selecting +Axes in a Figure when working strictly in the implicit pyplot API. When +creating new Axes it is possible to select the projection (e.g. polar, 3D, or +various cartographic projections) as well as to pass additional keyword +arguments through to the Axes-subclass that is created. + +The first time `.pyplot.subplot` is called for a given position in the Axes +grid it always creates and returns a new Axes with the passed arguments and +projection (defaulting to rectilinear). On subsequent calls to +`.pyplot.subplot` we have to determine if an existing Axes has a) equivalent +parameters, in which case it should be selected as the current Axes and +returned, or b) different parameters, in which case a new Axes is created and +the existing Axes is removed. This leaves the question of what is "equivalent +parameters". + +Previously it was the case that an existing Axes subclass, except for Axes3D, +would be considered equivalent to a 2D rectilinear Axes, despite having +different projections, if the keyword arguments (other than *projection*) +matched. Thus:: + + ax1 = plt.subplot(1, 1, 1, projection='polar') + ax2 = plt.subplots(1, 1, 1) + ax1 is ax2 + +We are embracing this long standing behavior to ensure that in the case when no +keyword arguments (of any sort) are passed to `.pyplot.subplot` any existing +Axes is returned, without consideration for keywords or projection used to +initially create it. This will cause a change in behavior when additional +keywords were passed to the original Axes:: + + ax1 = plt.subplot(111, projection='polar', theta_offset=.75) + ax2 = plt.subplots(1, 1, 1) + ax1 is ax2 # new behavior + # ax1 is not ax2 # old behavior, made a new axes + + ax1 = plt.subplot(111, label='test') + ax2 = plt.subplots(1, 1, 1) + ax1 is ax2 # new behavior + # ax1 is not ax2 # old behavior, made a new axes + +For the same reason, if there was an existing Axes that was not rectilinear, +passing ``projection='rectilinear'`` would reuse the existing Axes :: + + ax1 = plt.subplot(projection='polar') + ax2 = plt.subplot(projection='rectilinear') + ax1 is not ax2 # new behavior, makes new Axes + # ax1 is ax2 # old behavior + +contrary to the user's request. + +Previously Axes3D could not be re-selected with `.pyplot.subplot` due to an +unrelated bug (also fixed in Matplotlib 3.4). While Axes3D are now consistent +with all other projections there is a change in behavior for :: + + plt.subplot(projection='3d') # create a 3D Axes + + plt.subplot() # now returns existing 3D Axes, but + # previously created new 2D Axes + + plt.subplot(projection='rectilinear') # to get a new 2D Axes + +``ioff`` and ``ion`` can be used as context managers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.pyplot.ion` and `.pyplot.ioff` may now be used as context managers to create +a context with interactive mode on or off, respectively. The old behavior of +calling these functions is maintained. To use the new functionality call as:: + + with plt.ioff(): + # non-interactive code + +Locators and formatters must be in the class hierarchy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Axis locators and formatters must now be subclasses of +`~matplotlib.ticker.Locator` and `~matplotlib.ticker.Formatter` respectively. + +Date locator for DAILY interval now returns middle of month +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `matplotlib.dates.AutoDateLocator` has a default of +``interval_multiples=True`` that attempts to align ticks with the start of +meaningful intervals like the start of the month, or start of the day, etc. +That lead to approximately 140-day intervals being mapped to the first and 22nd +of the month. This has now been changed so that it chooses the first and 15th +of the month, which is probably what most people want. + +``ScalarFormatter`` *useLocale* option obeys grouping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When the `~.ScalarFormatter` option *useLocale* is enabled (or +:rc:`axes.formatter.use_locale` is *True*) and the configured locale uses +grouping, a separator will be added as described in `locale.format_string`. + +``Axes.errorbar`` cycles non-color properties correctly +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Formerly, `.Axes.errorbar` incorrectly skipped the Axes property cycle if a +color was explicitly specified, even if the property cycler was for other +properties (such as line style). Now, `.Axes.errorbar` will advance the Axes +property cycle as done for `.Axes.plot`, i.e., as long as all properties in the +cycler are not explicitly passed. + +pyplot.specgram always uses origin='upper' +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Previously if :rc:`image.origin` was set to something other than ``'upper'`` or +if the *origin* keyword argument was passed with a value other than +``'upper'``, the spectrogram itself would flip, but the Axes would remain +oriented for an origin value of ``'upper'``, so that the resulting plot was +incorrectly labelled. + +Now, the *origin* keyword argument is not supported and the ``image.origin`` +rcParam is ignored. The function `matplotlib.pyplot.specgram` is forced to use +``origin='upper'``, so that the Axes are correct for the plotted spectrogram. + +xunits=None and yunits=None passed as keyword arguments are treated as "no action" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Many (but not all) of the methods on `~.axes.Axes` take the (undocumented) +keyword arguments *xunits* and *yunits* that will update the units on the given +Axis by calling `.Axis.set_units` and `.Axis.update_units`. + +Previously if *None* was passed it would clear the value stored in +``.Axis.units`` which will in turn break converters which rely on the value in +``.Axis.units`` to work properly (notably `.StrCategoryConverter`). + +This changes the semantics of ``ax.meth(..., xunits=None, yunits=None)`` from +"please clear the units" to "do the default thing as if they had not been +passed" which is consistent with the standard behavior of Matplotlib keyword +arguments. + +If you were relying on passing ``xunits=None`` to plotting methods to clear the +``.Axes.units`` attribute, directly call `.Axis.set_units` (and +`.Axis.update_units` if you also require the converter to be updated). + +Annotations with ``annotation_clip`` no longer affect ``tight_layout`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Previously, `.text.Annotation.get_tightbbox` always returned the full +`.text.Annotation.get_window_extent` of the object, independent of the value of +``annotation_clip``. `.text.Annotation.get_tightbbox` now correctly takes this +extra clipping box into account, meaning that `~.text.Annotation`\s that are +not drawn because of ``annotation_clip`` will not count towards the Axes +bounding box calculations, such as those done by `~.pyplot.tight_layout`. + +This is now consistent with the API described in `~.artist.Artist`, which +specifies that ``get_window_extent`` should return the full extents and +``get_tightbbox`` should "account for any clipping". + +Parasite Axes pcolor and pcolormesh now defaults to placing grid edges at integers, not half-integers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is consistent with `~.Axes.pcolor` and `~.Axes.pcolormesh`. + +``Colorbar`` outline is now a ``Spine`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The outline of `~matplotlib.colorbar.Colorbar` is now a `.Spine` and drawn as +one, instead of a `.Polygon` drawn as an artist. This ensures it will always be +drawn after (i.e., on top of) all artists, consistent with Spines on normal +Axes. + +``Colorbar.dividers`` changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This attribute is now always a `.LineCollection` -- an empty one if +``drawedges`` is *False*. Its default colors and linewidth +(:rc:`axes.edgecolor`, :rc:`axes.linewidth`) are now resolved at instantiation +time, not at draw time. + +Raise or warn on registering a colormap twice +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When using `matplotlib.cm.register_cmap` to register a user provided or +third-party colormap it will now raise a `ValueError` if trying to over-write +one of the built in colormaps and warn if trying to over write a user +registered colormap. This may raise for user-registered colormaps in the +future. + +Consecutive rasterized draws now merged +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tracking of depth of raster draws has moved from +`.backend_mixed.MixedModeRenderer.start_rasterizing` and +`.backend_mixed.MixedModeRenderer.stop_rasterizing` into +`.artist.allow_rasterization`. This means the start and stop functions are only +called when the rasterization actually needs to be started and stopped. + +The output of vector backends will change in the case that rasterized elements +are merged. This should not change the appearance of outputs. + +The renders in 3rd party backends are now expected to have +``self._raster_depth`` and ``self._rasterizing`` initialized to ``0`` and +*False* respectively. + +Consistent behavior of ``draw_if_interactive()`` across backends +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.pyplot.draw_if_interactive` no longer shows the window (if it was previously +unshown) on the Tk and nbAgg backends, consistently with all other backends. + +The Artist property *rasterized* cannot be *None* anymore +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is now a boolean only. Before the default was *None* and +`.Artist.set_rasterized` was documented to accept *None*. However, *None* did +not have a special meaning and was treated as *False*. + +Canvas's callback registry now stored on Figure +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The canonical location of the `~.cbook.CallbackRegistry` used to handle +Figure/Canvas events has been moved from the Canvas to the Figure. This change +should be transparent to almost all users, however if you are swapping +switching the Figure out from on top of a Canvas or visa versa you may see a +change in behavior. + +Harmonized key event data across backends +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The different backends with key translation support, now handle "Shift" as a +sometimes modifier, where the ``'shift+'`` prefix won't be added if a key +translation was made. + +In the Qt5 backend, the ``matplotlib.backends.backend_qt5.SPECIAL_KEYS`` +dictionary contains keys that do *not* return their unicode name instead they +have manually specified names. The name for ``QtCore.Qt.Key_Meta`` has changed +to ``'meta'`` to be consistent with the other GUI backends. + +The WebAgg backend now handles key translations correctly on non-US keyboard +layouts. + +In the GTK and Tk backends, the handling of non-ASCII keypresses (as reported +in the KeyEvent passed to ``key_press_event``-handlers) now correctly reports +Unicode characters (e.g., €), and better respects NumLock on the numpad. + +In the GTK and Tk backends, the following key names have changed; the new names +are consistent with those reported by the Qt backends: + +- The "Break/Pause" key (keysym 0xff13) is now reported as ``"pause"`` instead + of ``"break"`` (this is also consistent with the X key name). +- The numpad "delete" key is now reported as ``"delete"`` instead of ``"dec"``. + +WebAgg backend no longer reports a middle click as a right click +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Previously when using the WebAgg backend the event passed to a callback by +``fig.canvas.mpl_connect('mouse_button_event', callback)`` on a middle click +would report `.MouseButton.RIGHT` instead of `.MouseButton.MIDDLE`. + +ID attribute of XML tags in SVG files now based on SHA256 rather than MD5 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Matplotlib generates unique ID attributes for various tags in SVG files. +Matplotlib previously generated these unique IDs using the first 10 characters +of an MD5 hash. The MD5 hashing algorithm is not available in Python on systems +with Federal Information Processing Standards (FIPS) enabled. Matplotlib now +uses the first 10 characters of an SHA256 hash instead. SVG files that would +otherwise match those saved with earlier versions of matplotlib, will have +different ID attributes. + +``RendererPS.set_font`` is no longer a no-op in AFM mode +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.RendererPS.set_font` now sets the current PostScript font in all cases. + +Autoscaling in Axes3D +~~~~~~~~~~~~~~~~~~~~~ + +In Matplotlib 3.2.0, autoscaling was made lazier for 2D Axes, i.e., limits +would only be recomputed when actually rendering the canvas, or when the user +queries the Axes limits. This performance improvement is now extended to +`.Axes3D`. This also fixes some issues with autoscaling being triggered +unexpectedly in Axes3D. + +Please see :ref:`the API change for 2D Axes ` +for further details. + +Axes3D automatically adding itself to Figure is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +New `.Axes3D` objects previously added themselves to figures when they were +created, unlike all other Axes classes, which lead to them being added twice if +``fig.add_subplot(111, projection='3d')`` was called. + +This behavior is now deprecated and will warn. The new keyword argument +*auto_add_to_figure* controls the behavior and can be used to suppress the +warning. The default value will change to *False* in Matplotlib 3.5, and any +non-*False* value will be an error in Matplotlib 3.6. + +In the future, `.Axes3D` will need to be explicitly added to the figure :: + + fig = Figure() + # create Axes3D + ax = Axes3d(fig) + # add to Figure + fig.add_axes(ax) + +as needs to be done for other `.axes.Axes` sub-classes. Or, a 3D projection can +be made via:: + + fig.add_subplot(projection='3d') + +``mplot3d.art3d.get_dir_vector`` always returns NumPy arrays +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For consistency, `~.mplot3d.art3d.get_dir_vector` now always returns NumPy +arrays, even if the input is a 3-element iterable. + +Changed cursive and fantasy font definitions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Comic Sans and Comic Neue fonts were moved from the default +:rc:`font.fantasy` list to the default :rc:`font.cursive` setting, in +accordance with the CSS font families example_ and in order to provide a +cursive font present in Microsoft's Core Fonts set. + +.. _example: https://www.w3.org/Style/Examples/007/fonts.en.html + +docstring.Substitution now always dedents docstrings before string interpolation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/api/prev_api_changes/api_changes_3.4.0/deprecations.rst b/doc/api/prev_api_changes/api_changes_3.4.0/deprecations.rst new file mode 100644 index 000000000000..120797270954 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.4.0/deprecations.rst @@ -0,0 +1,354 @@ +Deprecations +------------ + +Extra parameters to Axes constructor +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Parameters of the Axes constructor other than *fig* and *rect* will become +keyword-only in a future version. + +``pyplot.gca`` and ``Figure.gca`` keyword arguments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Passing keyword arguments to `.pyplot.gca` or `.figure.Figure.gca` will not be +supported in a future release. + +``Axis.cla``, ``RadialAxis.cla``, ``ThetaAxis.cla`` and ``Spine.cla`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +These methods are deprecated in favor of the respective ``clear()`` methods. + +Invalid hatch pattern characters are no longer ignored +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When specifying hatching patterns, characters that are not recognized will +raise a deprecation warning. In the future, this will become a hard error. + +``imread`` reading from URLs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Passing a URL to `~.pyplot.imread()` is deprecated. Please open the URL for +reading and directly use the Pillow API +(``PIL.Image.open(urllib.request.urlopen(url))``, or +``PIL.Image.open(io.BytesIO(requests.get(url).content))``) instead. + +Subplot-related attributes and methods +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Some ``SubplotBase`` methods and attributes have been deprecated and/or moved +to `.SubplotSpec`: + +- ``get_geometry`` (use `.SubplotBase.get_subplotspec` instead), +- ``change_geometry`` (use `.SubplotBase.set_subplotspec` instead), +- ``is_first_row``, ``is_last_row``, ``is_first_col``, ``is_last_col`` (use the + corresponding methods on the `.SubplotSpec` instance instead), +- ``update_params`` (now a no-op), +- ``figbox`` (use ``ax.get_subplotspec().get_geometry(ax.figure)`` instead to + recompute the geometry, or ``ax.get_position()`` to read its current value), +- ``numRows``, ``numCols`` (use the ``nrows`` and ``ncols`` attribute on the + `.GridSpec` instead). + +Likewise, the ``get_geometry``, ``change_geometry``, ``update_params``, and +``figbox`` methods/attributes of `.SubplotDivider` have been deprecated, with +similar replacements. + +``is_url`` and ``URL_REGEX`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... are deprecated. (They were previously defined in the toplevel +:mod:`matplotlib` module.) + +``matplotlib.style.core`` deprecations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``STYLE_FILE_PATTERN``, ``load_base_library``, and ``iter_user_libraries`` are +deprecated. + +``Tick.apply_tickdir`` is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``apply_tickdir`` didn't actually update the tick markers on the existing +Line2D objects used to draw the ticks; use `.Axis.set_tick_params` instead. + +``dpi_cor`` property of `.FancyArrowPatch` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This parameter is considered internal and deprecated. + +Passing ``boxstyle="custom", bbox_transmuter=...`` to ``FancyBboxPatch`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In order to use a custom boxstyle, directly pass it as the *boxstyle* argument +to `.FancyBboxPatch`. This was previously already possible, and is consistent +with custom arrow styles and connection styles. + +BoxStyles are now called without passing the *mutation_aspect* parameter +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Mutation aspect is now handled by the artist itself. Hence the +*mutation_aspect* parameter of ``BoxStyle._Base.__call__`` is deprecated, and +custom boxstyles should be implemented to not require this parameter (it can be +left as a parameter defaulting to 1 for back-compatibility). + +``ContourLabeler.get_label_coords`` is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is considered an internal helper. + +Line2D and Patch no longer duplicate ``validJoin`` and ``validCap`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Validation of joinstyle and capstyles is now centralized in ``rcsetup``. + +Setting a Line2D's pickradius via ``set_picker`` is undeprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This cancels the deprecation introduced in Matplotlib 3.3.0. + +``MarkerStyle`` is considered immutable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``MarkerStyle.set_fillstyle()`` and ``MarkerStyle.set_marker()`` are +deprecated. Create a new ``MarkerStyle`` with the respective parameters +instead. + +``MovieWriter.cleanup`` is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Cleanup logic is now fully implemented in `.MovieWriter.finish`. Third-party +movie writers should likewise move the relevant cleanup logic there, as +overridden ``cleanup``\s will no longer be called in the future. + +*minimumdescent* parameter/property of ``TextArea`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.offsetbox.TextArea` has behaved as if *minimumdescent* was always True +(regardless of the value to which it was set) since Matplotlib 1.3, so the +parameter/property is deprecated. + +``colorbar`` now warns when the mappable's Axes is different from the current Axes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Currently, `.Figure.colorbar` and `.pyplot.colorbar` steal space by default +from the current Axes to place the colorbar. In a future version, they will +steal space from the mappable's Axes instead. In preparation for this change, +`.Figure.colorbar` and `.pyplot.colorbar` now emits a warning when the current +Axes is not the same as the mappable's Axes. + +Colorbar docstrings +~~~~~~~~~~~~~~~~~~~ + +The following globals in :mod:`matplotlib.colorbar` are deprecated: +``colorbar_doc``, ``colormap_kw_doc``, ``make_axes_kw_doc``. + +``ColorbarPatch`` and ``colorbar_factory`` are deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +All the relevant functionality has been moved to the +`~matplotlib.colorbar.Colorbar` class. + +Backend deprecations +~~~~~~~~~~~~~~~~~~~~ + +- ``FigureCanvasBase.get_window_title`` and + ``FigureCanvasBase.set_window_title`` are deprecated. Use the corresponding + methods on the FigureManager if using pyplot, or GUI-specific methods if + embedding. +- The *resize_callback* parameter to ``FigureCanvasTk`` was never used + internally and is deprecated. Tk-level custom event handlers for resize + events can be added to a ``FigureCanvasTk`` using e.g. + ``get_tk_widget().bind('', ..., True)``. +- The ``key_press`` and ``button_press`` methods of `.FigureManagerBase`, which + incorrectly did nothing when using ``toolmanager``, are deprecated in favor + of directly passing the event to the `.CallbackRegistry` via + ``self.canvas.callbacks.process(event.name, event)``. +- ``RendererAgg.get_content_extents`` and + ``RendererAgg.tostring_rgba_minimized`` are deprecated. +- ``backend_pgf.TmpDirCleaner`` is deprecated, with no replacement. +- ``GraphicsContextPS`` is deprecated. The PostScript backend now uses + `.GraphicsContextBase`. + +wx backend cleanups +~~~~~~~~~~~~~~~~~~~ + +The *origin* parameter to ``_FigureCanvasWxBase.gui_repaint`` is deprecated +with no replacement; ``gui_repaint`` now automatically detects the case where +it is used with the wx renderer. + +The ``NavigationToolbar2Wx.get_canvas`` method is deprecated; directly +instantiate a canvas (``FigureCanvasWxAgg(frame, -1, figure)``) if needed. + +Unused positional parameters to ``print_`` methods are deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +None of the ``print_`` methods implemented by canvas subclasses used +positional arguments other that the first (the output filename or file-like), +so these extra parameters are deprecated. + +The *dpi* parameter of ``FigureCanvas.print_foo`` printers is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `~.Figure.savefig` machinery already took care of setting the figure DPI +to the desired value, so ``print_foo`` can directly read it from there. Not +passing *dpi* to ``print_foo`` allows clearer detection of unused parameters +passed to `~.Figure.savefig`. + +Passing `bytes` to ``FT2Font.set_text`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... is deprecated, pass `str` instead. + +``ps.useafm`` deprecated for mathtext +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Outputting mathtext using only standard PostScript fonts has likely been broken +for a while (issue `#18722 +`_). In Matplotlib 3.5, +the setting :rc:`ps.useafm` will have no effect on mathtext. + +``MathTextParser("bitmap")`` is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The associated APIs ``MathtextBackendBitmap``, ``MathTextParser.to_mask``, +``MathTextParser.to_rgba``, ``MathTextParser.to_png``, and +``MathTextParser.get_depth`` are likewise deprecated. + +To convert a text string to an image, either directly draw the text to an +empty `.Figure` and save the figure using a tight bbox, as demonstrated in +:doc:`/gallery/text_labels_and_annotations/mathtext_asarray`, or use +`.mathtext.math_to_image`. + +When using `.math_to_image`, text color can be set with e.g.:: + + with plt.rc_context({"text.color": "tab:blue"}): + mathtext.math_to_image(text, filename) + +and an RGBA array can be obtained with e.g.:: + + from io import BytesIO + buf = BytesIO() + mathtext.math_to_image(text, buf, format="png") + buf.seek(0) + rgba = plt.imread(buf) + +Deprecation of mathtext internals +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The following API elements previously exposed by the :mod:`.mathtext` module +are considered to be implementation details and public access to them is +deprecated: + +- ``Fonts`` and all its subclasses, +- ``FontConstantsBase`` and all its subclasses, +- ``Node`` and all its subclasses, +- ``Ship``, ``ship``, +- ``Error``, +- ``Parser``, +- ``SHRINK_FACTOR``, ``GROW_FACTOR``, +- ``NUM_SIZE_LEVELS``, +- ``latex_to_bakoma``, ``latex_to_cmex``, ``latex_to_standard``, +- ``stix_virtual_fonts``, +- ``tex2uni``. + +Deprecation of various mathtext helpers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``MathtextBackendPdf``, ``MathtextBackendPs``, ``MathtextBackendSvg``, +and ``MathtextBackendCairo`` classes from the :mod:`.mathtext` module, as +well as the corresponding ``.mathtext_parser`` attributes on ``RendererPdf``, +``RendererPS``, ``RendererSVG``, and ``RendererCairo``, are deprecated. The +``MathtextBackendPath`` class can be used to obtain a list of glyphs and +rectangles in a mathtext expression, and renderer-specific logic should be +directly implemented in the renderer. + +``StandardPsFonts.pswriter`` is unused and deprecated. + +Widget class internals +~~~~~~~~~~~~~~~~~~~~~~ + +Several `.widgets.Widget` class internals have been privatized and deprecated: + +- ``AxesWidget.cids`` +- ``Button.cnt`` and ``Button.observers`` +- ``CheckButtons.cnt`` and ``CheckButtons.observers`` +- ``RadioButtons.cnt`` and ``RadioButtons.observers`` +- ``Slider.cnt`` and ``Slider.observers`` +- ``TextBox.cnt``, ``TextBox.change_observers`` and + ``TextBox.submit_observers`` + +3D properties on renderers +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The properties of the 3D Axes that were placed on the Renderer during draw are +now deprecated: + +- ``renderer.M`` +- ``renderer.eye`` +- ``renderer.vvec`` +- ``renderer.get_axis_position`` + +These attributes are all available via `.Axes3D`, which can be accessed via +``self.axes`` on all `.Artist`\s. + +*renderer* argument of ``do_3d_projection`` method for ``Collection3D``/``Patch3D`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *renderer* argument for the ``do_3d_projection`` method on ``Collection3D`` +and ``Patch3D`` is no longer necessary, and passing it during draw is +deprecated. + +*project* argument of ``draw`` method for ``Line3DCollection`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *project* argument for the ``draw`` method on ``Line3DCollection`` is +deprecated. Call `.Line3DCollection.do_3d_projection` explicitly instead. + +Extra positional parameters to ``plot_surface`` and ``plot_wireframe`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Positional parameters to `~.axes3d.Axes3D.plot_surface` and +`~.axes3d.Axes3D.plot_wireframe` other than ``X``, ``Y``, and ``Z`` are +deprecated. Pass additional artist properties as keyword arguments instead. + +``ParasiteAxesAuxTransBase`` class +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The functionality of that mixin class has been moved to the base +``ParasiteAxesBase`` class. Thus, ``ParasiteAxesAuxTransBase``, +``ParasiteAxesAuxTrans``, and ``parasite_axes_auxtrans_class_factory`` are +deprecated. + +In general, it is suggested to use ``HostAxes.get_aux_axes`` to create +parasite Axes, as this saves the need of manually appending the parasite +to ``host.parasites`` and makes sure that their ``remove()`` method works +properly. + +``AxisArtist.ZORDER`` attribute +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Use ``AxisArtist.zorder`` instead. + +``GridHelperBase`` invalidation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``GridHelperBase.invalidate``, ``GridHelperBase.valid``, and +``axislines.Axes.invalidate_grid_helper`` methods are considered internal +and deprecated. + +``sphinext.plot_directive.align`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... is deprecated. Use ``docutils.parsers.rst.directives.images.Image.align`` +instead. + +Deprecation-related functionality is considered internal +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The module ``matplotlib.cbook.deprecation`` is considered internal and will be +removed from the public API. This also holds for deprecation-related re-imports +in ``matplotlib.cbook``, i.e. ``matplotlib.cbook.deprecated()``, +``matplotlib.cbook.warn_deprecated()``, +``matplotlib.cbook.MatplotlibDeprecationWarning`` and +``matplotlib.cbook.mplDeprecation``. + +If needed, external users may import ``MatplotlibDeprecationWarning`` directly +from the ``matplotlib`` namespace. ``mplDeprecation`` is only an alias of +``MatplotlibDeprecationWarning`` and should not be used anymore. diff --git a/doc/api/prev_api_changes/api_changes_3.4.0/development.rst b/doc/api/prev_api_changes/api_changes_3.4.0/development.rst new file mode 100644 index 000000000000..ab5e118de9e8 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.4.0/development.rst @@ -0,0 +1,49 @@ +Development changes +------------------- + +Increase to minimum supported versions of Python and dependencies +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For Maptlotlib 3.4, the :ref:`minimum supported versions ` are +being bumped: + ++------------+-----------------+---------------+ +| Dependency | min in mpl3.3 | min in mpl3.4 | ++============+=================+===============+ +| Python | 3.6 | 3.7 | ++------------+-----------------+---------------+ +| dateutil | 2.1 | 2.7 | ++------------+-----------------+---------------+ +| numpy | 1.15 | 1.16 | ++------------+-----------------+---------------+ +| pyparsing | 2.0.3 | 2.2.1 | ++------------+-----------------+---------------+ + +This is consistent with our :ref:`min_deps_policy` and `NEP29 +`__ + +Qhull downloaded at build-or-sdist time +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Much like FreeType, Qhull is now downloaded at build time, or upon creation of +the sdist. To link against system Qhull, set the ``system_qhull`` option to +`True` in the :file:`setup.cfg` file. Note that Matplotlib now requires the +re-entrant version of Qhull (``qhull_r``). + +``FigureBase`` class added, and ``Figure`` class made a child +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The new subfigure feature motivated some re-organization of the +`.figure.Figure` class, so that the new `.figure.SubFigure` class could have +all the capabilities of a figure. + +The `.figure.Figure` class is now a subclass of `.figure.FigureBase`, where +`.figure.FigureBase` contains figure-level artist addition routines, and the +`.figure.Figure` subclass just contains features that are unique to the outer +figure. + +Note that there is a new *transSubfigure* transform associated with the +subfigure. This transform also exists for a `.Figure` instance, and is equal +to *transFigure* in that case, so code that uses the transform stack that wants +to place objects on either the parent figure or one of the subfigures should +use *transSubfigure*. diff --git a/doc/api/prev_api_changes/api_changes_3.4.0/removals.rst b/doc/api/prev_api_changes/api_changes_3.4.0/removals.rst new file mode 100644 index 000000000000..1f558800bd8f --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.4.0/removals.rst @@ -0,0 +1,177 @@ +Removals +-------- +The following deprecated APIs have been removed: + +Removed behaviour +~~~~~~~~~~~~~~~~~ + +- The "smart bounds" functionality on `~.axis.Axis` and `.Spine` has been + deleted, and the related methods have been removed. +- Converting a string with single color characters (e.g. ``'cymk'``) in + `~.colors.to_rgba_array` is no longer supported. Instead, the colors can be + passed individually in a list (e.g. ``['c', 'y', 'm', 'k']``). +- Returning a factor equal to ``None`` from ``mpl_toolkits.axisartist`` + Locators (which are **not** the same as "standard" tick Locators), or passing + a factor equal to ``None`` to axisartist Formatters (which are **not** the + same as "standard" tick Formatters) is no longer supported. Pass a factor + equal to 1 instead. + +Modules +~~~~~~~ + +- The entire ``matplotlib.testing.disable_internet`` module has been removed. + The `pytest-remotedata package + `_ can be used instead. +- The ``mpl_toolkits.axes_grid1.colorbar`` module and its colorbar + implementation have been removed in favor of `matplotlib.colorbar`. + +Classes, methods and attributes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- The `.animation.MovieWriterRegistry` methods ``.set_dirty()``, + ``.ensure_not_dirty()``, and ``.reset_available_writers()`` do nothing and + have been removed. The ``.avail()`` method has been removed; use ``.list()`` + instead to get a list of available writers. +- The ``matplotlib.artist.Artist.eventson`` and + ``matplotlib.container.Container.eventson`` attributes have no effect and + have been removed. +- ``matplotlib.axes.Axes.get_data_ratio_log`` has been removed. +- ``matplotlib.axes.SubplotBase.rowNum``; use + ``ax.get_subplotspec().rowspan.start`` instead. +- ``matplotlib.axes.SubplotBase.colNum``; use + ``ax.get_subplotspec().colspan.start`` instead. +- ``matplotlib.axis.Axis.set_smart_bounds`` and + ``matplotlib.axis.Axis.get_smart_bounds`` have been removed. +- ``matplotlib.colors.DivergingNorm`` has been renamed to + `~matplotlib.colors.TwoSlopeNorm`. +- ``matplotlib.figure.AxesStack`` has been removed. +- ``matplotlib.font_manager.JSONEncoder`` has been removed; use + `.font_manager.json_dump` to dump a `.FontManager` instance. +- The ``matplotlib.ft2font.FT2Image`` methods ``.as_array()``, + ``.as_rgba_str()``, ``.as_str()``, ``.get_height()`` and ``.get_width()`` + have been removed. Convert the ``FT2Image`` to a NumPy array with + ``np.asarray`` before processing it. +- ``matplotlib.quiver.QuiverKey.quiverkey_doc`` has been removed; use + ``matplotlib.quiver.QuiverKey.__init__.__doc__`` instead. +- ``matplotlib.spines.Spine.set_smart_bounds`` and + ``matplotlib.spines.Spine.get_smart_bounds`` have been removed. +- ``matplotlib.testing.jpl_units.UnitDbl.checkUnits`` has been removed; use + ``units not in self.allowed`` instead. +- The unused ``matplotlib.ticker.Locator.autoscale`` method has been removed + (pass the axis limits to `.Locator.view_limits` instead). The derived methods + ``Locator.autoscale``, ``AutoDateLocator.autoscale``, + ``RRuleLocator.autoscale``, ``RadialLocator.autoscale``, + ``ThetaLocator.autoscale``, and ``YearLocator.autoscale`` have also been + removed. +- ``matplotlib.transforms.BboxBase.is_unit`` has been removed; check the + `.Bbox` extents if needed. +- ``matplotlib.transforms.Affine2DBase.matrix_from_values(...)`` has been + removed; use (for example) ``Affine2D.from_values(...).get_matrix()`` + instead. + +* ``matplotlib.backend_bases.FigureCanvasBase.draw_cursor`` has been removed. +* ``matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.destroy`` and + ``matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.init_window`` methods + have been removed. +* ``matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.window`` property has + been removed. +* ``matplotlib.backends.backend_macosx.FigureCanvasMac.invalidate`` has been + removed. +* ``matplotlib.backends.backend_pgf.RendererPgf.latexManager`` has been removed. +* ``matplotlib.backends.backend_wx.FigureFrameWx.statusbar``, + ``matplotlib.backends.backend_wx.NavigationToolbar2Wx.set_status_bar``, and + ``matplotlib.backends.backend_wx.NavigationToolbar2Wx.statbar`` have been + removed. The status bar can be retrieved by calling standard wx methods + (``frame.GetStatusBar()`` and + ``toolbar.GetTopLevelParent().GetStatusBar()``). +* ``matplotlib.backends.backend_wx.ConfigureSubplotsWx.configure_subplots`` and + ``matplotlib.backends.backend_wx.ConfigureSubplotsWx.get_canvas`` have been + removed. + + +- ``mpl_toolkits.axisartist.grid_finder.GridFinderBase`` has been removed; use + `.GridFinder` instead. +- ``mpl_toolkits.axisartist.axis_artist.BezierPath`` has been removed; use + `.patches.PathPatch` instead. + +Functions +~~~~~~~~~ + +- ``matplotlib.backends.backend_pgf.repl_escapetext`` and + ``matplotlib.backends.backend_pgf.repl_mathdefault`` have been removed. +- ``matplotlib.checkdep_ps_distiller`` has been removed. +- ``matplotlib.cm.revcmap`` has been removed; use `.Colormap.reversed` + instead. +- ``matplotlib.colors.makeMappingArray`` has been removed. +- ``matplotlib.compare_versions`` has been removed; use comparison of + ``distutils.version.LooseVersion``\s instead. +- ``matplotlib.dates.mx2num`` has been removed. +- ``matplotlib.font_manager.createFontList`` has been removed; + `.font_manager.FontManager.addfont` is now available to register a font at a + given path. +- ``matplotlib.get_home`` has been removed; use standard library instead. +- ``matplotlib.mlab.apply_window`` and ``matplotlib.mlab.stride_repeat`` have + been removed. +- ``matplotlib.rcsetup.update_savefig_format`` has been removed; this just + replaced ``'auto'`` with ``'png'``, so do the same. +- ``matplotlib.rcsetup.validate_animation_writer_path`` has been removed. +- ``matplotlib.rcsetup.validate_path_exists`` has been removed; use + `os.path.exists` or `pathlib.Path.exists` instead. +- ``matplotlib.style.core.is_style_file`` and + ``matplotlib.style.core.iter_style_files`` have been removed. +- ``matplotlib.testing.is_called_from_pytest`` has been removed. +- ``mpl_toolkits.mplot3d.axes3d.unit_bbox`` has been removed; use `.Bbox.unit` + instead. + + +Arguments +~~~~~~~~~ + +- Passing more than one positional argument to `.axes.Axes.axis` will now + raise an error. +- Passing ``"range"`` to the *whis* parameter of `.Axes.boxplot` and + `.cbook.boxplot_stats` to mean "the whole data range" is no longer + supported. +- Passing scalars to the *where* parameter in `.axes.Axes.fill_between` and + `.axes.Axes.fill_betweenx` is no longer accepted and non-matching sizes now + raise a `ValueError`. +- The *verts* parameter to `.Axes.scatter` has been removed; use *marker* instead. +- The *minor* parameter in `.Axis.set_ticks` and ``SecondaryAxis.set_ticks`` is + now keyword-only. +- `.scale.ScaleBase`, `.scale.LinearScale` and `.scale.SymmetricalLogScale` now + error if any unexpected keyword arguments are passed to their constructors. +- The *renderer* parameter to `.Figure.tight_layout` has been removed; this + method now always uses the renderer instance cached on the `.Figure`. +- The *locator* parameter to + `mpl_toolkits.axes_grid1.axes_grid.CbarAxesBase.colorbar` has been removed in + favor of its synonym *ticks* (which already existed previously, + and is consistent with :mod:`matplotlib.colorbar`). +- The *switch_backend_warn* parameter to ``matplotlib.test`` has no effect and + has been removed. +- The *dryrun* parameter to the various ``FigureCanvas*.print_*`` methods has + been removed. + +rcParams +~~~~~~~~ + +- The ``datapath`` rcParam has been removed. Use `matplotlib.get_data_path` + instead. +- The ``mpl_toolkits.legacy_colorbar`` rcParam has no effect and has been + removed. +- Setting :rc:`boxplot.whiskers` to ``"range"`` is no longer valid; set it to + ``0, 100`` instead. +- Setting :rc:`savefig.format` to ``"auto"`` is no longer valid; use ``"png"`` + instead. +- Setting :rc:`text.hinting` to `False` or `True` is no longer valid; set it to + ``"auto"`` or ``"none"`` respectively. + +sample_data removals +~~~~~~~~~~~~~~~~~~~~ +The sample datasets listed below have been removed. Suggested replacements for +demonstration purposes are listed in parentheses. + +- ``None_vs_nearest-pdf.png``, +- ``aapl.npz`` (use ``goog.npz``), +- ``ada.png``, ``grace_hopper.png`` (use ``grace_hopper.jpg``), +- ``ct.raw.gz`` (use ``s1045.ima.gz``), +- ``damodata.csv`` (use ``msft.csv``). diff --git a/doc/citing.rst b/doc/citing.rst index 7d5840925276..d98f9f58008a 100644 --- a/doc/citing.rst +++ b/doc/citing.rst @@ -10,7 +10,7 @@ pp. 90-95, 2007 `_. .. literalinclude:: MCSE.2007.55.bib :language: bibtex - + .. container:: sphx-glr-download :download:`Download BibTeX bibliography file: MCSE.2007.55.bib ` @@ -29,6 +29,12 @@ By version .. START OF AUTOGENERATED +v3.4.1 + .. image:: _static/zenodo_cache/4649959.svg + :target: https://doi.org/10.5281/zenodo.4649959 +v3.4.0 + .. image:: _static/zenodo_cache/4638398.svg + :target: https://doi.org/10.5281/zenodo.4638398 v3.3.4 .. image:: _static/zenodo_cache/4475376.svg :target: https://doi.org/10.5281/zenodo.4475376 diff --git a/doc/conf.py b/doc/conf.py index 28ffb4c5bb89..f67dd662c0bd 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -70,7 +70,7 @@ exclude_patterns = [ 'api/prev_api_changes/api_changes_*/*', # Be sure to update users/whats_new.rst: - 'users/prev_whats_new/whats_new_3.3.0.rst', + 'users/prev_whats_new/whats_new_3.4.0.rst', ] diff --git a/doc/users/github_stats.rst b/doc/users/github_stats.rst index 739ca5c5eb36..00c8b56eb5dc 100644 --- a/doc/users/github_stats.rst +++ b/doc/users/github_stats.rst @@ -3,52 +3,56 @@ GitHub Stats ============ -GitHub stats for 2020/11/12 - 2021/01/28 (tag: v3.3.3) +GitHub stats for 2021/03/26 - 2021/03/31 (tag: v3.4.0) These lists are automatically generated, and may be incomplete or contain duplicates. -We closed 2 issues and merged 20 pull requests. -The full list can be seen `on GitHub `__ +We closed 7 issues and merged 20 pull requests. +The full list can be seen `on GitHub `__ -The following 7 authors contributed 43 commits. +The following 6 authors contributed 43 commits. * Antony Lee -* David Stansby * Elliott Sales de Andrade * Jody Klymak -* Mark Harfouche * Thomas A Caswell * Tim Hoffmann +* Xianxiang Li GitHub issues and pull requests: Pull Requests (20): -* :ghpull:`19386`: Backport PR #19238 on branch v3.3.x (Fix build with LTO disabled in environment) -* :ghpull:`19238`: Fix build with LTO disabled in environment -* :ghpull:`19382`: Backport PR #19052 on branch v3.3.x (Always pass integers to wx.Size.) -* :ghpull:`19377`: Backport PR #19371 on branch v3.3.x (Fix specgram test on NumPy 1.20.) -* :ghpull:`19371`: Fix specgram test on NumPy 1.20. -* :ghpull:`19305`: Backport PR #19301 on branch v3.3.x -* :ghpull:`19301`: Fix several CI issues -* :ghpull:`19269`: Backport PR #19266 on branch v3.3.x (Don't update homebrew on GitHub Actions) -* :ghpull:`19266`: Don't update homebrew on GitHub Actions -* :ghpull:`19252`: Backport PR #19245 on branch v3.3.x (handle usecase where QT_API is specified with some capitals) -* :ghpull:`19245`: handle usecase where QT_API is specified with some capitals -* :ghpull:`19143`: Backport PR #19131 on branch v3.3.x (Fix WebAgg initialization) -* :ghpull:`19115`: Backport PR #19108 on branch v3.3.x -* :ghpull:`19165`: Backport PR #19163 on branch v3.3.x (Ignore missing _FancyAxislineStyle doc targets.) -* :ghpull:`19163`: Ignore missing _FancyAxislineStyle doc targets. -* :ghpull:`19131`: Fix WebAgg initialization -* :ghpull:`19052`: Always pass integers to wx.Size. -* :ghpull:`19108`: Fix failing animation test with pytest 6.2. -* :ghpull:`19062`: Backport PR #19036 on branch v3.3.x -* :ghpull:`19036`: Start testing using GitHub Actions - -Issues (2): - -* :ghissue:`19227`: Matplotlib generates invalid ft2font if -fno-lto gcc CFLAGS used -* :ghissue:`19129`: webAgg example broken - maybe mpl.js broken? +* :ghpull:`19834`: Backport PR #19812: FIX: size and color rendering for Path3DCollection +* :ghpull:`19833`: Backport PR #19811 on branch v3.4.x (Fix Inkscape cleanup at exit on Windows.) +* :ghpull:`19812`: FIX: size and color rendering for Path3DCollection +* :ghpull:`19811`: Fix Inkscape cleanup at exit on Windows. +* :ghpull:`19816`: Fix legend of colour-mapped scatter plots. +* :ghpull:`19830`: Backport PR #19824 on branch v3.4.x (Access pdf annotations while inside pikepdf.Pdf context manager.) +* :ghpull:`19829`: Backport PR #19822 on branch v3.4.x (Clarify default backend selection doc.) +* :ghpull:`19827`: Backport PR #19805 on branch v3.4.x (Fix suptitle out of layout) +* :ghpull:`19824`: Access pdf annotations while inside pikepdf.Pdf context manager. +* :ghpull:`19805`: Fix suptitle out of layout +* :ghpull:`19823`: Backport PR #19814 on branch v3.4.x (Fix positioning of annotation arrow.) +* :ghpull:`19820`: Backport PR #19817 on branch v3.4.x (Fix antialiasing with old pycairo/cairocffi.) +* :ghpull:`19814`: Fix positioning of annotation arrow. +* :ghpull:`19817`: Fix antialiasing with old pycairo/cairocffi. +* :ghpull:`19818`: Backport PR #19784 on branch v3.4.x (FIX errorbar problem with fillstyle) +* :ghpull:`19784`: FIX errorbar problem with fillstyle +* :ghpull:`19815`: Backport PR #19793 on branch v3.4.x (Fix non existent URIs) +* :ghpull:`19793`: Fix non existent URIs +* :ghpull:`19783`: Backport PR #19719 on branch v3.4.x (Respect antialiasing settings in cairo backends as well.) +* :ghpull:`19719`: Respect antialiasing settings in cairo backends as well. + +Issues (7): + +* :ghissue:`19779`: BUG: matplotlib 3.4.0 -- Scatter with colormap and legend gives TypeError: object of type 'NoneType' has no len() +* :ghissue:`19787`: Marker sizes in Axes3D scatter plot are changing all the time +* :ghissue:`19809`: Tests that use "image_comparison" fail to cleanup on Windows +* :ghissue:`19803`: Suptitle positioning messed up in 3.4.0 +* :ghissue:`19785`: Starting point of annotation arrows has changed in 3.4.0 +* :ghissue:`19776`: Errorbars with yerr fail when fillstyle is specified +* :ghissue:`19780`: redirect_from extension breaks latex build Previous GitHub Stats diff --git a/doc/users/next_whats_new/2019-06-28-AL.rst b/doc/users/next_whats_new/2019-06-28-AL.rst deleted file mode 100644 index f127b2c1c158..000000000000 --- a/doc/users/next_whats_new/2019-06-28-AL.rst +++ /dev/null @@ -1,17 +0,0 @@ -``Colormap.set_extremes`` and ``Colormap.with_extremes`` -```````````````````````````````````````````````````````` - -Because the `.Colormap.set_bad`, `.Colormap.set_under` and `.Colormap.set_over` -methods modify the colormap in place, the user must be careful to first make a -copy of the colormap if setting the extreme colors e.g. for a builtin colormap. - -The new ``Colormap.with_extremes(bad=..., under=..., over=...)`` can be used to -first copy the colormap and set the extreme colors on that copy. - -The new `.Colormap.set_extremes` method is provided for API symmetry with -`.Colormap.with_extremes`, but note that it suffers from the same issue as the -earlier individual setters. - -Additionally, it is now possible to set :rc:`image.cmap` to a `.Colormap` -instance, such as a new colormap created with `~.Colormap.set_extremes`. (This -can only be done from Python code, not from the :file:`matplotlibrc` file.) diff --git a/doc/users/next_whats_new/2019-08_tac.rst b/doc/users/next_whats_new/2019-08_tac.rst deleted file mode 100644 index 3e7e3648b421..000000000000 --- a/doc/users/next_whats_new/2019-08_tac.rst +++ /dev/null @@ -1,6 +0,0 @@ - -Add ``cm.unregister_cmap`` function ------------------------------------ - -`.cm.unregister_cmap` allows users to remove a colormap that they -have previously registered. diff --git a/doc/users/next_whats_new/2019-11-06_auto-labeling-for-bar-charts.rst b/doc/users/next_whats_new/2019-11-06_auto-labeling-for-bar-charts.rst deleted file mode 100644 index ed53ceeb8132..000000000000 --- a/doc/users/next_whats_new/2019-11-06_auto-labeling-for-bar-charts.rst +++ /dev/null @@ -1,7 +0,0 @@ -:orphan: - -Bar charts auto-labeling ------------------------- -A new `.Axes.bar_label` method has been added for auto-labeling bar charts. -See :doc:`/gallery/lines_bars_and_markers/bar_label_demo` for examples. - diff --git a/doc/users/next_whats_new/2019-11-12_bar_container_accepts_orientation.rst b/doc/users/next_whats_new/2019-11-12_bar_container_accepts_orientation.rst deleted file mode 100644 index 9f57349a2a96..000000000000 --- a/doc/users/next_whats_new/2019-11-12_bar_container_accepts_orientation.rst +++ /dev/null @@ -1,7 +0,0 @@ -:orphan: - -Setting BarContainer orientation --------------------------------- -`.BarContainer` now accepts a new string argument ``orientation``. -It can be either ``vertical`` or ``horizontal``, default is ``None``. - diff --git a/doc/users/next_whats_new/2019-12-22_transform-rotates-text-direction.rst b/doc/users/next_whats_new/2019-12-22_transform-rotates-text-direction.rst deleted file mode 100644 index babeee0a262c..000000000000 --- a/doc/users/next_whats_new/2019-12-22_transform-rotates-text-direction.rst +++ /dev/null @@ -1,7 +0,0 @@ -:orphan: - -Transform can rotate text direction ------------------------------------ -The new `.Text` parameter ``transform_rotates_text`` now sets whether -rotations of the transform affect the text direction. - diff --git a/doc/users/next_whats_new/2020-01-09-AL.rst b/doc/users/next_whats_new/2020-01-09-AL.rst deleted file mode 100644 index 7a48465c1c0d..000000000000 --- a/doc/users/next_whats_new/2020-01-09-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -Contour plots now default to using ScalarFormatter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Pass ``fmt="%1.3f"`` to the contouring call to restore the old default label -format. diff --git a/doc/users/next_whats_new/2020-04-12-spines.rst b/doc/users/next_whats_new/2020-04-12-spines.rst deleted file mode 100644 index d4105aecb4cb..000000000000 --- a/doc/users/next_whats_new/2020-04-12-spines.rst +++ /dev/null @@ -1,19 +0,0 @@ -``Axes.spines`` ---------------- - -``Axes.spines`` is now a dedicated container class `.Spines` for a set of -`.Spine`\s instead of an ``OrderedDict``. On top of dict-like access, -``Axes.spines`` now also supports some ``pandas.Series``-like features. - -Accessing single elements by item or by attribute - - ax.spines['top'].set_visible(False) - ax.spines.top.set_visible(False) - -Accessing a subset of items:: - - ax.spines[['top', 'right']].set_visible(False) - -Accessing all items simultaneously:: - - ax.spines[:].set_visible(False) diff --git a/doc/users/next_whats_new/2020-04-26-merged-rasterizations.rst b/doc/users/next_whats_new/2020-04-26-merged-rasterizations.rst deleted file mode 100644 index d6ad7c4a4d0e..000000000000 --- a/doc/users/next_whats_new/2020-04-26-merged-rasterizations.rst +++ /dev/null @@ -1,13 +0,0 @@ -Consecutive rasterized draws now merged ---------------------------------------- - -Elements of a vector output can be individually set to rasterized, using -the ``rasterized`` keyword, or `~.artist.Artist.set_rasterized()`. This can -be useful to reduce file sizes. For figures with multiple raster elements -they are now automatically merged into a smaller number of bitmaps where -this will not effect the visual output. For cases with many elements this -can result in significantly smaller file sizes. - -To ensure this happens do not place vector elements between raster ones. - -To inhibit this merging set ``Figure.suppressComposite`` to True. diff --git a/doc/users/next_whats_new/2020-05-26-cl-subplot.rst b/doc/users/next_whats_new/2020-05-26-cl-subplot.rst deleted file mode 100644 index 0031cc6656b6..000000000000 --- a/doc/users/next_whats_new/2020-05-26-cl-subplot.rst +++ /dev/null @@ -1,21 +0,0 @@ -Subplot and subplot2grid can now work with constrained layout -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``constrained_layout`` depends on a single ``GridSpec`` -for each logical layout on a figure. Previously, ``plt.subplot`` and -``plt.subplot2grid`` added a new ``GridSpec`` each time they were called and -were therefore incompatible with ``constrained_layout``. - -Now ``plt.subplot`` attempts to reuse the ``GridSpec`` if the number of rows -and columns is the same as the top level gridspec already in the figure. -i.e. ``plt.subplot(2, 1, 2)`` will use the same gridspec as -``plt.subplot(2, 1, 1)`` and the ``constrained_layout=True`` option to -`~.figure.Figure` will work. - -In contrast, mixing ``nrows`` and ``ncols`` will *not* work with -``constrained_lyaout``: ``plt.subplot(2, 2, 1)`` followed by -``plt.subplots(2, 1, 2)`` will still produce two gridspecs, and -``constrained_layout=True`` will give bad results. In order to get the -desired effect, the second call can specify the cells the second axes is meant -to cover: ``plt.subplots(2, 2, (2, 4))``, or the more pythonic -``plt.subplot2grid((2, 2), (0, 1), rowspan=2)`` can be used. diff --git a/doc/users/next_whats_new/2020-07-15-errorbar-cycling.rst b/doc/users/next_whats_new/2020-07-15-errorbar-cycling.rst deleted file mode 100644 index 23d3e327da0a..000000000000 --- a/doc/users/next_whats_new/2020-07-15-errorbar-cycling.rst +++ /dev/null @@ -1,23 +0,0 @@ -``Axes.errorbar`` cycles non-color properties correctly -------------------------------------------------------- - -Formerly, `.Axes.errorbar` incorrectly skipped the Axes property cycle if a -color was explicitly specified, even if the property cycler was for other -properties (such as line style). Now, `.Axes.errorbar` will advance the Axes -property cycle as done for `.Axes.plot`, i.e., as long as all properties in the -cycler are not explicitly passed. - -For example, the following will cycle through the line styles: - -.. plot:: - :include-source: True - - x = np.arange(0.1, 4, 0.5) - y = np.exp(-x) - offsets = [0, 1] - - plt.rcParams['axes.prop_cycle'] = plt.cycler('linestyle', ['-', '--']) - - fig, ax = plt.subplots() - for offset in offsets: - ax.errorbar(x, y + offset, xerr=0.1, yerr=0.3, fmt='tab:blue') diff --git a/doc/users/next_whats_new/alpha_array.rst b/doc/users/next_whats_new/alpha_array.rst deleted file mode 100644 index 3cfe8f14a0a8..000000000000 --- a/doc/users/next_whats_new/alpha_array.rst +++ /dev/null @@ -1,31 +0,0 @@ -Transparency (alpha) can be set as an array in collections ----------------------------------------------------------- -Previously, the alpha value controlling tranparency in collections could be -specified only as a scalar applied to all elements in the collection. -For example, all the markers in a `~.Axes.scatter` plot, or all the -quadrilaterals in a `~.Axes.pcolormesh` plot, would have the same alpha value. - -Now it is possible to supply alpha as an array with one value for each element -(marker, quadrilateral, etc.) in a collection. - -.. plot:: - - x = np.arange(5, dtype=float) - y = np.arange(5, dtype=float) - # z and zalpha for demo pcolormesh - z = x[1:, np.newaxis] + y[np.newaxis, 1:] - zalpha = np.ones_like(z) - zalpha[::2, ::2] = 0.3 # alternate patches are partly transparent - # s and salpha for demo scatter - s = x - salpha = np.linspace(0.1, 0.9, len(x)) # just a ramp - - fig, axs = plt.subplots(2, 2, constrained_layout=True) - axs[0, 0].pcolormesh(x, y, z, alpha=zalpha) - axs[0, 0].set_title("pcolormesh") - axs[0, 1].scatter(x, y, c=s, alpha=salpha) - axs[0, 1].set_title("color-mapped") - axs[1, 0].scatter(x, y, c='k', alpha=salpha) - axs[1, 0].set_title("c='k'") - axs[1, 1].scatter(x, y, c=['r', 'g', 'b', 'c', 'm'], alpha=salpha) - axs[1, 1].set_title("c=['r', 'g', 'b', 'c', 'm']") diff --git a/doc/users/next_whats_new/axes_class.rst b/doc/users/next_whats_new/axes_class.rst deleted file mode 100644 index 19b80c6a6e8a..000000000000 --- a/doc/users/next_whats_new/axes_class.rst +++ /dev/null @@ -1,4 +0,0 @@ -add_subplot/add_axes gained an *axes_class* parameter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In particular, ``mpl_toolkits`` axes subclasses can now be idiomatically used -using e.g. ``fig.add_subplot(axes_class=mpl_toolkits.axislines.Axes)`` diff --git a/doc/users/next_whats_new/axes_kwargs_collision.rst b/doc/users/next_whats_new/axes_kwargs_collision.rst deleted file mode 100644 index 350e75f800b5..000000000000 --- a/doc/users/next_whats_new/axes_kwargs_collision.rst +++ /dev/null @@ -1,21 +0,0 @@ -Changes to behavior of Axes creation methods (``gca()``, ``add_axes()``, ``add_subplot()``) -------------------------------------------------------------------------------------------- - -The behavior of the functions to create new axes (`.pyplot.axes`, -`.pyplot.subplot`, `.figure.Figure.add_axes`, -`.figure.Figure.add_subplot`) has changed. In the past, these -functions would detect if you were attempting to create Axes with the -same keyword arguments as already-existing axes in the current figure, -and if so, they would return the existing Axes. Now, `.pyplot.axes`, -`.figure.Figure.add_axes`, and `.figure.Figure.add_subplot` will -always create new Axes. `.pyplot.subplot` will continue to reuse an -existing Axes with a matching subplot spec and equal *kwargs*. - -Correspondingly, the behavior of the functions to get the current Axes -(`.pyplot.gca`, `.figure.Figure.gca`) has changed. In the past, these -functions accepted keyword arguments. If the keyword arguments -matched an already-existing Axes, then that Axes would be returned, -otherwise new Axes would be created with those keyword arguments. -Now, the keyword arguments are only considered if there are no axes at -all in the current figure. In a future release, these functions will -not accept keyword arguments at all. diff --git a/doc/users/next_whats_new/axline_transform.rst b/doc/users/next_whats_new/axline_transform.rst deleted file mode 100644 index 9b66c8573f89..000000000000 --- a/doc/users/next_whats_new/axline_transform.rst +++ /dev/null @@ -1,6 +0,0 @@ -axline supports *transform* parameter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`~.Axes.axline` now supports the *transform* parameter, which applies to -the points *xy1*, *xy2*. The *slope* (if given) is always in data coordinates. -This can be used e.g. with ``ax.transAxes`` for drawing grid lines with a fixed -slope. diff --git a/doc/users/next_whats_new/bar_hatches.rst b/doc/users/next_whats_new/bar_hatches.rst deleted file mode 100644 index 532ded3e67f7..000000000000 --- a/doc/users/next_whats_new/bar_hatches.rst +++ /dev/null @@ -1,14 +0,0 @@ -A list of hatches can be specified to `~.axes.Axes.bar` and `~.axes.Axes.barh` ------------------------------------------------------------------------------- - -Similar to some other rectangle properties, it is now possible to hand a list -of hatch styles to `~.axes.Axes.bar` and `~.axes.Axes.barh` in order to create -bars with different hatch styles, e.g. - -.. plot:: - - import matplotlib.pyplot as plt - - fig, ax = plt.subplots() - ax.bar([1, 2], [2, 3], hatch=['+', 'o']) - plt.show() diff --git a/doc/users/next_whats_new/bracket_angle.rst b/doc/users/next_whats_new/bracket_angle.rst deleted file mode 100644 index 960f5a626216..000000000000 --- a/doc/users/next_whats_new/bracket_angle.rst +++ /dev/null @@ -1,25 +0,0 @@ -Angles on Bracket arrow styles ------------------------------- - -Angles specified on the *Bracket* arrow styles (``]-[``, ``]-``, ``-[``, or -``|-|`` passed to *arrowstyle* parameter of `.FancyArrowPatch`) are now -applied. Previously, the *angleA* and *angleB* options were allowed, but did -nothing. - -.. plot:: - - import matplotlib.pyplot as plt - import matplotlib.patches as mpatches - - fig, ax = plt.subplots() - ax.set(xlim=(0, 1), ylim=(-1, 4)) - - for i, stylename in enumerate((']-[', '|-|')): - for j, angle in enumerate([-30, 60]): - arrowstyle = f'{stylename},angleA={angle},angleB={-angle}' - patch = mpatches.FancyArrowPatch((0.1, 2*i + j), (0.9, 2*i + j), - arrowstyle=arrowstyle, - mutation_scale=25) - ax.text(0.5, 2*i + j, arrowstyle, - verticalalignment='bottom', horizontalalignment='center') - ax.add_patch(patch) diff --git a/doc/users/next_whats_new/callables_for_formatting_sankey_labels.rst b/doc/users/next_whats_new/callables_for_formatting_sankey_labels.rst deleted file mode 100644 index 38aa766a38e4..000000000000 --- a/doc/users/next_whats_new/callables_for_formatting_sankey_labels.rst +++ /dev/null @@ -1,46 +0,0 @@ -Support callable for formatting of Sankey labels ------------------------------------------------- - -The `format` parameter of `matplotlib.sankey.Sankey` can now accept callables. - -This allows the use of an arbitrary function to label flows, for example allowing -the mapping of numbers to emoji. - -.. plot:: - - import matplotlib.pyplot as plt - from matplotlib.sankey import Sankey - import math - - - def display_in_cats(values, min_cats, max_cats): - def display_in_cat_scale(value): - max_value = max(values, key=abs) - number_cats_to_show = \ - max(min_cats, math.floor(abs(value) / max_value * max_cats)) - return str(number_cats_to_show * '🐱') - - return display_in_cat_scale - - - flows = [35, 15, 40, -20, -15, -5, -40, -10] - orientations = [-1, 1, 0, 1, 1, 1, -1, -1] - - # Cats are good, we want a strictly positive number of them - min_cats = 1 - # More than four cats might be too much for some people - max_cats = 4 - - cats_format = display_in_cats(flows, min_cats, max_cats) - - sankey = Sankey(flows=flows, orientations=orientations, format=cats_format, - offset=.1, head_angle=180, shoulder=0, scale=.010) - - diagrams = sankey.finish() - - diagrams[0].texts[2].set_text('') - - plt.title(f'Sankey flows measured in cats \n' - f'🐱 = {max(flows, key=abs) / max_cats}') - - plt.show() diff --git a/doc/users/next_whats_new/centerednorm.rst b/doc/users/next_whats_new/centerednorm.rst deleted file mode 100644 index 0c3f8a687a24..000000000000 --- a/doc/users/next_whats_new/centerednorm.rst +++ /dev/null @@ -1,35 +0,0 @@ -New CenteredNorm for symmetrical data around a center ------------------------------------------------------ -In cases where data is symmetrical around a center, for example, positive and -negative anomalies around a center zero, `~.matplotlib.colors.CenteredNorm` -is a new norm that automatically creates a symmetrical mapping around the -center. This norm is well suited to be combined with a divergent colormap which -uses an unsaturated color in its center. - - .. plot:: - - import matplotlib.pyplot as plt - import numpy as np - from matplotlib.colors import CenteredNorm - - np.random.seed(20201004) - data = np.random.normal(size=(3, 4), loc=1) - - fig, ax = plt.subplots() - pc = ax.pcolormesh(data, cmap=plt.get_cmap('RdGy'), norm=CenteredNorm()) - fig.colorbar(pc) - ax.set_title('data centered around zero') - - # add text annotation - for irow, data_row in enumerate(data): - for icol, val in enumerate(data_row): - ax.text(icol + 0.5, irow + 0.5, f'{val:.2f}', color='C0', - size=16, va='center', ha='center') - plt.show() - -If the center of symmetry is different from 0, it can be set with the *vcenter* -argument. To manually set the range of `~.matplotlib.colors.CenteredNorm`, use -the *halfrange* argument. - -See :doc:`/tutorials/colors/colormapnorms` for an example and more details -about data normalization. diff --git a/doc/users/next_whats_new/collection_color_handling.rst b/doc/users/next_whats_new/collection_color_handling.rst deleted file mode 100644 index d913962b7d52..000000000000 --- a/doc/users/next_whats_new/collection_color_handling.rst +++ /dev/null @@ -1,14 +0,0 @@ -Collection color specification and mapping ------------------------------------------- - -Reworking the handling of color mapping and the keyword arguments for facecolor -and edgecolor has resulted in three behavior changes: - -1. Color mapping can be turned off by calling ``Collection.set_array(None)``. - Previously, this would have no effect. -2. When a mappable array is set, with ``facecolor='none'`` and - ``edgecolor='face'``, both the faces and the edges are left uncolored. - Previously the edges would be color-mapped. -3. When a mappable array is set, with ``facecolor='none'`` and - ``edgecolor='red'``, the edges are red. This addresses Issue #1302. - Previously the edges would be color-mapped. diff --git a/doc/users/next_whats_new/colorbar_position.rst b/doc/users/next_whats_new/colorbar_position.rst deleted file mode 100644 index 93fc833952b4..000000000000 --- a/doc/users/next_whats_new/colorbar_position.rst +++ /dev/null @@ -1,5 +0,0 @@ -Gridspec-based colorbars can now be positioned above or to the left of the main axes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... by passing ``location="top"`` or ``location="left"`` to the ``colorbar()`` -call. diff --git a/doc/users/next_whats_new/colormap_get_under_over_bad.rst b/doc/users/next_whats_new/colormap_get_under_over_bad.rst deleted file mode 100644 index d21e7b4349cc..000000000000 --- a/doc/users/next_whats_new/colormap_get_under_over_bad.rst +++ /dev/null @@ -1,7 +0,0 @@ -Get under/over/bad colors of Colormap objects -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`matplotlib.colors.Colormap` now has methods -`~.colors.Colormap.get_under`, `~.colors.Colormap.get_over`, -`~.colors.Colormap.get_bad` for the colors used for out-of-range and masked -values. diff --git a/doc/users/next_whats_new/colormap_repr.rst b/doc/users/next_whats_new/colormap_repr.rst deleted file mode 100644 index 2f02f9eff978..000000000000 --- a/doc/users/next_whats_new/colormap_repr.rst +++ /dev/null @@ -1,6 +0,0 @@ -IPython representations for Colormap objects -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The `matplotlib.colors.Colormap` object now has image representations for -IPython / Jupyter backends. Cells returning a colormap on the last line will -display an image of the colormap. diff --git a/doc/users/next_whats_new/date_usetex.rst b/doc/users/next_whats_new/date_usetex.rst deleted file mode 100644 index 0f94ada24ec9..000000000000 --- a/doc/users/next_whats_new/date_usetex.rst +++ /dev/null @@ -1,26 +0,0 @@ -Date formatters now respect *usetex* rcParam --------------------------------------------- - -The `.AutoDateFormatter` and `.ConciseDateFormatter` now respect -:rc:`text.usetex`, and will thus use fonts consistent with TeX rendering of the -default (non-date) formatter. TeX rendering may also be enabled/disabled by -passing the *usetex* parameter when creating the formatter instance. - -In the following plot, both the x-axis (dates) and y-axis (numbers) now use the -same (TeX) font: - -.. plot:: - - from datetime import datetime, timedelta - from matplotlib.dates import ConciseDateFormatter - - plt.rc('text', usetex=True) - - t0 = datetime(1968, 8, 1) - ts = [t0 + i * timedelta(days=1) for i in range(10)] - - fig, ax = plt.subplots() - ax.plot(ts, range(10)) - ax.xaxis.set_major_formatter(ConciseDateFormatter(ax.xaxis.get_major_locator())) - ax.set_xlabel('Date') - ax.set_ylabel('Value') diff --git a/doc/users/next_whats_new/errorbar_errorevery.rst b/doc/users/next_whats_new/errorbar_errorevery.rst deleted file mode 100644 index f773f6574389..000000000000 --- a/doc/users/next_whats_new/errorbar_errorevery.rst +++ /dev/null @@ -1,20 +0,0 @@ -``errorbar`` *errorevery* parameter matches *markevery* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Similar to the *markevery* parameter to `~.Axes.plot`, the *errorevery* -parameter of `~.Axes.errorbar` now accept slices and NumPy fancy indexes (which -must match the size of *x*). - -.. plot:: - - x = np.linspace(0, 1, 15) - y = x * (1-x) - yerr = y/6 - - fig, ax = plt.subplots(2, constrained_layout=True) - ax[0].errorbar(x, y, yerr, capsize=2) - ax[0].set_title('errorevery unspecified') - - ax[1].errorbar(x, y, yerr, capsize=2, - errorevery=[False, True, True, False, True] * 3) - ax[1].set_title('errorevery=[False, True, True, False, True] * 3') diff --git a/doc/users/next_whats_new/errorbars_3d.rst b/doc/users/next_whats_new/errorbars_3d.rst deleted file mode 100644 index c6fb893fd4b6..000000000000 --- a/doc/users/next_whats_new/errorbars_3d.rst +++ /dev/null @@ -1,6 +0,0 @@ -Errorbar method for mplot3d ---------------------------- - -The errorbar function `.Axes.errorbar` is ported into the 3D Axes framework in -its entirety, supporting features such as custom styling for error lines and -cap marks, control over erorrbar spacing, upper and lower limit marks. diff --git a/doc/users/next_whats_new/mathtext.rst b/doc/users/next_whats_new/mathtext.rst deleted file mode 100644 index d864f975c48c..000000000000 --- a/doc/users/next_whats_new/mathtext.rst +++ /dev/null @@ -1,11 +0,0 @@ -``matplotlib.mathtext`` now supports *overset* and *underset* LaTeX symbols ---------------------------------------------------------------------------- - -`.mathtext` now supports *overset* and *underset*, called as -``\overset{annotation}{body}`` or ``\underset{annotation}{body}``, where -*annotation* is the text "above" or "below" the *body*. - -.. plot:: - - math_expr = r"$ x \overset{f}{\rightarrow} y \underset{f}{\leftarrow} z $" - plt.text(0.4, 0.5, math_expr, usetex=False) diff --git a/doc/users/next_whats_new/mplot3d_modification.rst b/doc/users/next_whats_new/mplot3d_modification.rst deleted file mode 100644 index 0ed3735a0e3b..000000000000 --- a/doc/users/next_whats_new/mplot3d_modification.rst +++ /dev/null @@ -1,8 +0,0 @@ -3D Collection properties are now modifiable -------------------------------------------- - -Previously, properties of a 3D Collection that were used for 3D effects (e.g., -colors were modified to produce depth shading) could not be changed after it -was created. - -Now it is possible to modify all properties of 3D Collections at any time. diff --git a/doc/users/next_whats_new/multiple_labels_for_Axes_plot.rst b/doc/users/next_whats_new/multiple_labels_for_Axes_plot.rst deleted file mode 100644 index 1584357dc618..000000000000 --- a/doc/users/next_whats_new/multiple_labels_for_Axes_plot.rst +++ /dev/null @@ -1,19 +0,0 @@ -An iterable object with labels can be passed to `.Axes.plot` ------------------------------------------------------------- - -When plotting multiple datasets by passing 2D data as *y* value to -`~.Axes.plot`, labels for the datasets can be passed as a list, the -length matching the number of columns in *y*. - -.. plot:: - - import matplotlib.pyplot as plt - - x = [1, 2, 3] - - y = [[1, 2], - [2, 5], - [4, 9]] - - plt.plot(x, y, label=['low', 'high']) - plt.legend() diff --git a/doc/users/next_whats_new/panning_3d.rst b/doc/users/next_whats_new/panning_3d.rst deleted file mode 100644 index 185cc778f50d..000000000000 --- a/doc/users/next_whats_new/panning_3d.rst +++ /dev/null @@ -1,4 +0,0 @@ -Panning for mplot3d -------------------- - -Click and drag with the middle mouse button to pan 3d axes. diff --git a/doc/users/next_whats_new/pausing_animations.rst b/doc/users/next_whats_new/pausing_animations.rst deleted file mode 100644 index 692e187d9580..000000000000 --- a/doc/users/next_whats_new/pausing_animations.rst +++ /dev/null @@ -1,6 +0,0 @@ -Pausing and Resuming Animations -------------------------------- -The `.animation.Animation.pause` and `.animation.Animation.resume` methods -allow you to pause and resume animations. These methods can be used as callbacks -for event listeners on UI elements so that your plots can have some playback -control UI. diff --git a/doc/users/next_whats_new/pcolormesh_alpha_improvement.rst b/doc/users/next_whats_new/pcolormesh_alpha_improvement.rst deleted file mode 100644 index 8b9ec98e7b85..000000000000 --- a/doc/users/next_whats_new/pcolormesh_alpha_improvement.rst +++ /dev/null @@ -1,40 +0,0 @@ -pcolormesh has improved transparency handling by enabling snapping ------------------------------------------------------------------- - -Due to how the snapping keyword argument was getting passed to the AGG backend, -previous versions of Matplotlib would appear to show lines between the grid -edges of a mesh with transparency. This version now applies snapping -by default. To restore the old behavior (e.g., for test images), you may set -:rc:`pcolormesh.snap` to `False`. - -.. plot:: - - import matplotlib.pyplot as plt - import numpy as np - - # Use old pcolormesh snapping values - plt.rcParams['pcolormesh.snap'] = False - fig, ax = plt.subplots() - xx, yy = np.meshgrid(np.arange(10), np.arange(10)) - z = (xx + 1) * (yy + 1) - mesh = ax.pcolormesh(xx, yy, z, shading='auto', alpha=0.5) - fig.colorbar(mesh, orientation='vertical') - ax.set_title('Before (pcolormesh.snap = False)') - -Note that there are lines between the grid boundaries of the main plot which -are not the same transparency. The colorbar also shows these lines when a -transparency is added to the colormap because internally it uses pcolormesh -to draw the colorbar. With snapping on by default (below), the lines -at the grid boundaries disappear. - -.. plot:: - - import matplotlib.pyplot as plt - import numpy as np - - fig, ax = plt.subplots() - xx, yy = np.meshgrid(np.arange(10), np.arange(10)) - z = (xx + 1) * (yy + 1) - mesh = ax.pcolormesh(xx, yy, z, shading='auto', alpha=0.5) - fig.colorbar(mesh, orientation='vertical') - ax.set_title('After (default: pcolormesh.snap = True)') diff --git a/doc/users/next_whats_new/pdf_urls.rst b/doc/users/next_whats_new/pdf_urls.rst deleted file mode 100644 index c34fbae63a16..000000000000 --- a/doc/users/next_whats_new/pdf_urls.rst +++ /dev/null @@ -1,5 +0,0 @@ -PDF supports URLs on ``Text`` artists -------------------------------------- - -URLs on `.text.Text` artists (i.e., from `.Artist.set_url`) will now be saved -in PDF files. diff --git a/doc/users/next_whats_new/range_slider.rst b/doc/users/next_whats_new/range_slider.rst deleted file mode 100644 index 07ddae8e0626..000000000000 --- a/doc/users/next_whats_new/range_slider.rst +++ /dev/null @@ -1,4 +0,0 @@ -New RangeSlider widget ----------------------- -`.widgets.RangeSlider` allows for creating a slider that defines -a range rather than a single value. diff --git a/doc/users/next_whats_new/rcparams_dates.rst b/doc/users/next_whats_new/rcparams_dates.rst deleted file mode 100644 index 370271a99e6b..000000000000 --- a/doc/users/next_whats_new/rcparams_dates.rst +++ /dev/null @@ -1,31 +0,0 @@ -New rcParams for dates: set converter and whether to use interval_multiples -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The new :rc:`date.converter` allows toggling between -`matplotlib.dates.DateConverter` and `matplotlib.dates.ConciseDateConverter` -using the strings 'auto' and 'concise' respectively. - -The new :rc:`date.interval_multiples` allows toggling between the dates -locator trying to pick ticks at set intervals (i.e. day 1 and 15 of the -month), versus evenly spaced ticks that start where ever the -timeseries starts: - -.. plot:: - :include-source: True - - import matplotlib.pyplot as plt - import numpy as np - - dates = np.arange('2001-01-10', '2001-05-23', dtype='datetime64[D]') - y = np.sin(dates.astype(float) / 10) - fig, axs = plt.subplots(nrows=2, constrained_layout=True) - - plt.rcParams['date.converter'] = 'concise' - plt.rcParams['date.interval_multiples'] = True - ax = axs[0] - ax.plot(dates, y) - - plt.rcParams['date.converter'] = 'auto' - plt.rcParams['date.interval_multiples'] = False - ax = axs[1] - ax.plot(dates, y) diff --git a/doc/users/next_whats_new/set_colors_ticks_and_ticklabels_rcparams.rst b/doc/users/next_whats_new/set_colors_ticks_and_ticklabels_rcparams.rst deleted file mode 100644 index afa4bc3f01ea..000000000000 --- a/doc/users/next_whats_new/set_colors_ticks_and_ticklabels_rcparams.rst +++ /dev/null @@ -1,30 +0,0 @@ -The color of ticks and tick labels can be set independently using rcParams --------------------------------------------------------------------------- - -Previously, :rc:`xtick.color` used to define the tick color and the label color. -The label color can now be set independently using -:rc:`xtick.labelcolor`. It defaults to "inherit" which will take the value -from :rc:`xtick.color`. The same holds for ``ytick.[label]color``. -For instance, to set the ticks to light grey and the tick labels -to black, one can use the following code in a script:: - - - import matplotlib as mpl - - mpl.rcParams['xtick.labelcolor'] = 'lightgrey' - mpl.rcParams['xtick.color'] = 'black' - mpl.rcParams['ytick.labelcolor'] = 'lightgrey' - mpl.rcParams['ytick.color'] = 'black' - - -Or by adding the following lines to the -:ref:`matplotlib rc ` file: or a -matplotlib style file: - - -.. code-block:: none - - xtick.labelcolor : lightgrey - xtick.color : black - ytick.labelcolor : lightgrey - ytick.color : black diff --git a/doc/users/next_whats_new/slider_snap_to_array.rst b/doc/users/next_whats_new/slider_snap_to_array.rst deleted file mode 100644 index e0756c547229..000000000000 --- a/doc/users/next_whats_new/slider_snap_to_array.rst +++ /dev/null @@ -1,6 +0,0 @@ -Sliders can now snap to arbitrary values -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The `~matplotlib.widgets.Slider` UI widget now accepts arrays for *valstep*. -This generalizes the previous behavior by allowing the slider to snap to -arbitrary values. diff --git a/doc/users/next_whats_new/stem3d.rst b/doc/users/next_whats_new/stem3d.rst deleted file mode 100644 index 0d1939a8885d..000000000000 --- a/doc/users/next_whats_new/stem3d.rst +++ /dev/null @@ -1,24 +0,0 @@ -Stem plots in 3D Axes ---------------------- - -Stem plots are now supported on 3D Axes. Much like 2D stems, -`~.axes3d.Axes3D.stem3D` supports plotting the stems in various orientations: - -.. plot:: - - theta = np.linspace(0, 2*np.pi) - x = np.cos(theta - np.pi/2) - y = np.sin(theta - np.pi/2) - z = theta - directions = ['z', 'x', 'y'] - names = [r'$\theta$', r'$\cos\theta$', r'$\sin\theta$'] - - fig, axs = plt.subplots(1, 3, figsize=(8, 4), - constrained_layout=True, - subplot_kw={'projection': '3d'}) - for ax, zdir, name in zip(axs, directions, names): - ax.stem(x, y, z, orientation=zdir) - ax.set_title(name) - fig.suptitle(r'A parametric circle: $(x, y) = (\cos\theta, \sin\theta)$') - -See also the :doc:`/gallery/mplot3d/stem3d_demo` demo. diff --git a/doc/users/next_whats_new/stem_orientation.rst b/doc/users/next_whats_new/stem_orientation.rst deleted file mode 100644 index 727c9c6ec60f..000000000000 --- a/doc/users/next_whats_new/stem_orientation.rst +++ /dev/null @@ -1,13 +0,0 @@ -Added *orientation* parameter for stem plots --------------------------------------------- - -By default, stem lines are vertical. They can be changed to horizontal using -the *orientation* parameter of `.Axes.stem` or `.pyplot.stem`: - -.. plot:: - - locs = np.linspace(0.1, 2 * np.pi, 25) - heads = np.cos(locs) - - fig, ax = plt.subplots() - ax.stem(locs, heads, orientation='horizontal') diff --git a/doc/users/next_whats_new/steppatch_and_stairs.rst b/doc/users/next_whats_new/steppatch_and_stairs.rst deleted file mode 100644 index f5d76c5fd99b..000000000000 --- a/doc/users/next_whats_new/steppatch_and_stairs.rst +++ /dev/null @@ -1,27 +0,0 @@ -New StepPatch artist and a stairs method ----------------------------------------- -`.pyplot.stairs` and the underlying artist `~.matplotlib.patches.StepPatch` -provide a cleaner interface for plotting stepwise constant functions for the -common case that you know the step edges. This superseeds many use cases of -`.pyplot.step`, for instance when plotting the output of `numpy.histogram`. - -For both the artist and the function, the x-like edges input is one element -longer than the y-like values input - - .. plot:: - - import numpy as np - import matplotlib.pyplot as plt - - np.random.seed(0) - h, edges = np.histogram(np.random.normal(5, 2, 5000), - bins=np.linspace(0,10,20)) - - fig, ax = plt.subplots(constrained_layout=True) - - ax.stairs(h, edges) - - plt.show() - -See :doc:`/gallery/lines_bars_and_markers/stairs_demo` -for examples. \ No newline at end of file diff --git a/doc/users/next_whats_new/subfigures.rst b/doc/users/next_whats_new/subfigures.rst deleted file mode 100644 index 3290afa460f4..000000000000 --- a/doc/users/next_whats_new/subfigures.rst +++ /dev/null @@ -1,53 +0,0 @@ -New subfigure functionality ---------------------------- -New `.figure.Figure.add_subfigure` and `.figure.Figure.subfigures` -functionalities allow creating virtual figures within figures. Similar -nesting was previously done with nested gridspecs -( see :doc:`/gallery/subplots_axes_and_figures/gridspec_nested`). However, this -did not allow localized figure artists (i.e. a colorbar or suptitle) that -only pertained to each subgridspec. - -The new methods `.figure.Figure.add_subfigure` and `.figure.Figure.subfigures` -are meant to rhyme with `.figure.Figure.add_subplot` and -`.figure.Figure.subplots` and have most of the same arguments. - -See :doc:`/gallery/subplots_axes_and_figures/subfigures`. - -.. note:: - - The subfigure functionality is experimental API as of v3.4. - -.. plot:: - - def example_plot(ax, fontsize=12, hide_labels=False): - pc = ax.pcolormesh(np.random.randn(30, 30)) - if not hide_labels: - ax.set_xlabel('x-label', fontsize=fontsize) - ax.set_ylabel('y-label', fontsize=fontsize) - ax.set_title('Title', fontsize=fontsize) - return pc - - np.random.seed(19680808) - fig = plt.figure(constrained_layout=True, figsize=(10, 4)) - subfigs = fig.subfigures(1, 2, wspace=0.07) - - axsLeft = subfigs[0].subplots(1, 2, sharey=True) - subfigs[0].set_facecolor('0.75') - for ax in axsLeft: - pc = example_plot(ax) - subfigs[0].suptitle('Left plots', fontsize='x-large') - subfigs[0].colorbar(pc, shrink=0.6, ax=axsLeft, location='bottom') - - axsRight = subfigs[1].subplots(3, 1, sharex=True) - for nn, ax in enumerate(axsRight): - pc = example_plot(ax, hide_labels=True) - if nn == 2: - ax.set_xlabel('xlabel') - if nn == 1: - ax.set_ylabel('ylabel') - subfigs[1].colorbar(pc, shrink=0.6, ax=axsRight) - subfigs[1].suptitle('Right plots', fontsize='x-large') - - fig.suptitle('Figure suptitle', fontsize='xx-large') - - plt.show() diff --git a/doc/users/next_whats_new/suplabels.rst b/doc/users/next_whats_new/suplabels.rst deleted file mode 100644 index 2d4de6c289ef..000000000000 --- a/doc/users/next_whats_new/suplabels.rst +++ /dev/null @@ -1,19 +0,0 @@ -supxlabel and supylabel ------------------------ - -It is possible to add x- and y-labels to a whole figure, analogous to -`.FigureBase.suptitle` using the new `.FigureBase.supxlabel` and -`.FigureBase.supylabel` methods. - -.. plot:: - - np.random.seed(19680801) - fig, axs = plt.subplots(3, 2, figsize=(5, 5), constrained_layout=True, - sharex=True, sharey=True) - - for nn, ax in enumerate(axs.flat): - ax.set_title(f'Channel {nn}') - ax.plot(np.cumsum(np.random.randn(50))) - - fig.supxlabel('Time [s]') - fig.supylabel('Data [V]') diff --git a/doc/users/next_whats_new/top-left-shared-subplots.rst b/doc/users/next_whats_new/top-left-shared-subplots.rst deleted file mode 100644 index 71ca83208f69..000000000000 --- a/doc/users/next_whats_new/top-left-shared-subplots.rst +++ /dev/null @@ -1,10 +0,0 @@ -Shared-axes ``subplots`` tick label visibility is now correct for top or left labels -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -When calling ``subplots(..., sharex=True, sharey=True)``, Matplotlib -automatically hides x tick labels for axes not in the first column and y tick -labels for axes not in the last row. This behavior is incorrect if rcParams -specify that axes should be labeled on the top (``rcParams["xtick.labeltop"] = -True``) or on the right (``rcParams["ytick.labelright"] = True``). - -Such cases are now handled correctly (adjusting visibility as needed on the -first row and last column of axes). diff --git a/doc/users/prev_whats_new/github_stats_3.3.4.rst b/doc/users/prev_whats_new/github_stats_3.3.4.rst new file mode 100644 index 000000000000..e61309836034 --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.3.4.rst @@ -0,0 +1,51 @@ +.. _github-stats-3-3-4: + +GitHub Stats for Matplotlib 3.3.4 +================================= + +GitHub stats for 2020/11/12 - 2021/01/28 (tag: v3.3.3) + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 2 issues and merged 20 pull requests. +The full list can be seen `on GitHub `__ + +The following 7 authors contributed 43 commits. + +* Antony Lee +* David Stansby +* Elliott Sales de Andrade +* Jody Klymak +* Mark Harfouche +* Thomas A Caswell +* Tim Hoffmann + +GitHub issues and pull requests: + +Pull Requests (20): + +* :ghpull:`19386`: Backport PR #19238 on branch v3.3.x (Fix build with LTO disabled in environment) +* :ghpull:`19238`: Fix build with LTO disabled in environment +* :ghpull:`19382`: Backport PR #19052 on branch v3.3.x (Always pass integers to wx.Size.) +* :ghpull:`19377`: Backport PR #19371 on branch v3.3.x (Fix specgram test on NumPy 1.20.) +* :ghpull:`19371`: Fix specgram test on NumPy 1.20. +* :ghpull:`19305`: Backport PR #19301 on branch v3.3.x +* :ghpull:`19301`: Fix several CI issues +* :ghpull:`19269`: Backport PR #19266 on branch v3.3.x (Don't update homebrew on GitHub Actions) +* :ghpull:`19266`: Don't update homebrew on GitHub Actions +* :ghpull:`19252`: Backport PR #19245 on branch v3.3.x (handle usecase where QT_API is specified with some capitals) +* :ghpull:`19245`: handle usecase where QT_API is specified with some capitals +* :ghpull:`19143`: Backport PR #19131 on branch v3.3.x (Fix WebAgg initialization) +* :ghpull:`19115`: Backport PR #19108 on branch v3.3.x +* :ghpull:`19165`: Backport PR #19163 on branch v3.3.x (Ignore missing _FancyAxislineStyle doc targets.) +* :ghpull:`19163`: Ignore missing _FancyAxislineStyle doc targets. +* :ghpull:`19131`: Fix WebAgg initialization +* :ghpull:`19052`: Always pass integers to wx.Size. +* :ghpull:`19108`: Fix failing animation test with pytest 6.2. +* :ghpull:`19062`: Backport PR #19036 on branch v3.3.x +* :ghpull:`19036`: Start testing using GitHub Actions + +Issues (2): + +* :ghissue:`19227`: Matplotlib generates invalid ft2font if -fno-lto gcc CFLAGS used +* :ghissue:`19129`: webAgg example broken - maybe mpl.js broken? diff --git a/doc/users/prev_whats_new/github_stats_3.4.0.rst b/doc/users/prev_whats_new/github_stats_3.4.0.rst new file mode 100644 index 000000000000..a9c62990714d --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.4.0.rst @@ -0,0 +1,1174 @@ +.. _github-stats-3-4-0: + +GitHub Stats for Matplotlib 3.4.0 +================================= + +GitHub stats for 2020/07/16 - 2021/03/25 (tag: v3.3.0) + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 204 issues and merged 772 pull requests. +The full list can be seen `on GitHub `__ + +The following 177 authors contributed 3852 commits. + +* A N U S H +* Adam Brown +* Aditya Malhotra +* aflah02 +* Aitik Gupta +* Alejandro García +* Alex Henrie +* Alexander Schlüter +* Alexis de Almeida Coutinho +* Andreas C Mueller +* andrzejnovak +* Antony Lee +* Arthur Milchior +* bakes +* BAKEZQ +* BaoGiang HoangVu +* Ben Root +* BH4 +* Bradley Dice +* Braxton Lamey +* Brian McFee +* Bruno Beltran +* Bryan Kok +* Byron Boulton +* Carsten Schelp +* ceelo777 +* Charles +* CharlesHe16 +* Christian Baumann +* Contextualist +* DangoMelon +* Daniel +* Daniel Ingram +* David Meyer +* David Stansby +* David Young +* deep-jkl +* Diego Leal +* Dr. Thomas A Caswell +* Dylan Cutler +* Eben Pendleton +* EBenkler +* ebenp +* ecotner +* Elliott Sales de Andrade +* Emily FY +* Eric Firing +* Eric Larson +* Eric Prestat +* Erik Benkler +* Evan Berkowitz +* Ewan Sutherland +* Federico Ariza +* Forrest +* Frank Sauerburger +* FrankTheCodeMonkey +* Greg Lucas +* hannah +* Harry Knight +* Harsh Sharma +* Hassan Kibirige +* Hugo van Kemenade +* Iain-S +* Ian Hunt-Isaak +* Ian Thomas +* ianhi +* Ilya V. Schurov +* ImportanceOfBeingErnest +* Isuru Fernando +* ItsRLuo +* J. Scott Berg +* Jae-Joon Lee +* Jakub Klus +* Janakarajan Natarajan +* Jann Paul Mattern +* jbhopkins +* jeetvora331 +* Jerome F. Villegas +* Jerome Villegas +* jfbu +* Jirka Hladky +* Jody Klymak +* Johan von Forstner +* johan12345 +* john imperial +* John Losito +* John Peloquin +* johnthagen +* Jouni K. Seppänen +* Kate Perkins +* kate-perkins +* katrielester +* kolibril13 +* kwgchi +* Lee Johnston +* Leo Singer +* linchiwei123 +* Lucy Liu +* luz paz +* luzpaz +* Léonard Gérard +* majorwitty +* mansoor96g +* Maria Ilie +* Maria-Alexandra Ilie +* Marianne Corvellec +* Mark Harfouche +* Martin Spacek +* Mary Chris Go +* Matthew Petroff +* Matthias Bussonnier +* Matthias Geier +* Max Chen +* McToel +* Michael Grupp +* Michaël Defferrard +* Mihai Anton +* Mohammad Aflah Khan +* Neilzon Viloria +* neok-m4700 +* Nora Moseman +* Pamela Wu +* pankajchetry1168 +* Petar Mlinarić +* Peter Williams +* Phil Nagel +* philip-sparks +* Philipp Arras +* Philipp Nagel +* Pratyush Raj +* Péter Leéh +* rajpratyush +* Randall Ung +* reshamas +* Rezangyal +* Richard Sheridan +* richardsheridan +* Rob McDonald +* Rohit Rawat +* Ruben Verweij +* Ruth Comer +* Ryan May +* Sam Tygier +* shawnchen +* shawnchen1996 +* ShawnChen1996 +* Sidharth Bansal +* Srihitha Maryada +* Stephen Sinclair +* Struan Murray +* Theodor Athanasiadis +* Thomas A Caswell +* Thorvald Johannessen +* Tim Gates +* Tim Hoffmann +* Tobias Hangleiter +* tohc1 +* Tom Charrett +* Tom Neep +* Tomas Fiers +* ulijh +* Ulrich J. Herter +* Utkarshp1 +* Uwe F. Mayer +* Valentin Valls +* Vincent Cuenca +* Vineyard +* Vlas Sokolov +* Xianxiang Li +* xlilos +* Ye Chang +* Yichao Yu +* yozhikoff +* Yun Liu +* z0rgy +* zitorelova + +GitHub issues and pull requests: + +Pull Requests (772): + +* :ghpull:`19775`: Fix deprecation for imread on URLs. +* :ghpull:`19772`: Backport PR #19535 on branch v3.4.x (Fix example's BasicUnit array conversion.) +* :ghpull:`19771`: Backport PR #19757 on branch v3.4.x (Fixed python -mpip typo) +* :ghpull:`19770`: Backport PR #19739 on branch v3.4.x (Changed 'python -mpip' to 'python -m pip' for consistency) +* :ghpull:`19535`: Fix example's BasicUnit array conversion. +* :ghpull:`19767`: Backport PR #19766 on branch v3.4.x (Set colormap modification removal to 3.6.) +* :ghpull:`19766`: Set colormap modification removal to 3.6. +* :ghpull:`19764`: Backport PR #19762 on branch v3.4.x (FIX: do not report that webagg supports blitting) +* :ghpull:`19762`: FIX: do not report that webagg supports blitting +* :ghpull:`19689`: Prepare API docs for v3.4.0 +* :ghpull:`19761`: Backport PR #19746 on branch v3.4.x (Fix resizing in nbAgg.) +* :ghpull:`19746`: Fix resizing in nbAgg. +* :ghpull:`19757`: Fixed python -mpip typo +* :ghpull:`19739`: Changed 'python -mpip' to 'python -m pip' for consistency +* :ghpull:`19713`: DOC: Prepare What's new page for 3.4.0. +* :ghpull:`19742`: Backport PR #19741 on branch v3.4.x (Only override pickradius when picker is not a bool.) +* :ghpull:`19741`: Only override pickradius when picker is not a bool. +* :ghpull:`19726`: Backport PR #19505 on branch v3.4.x (Move some advanced documentation away from Installation Guide) +* :ghpull:`19505`: Move some advanced documentation away from Installation Guide +* :ghpull:`19712`: Backport PR #19707 on branch v3.4.x (DOC: fix dx in Arrow guide) +* :ghpull:`19711`: Backport PR #19709 on branch v3.4.x (Fix arrow_guide.py typo) +* :ghpull:`19709`: Fix arrow_guide.py typo +* :ghpull:`19707`: DOC: fix dx in Arrow guide +* :ghpull:`19699`: Backport PR #19695 on branch v3.4.x (DOC: Increase size of headings) +* :ghpull:`19695`: DOC: Increase size of headings +* :ghpull:`19697`: Backport PR #19690 on branch v3.4.x (Only warn about existing redirects if content differs.) +* :ghpull:`19690`: Only warn about existing redirects if content differs. +* :ghpull:`19696`: Backport PR #19665 on branch v3.4.x (Changed FormatStrFormatter documentation to include how to get unicode minus) +* :ghpull:`19680`: Backport PR #19402 on branch v3.4.x (Build aarch64 wheels) +* :ghpull:`19678`: Backport PR #19671 on branch v3.4.x (Fix crash in early window raise in gtk3.) +* :ghpull:`19671`: Fix crash in early window raise in gtk3. +* :ghpull:`19665`: Changed FormatStrFormatter documentation to include how to get unicode minus +* :ghpull:`19402`: Build aarch64 wheels +* :ghpull:`19669`: Backport PR #19661 on branch v3.4.x (Fix CoC link) +* :ghpull:`19668`: Backport PR #19663 on branch v3.4.x (ENH: add a copy method to colormaps) +* :ghpull:`19663`: ENH: add a copy method to colormaps +* :ghpull:`19661`: Fix CoC link +* :ghpull:`19652`: Backport PR #19649 on branch v3.4.x (Use globals() instead of locals() for adding colormaps as names to cm module) +* :ghpull:`19649`: Use globals() instead of locals() for adding colormaps as names to cm module +* :ghpull:`19651`: Backport PR #19618 on branch v3.4.x (FIX: make the cache in font_manager._get_font keyed by thread id) +* :ghpull:`19650`: Backport PR #19625 on branch v3.4.x (Restore _AxesStack to track a Figure's Axes order.) +* :ghpull:`19647`: Backport PR #19645 on branch v3.4.x (Fix comment in RectangleSelector) +* :ghpull:`19618`: FIX: make the cache in font_manager._get_font keyed by thread id +* :ghpull:`19648`: Backport PR #19643 on branch v3.4.x (Don't turn check_for_pgf into public API.) +* :ghpull:`19625`: Restore _AxesStack to track a Figure's Axes order. +* :ghpull:`19643`: Don't turn check_for_pgf into public API. +* :ghpull:`19645`: Fix comment in RectangleSelector +* :ghpull:`19644`: Backport PR #19611 on branch v3.4.x (Fix double picks.) +* :ghpull:`19611`: Fix double picks. +* :ghpull:`19640`: Backport PR #19639 on branch v3.4.x (FIX: do not allow single element list of str in subplot_mosaic) +* :ghpull:`19639`: FIX: do not allow single element list of str in subplot_mosaic +* :ghpull:`19638`: Backport PR #19632 on branch v3.4.x (Fix handling of warn keyword in in Figure.show.) +* :ghpull:`19637`: Backport PR #19582 on branch v3.4.x (Add kerning to single-byte strings in PDFs) +* :ghpull:`19632`: Fix handling of warn keyword in in Figure.show. +* :ghpull:`19582`: Add kerning to single-byte strings in PDFs +* :ghpull:`19629`: Backport PR #19548 on branch v3.4.x (Increase tolerances for other arches.) +* :ghpull:`19630`: Backport PR #19596 on branch v3.4.x (Fix for issue 17769: wx interactive figure close cause crash) +* :ghpull:`19596`: Fix for issue 17769: wx interactive figure close cause crash +* :ghpull:`19548`: Increase tolerances for other arches. +* :ghpull:`19616`: Backport PR #19577 on branch v3.4.x (Fix "return"->"enter" mapping in key names.) +* :ghpull:`19617`: Backport PR #19571 on branch v3.4.x (Fail early when setting Text color to a non-colorlike.) +* :ghpull:`19615`: Backport PR #19583 on branch v3.4.x (FIX: check for a set during color conversion) +* :ghpull:`19614`: Backport PR #19597 on branch v3.4.x (Fix IPython import issue) +* :ghpull:`19613`: Backport PR #19546 on branch v3.4.x (Move unrendered README.wx to thirdpartypackages/index.rst.) +* :ghpull:`19583`: FIX: check for a set during color conversion +* :ghpull:`19597`: Fix IPython import issue +* :ghpull:`19571`: Fail early when setting Text color to a non-colorlike. +* :ghpull:`19595`: Backport PR #19589 on branch v3.4.x (Changes linestyle parameter of flierprops) +* :ghpull:`19577`: Fix "return"->"enter" mapping in key names. +* :ghpull:`19589`: Changes linestyle parameter of flierprops +* :ghpull:`19592`: Backport PR #19587 on branch v3.4.x (DOC: fix plot_date doc) +* :ghpull:`19587`: DOC: fix plot_date doc +* :ghpull:`19580`: Backport PR #19456 on branch v3.4.x (Doc implement reredirects) +* :ghpull:`19579`: Backport PR #19567 on branch v3.4.x (DOC: fix typos) +* :ghpull:`19456`: Doc implement reredirects +* :ghpull:`19567`: DOC: fix typos +* :ghpull:`19542`: Backport PR #19532 on branch v3.4.x (Add note on interaction between text wrapping and bbox_inches='tight') +* :ghpull:`19549`: Backport PR #19545 on branch v3.4.x (Replace references to pygtk by pygobject in docs.) +* :ghpull:`19546`: Move unrendered README.wx to thirdpartypackages/index.rst. +* :ghpull:`19545`: Replace references to pygtk by pygobject in docs. +* :ghpull:`19532`: Add note on interaction between text wrapping and bbox_inches='tight' +* :ghpull:`19541`: MAINT: fix typo from #19438 +* :ghpull:`19480`: Fix CallbackRegistry memory leak +* :ghpull:`19539`: In scatter, fix single rgb edgecolors handling +* :ghpull:`19438`: FIX: restore creating new axes via plt.subplot with different kwargs +* :ghpull:`18436`: Sync 3D errorbar with 2D +* :ghpull:`19472`: Fix default label visibility for top-or-left-labeled shared subplots(). +* :ghpull:`19496`: MNT: Restore auto-adding Axes3D to their parent figure on init +* :ghpull:`19533`: Clarify the animated property and reword blitting tutorial a bit +* :ghpull:`19146`: Fix #19128: webagg reports incorrect values for non-alphanumeric key events on non-qwerty keyboards +* :ghpull:`18068`: Add note on writing binary formats to stdout using savefig() +* :ghpull:`19507`: FIX: ensure we import when the user cwd does not exist +* :ghpull:`19413`: FIX: allow add option for Axes3D(fig) +* :ghpull:`19498`: Dedupe implementations of {XAxis,YAxis}._get_tick_boxes_siblings. +* :ghpull:`19502`: Prefer projection="polar" over polar=True. +* :ghpull:`18480`: Clarify color priorities in collections +* :ghpull:`19501`: Fix text position with usetex and xcolor +* :ghpull:`19460`: Implement angles for bracket arrow styles. +* :ghpull:`18408`: FIX/API: ``fig.canvas.draw`` always updates internal state +* :ghpull:`19504`: Remove remaining references to Travis CI +* :ghpull:`13358`: 3D margins consistency for mplot3d (isometric projection) +* :ghpull:`19529`: Simplify checking for tex packages. +* :ghpull:`19516`: Ignore files from annotate coverage reports +* :ghpull:`19500`: Remove workaround for numpy<1.16, and update version check. +* :ghpull:`19518`: Skip setting up a tmpdir in tests that don't need one. +* :ghpull:`19514`: DOC: add fixed-aspect colorbar examples +* :ghpull:`19511`: Clarify axes.autolimit_mode rcParam. +* :ghpull:`19503`: Fix tight_layout() on "canvasless" figures. +* :ghpull:`19410`: Set the GTK background color to white. +* :ghpull:`19497`: Add overset/underset whatsnew entry +* :ghpull:`19490`: Fix error message in plt.close(). +* :ghpull:`19461`: Move ToolManager warnings to rcParam validator +* :ghpull:`19488`: Prefer ``tr1-tr2`` to ``tr1+tr2.inverted()``. +* :ghpull:`19485`: fix regression of axline behavior with non-linear scales +* :ghpull:`19314`: Fix over/under mathtext symbols +* :ghpull:`19468`: Include tex output in pdf LatexError. +* :ghpull:`19478`: Fix trivial typo in error message. +* :ghpull:`19449`: Switch array-like (M, N) to (M, N) array-like. +* :ghpull:`19459`: Merge v3.3.4 into master +* :ghpull:`18746`: Make figure parameter optional when constructing canvases. +* :ghpull:`19455`: Add note that pyplot cannot be used for 3D. +* :ghpull:`19457`: Use absolute link for discourse +* :ghpull:`19440`: Slightly reorganize api docs. +* :ghpull:`19344`: Improvements to Docs for new contributors +* :ghpull:`19435`: Replace gtk3 deprecated APIs that have simple replacements. +* :ghpull:`19452`: Fix the docstring of draw_markers to match the actual behavior. +* :ghpull:`19448`: Remove unnecessary facecolor cache in Patch3D. +* :ghpull:`19396`: CI: remove win prerelease azure + add py39 +* :ghpull:`19426`: Support empty stairs. +* :ghpull:`19399`: Fix empty Poly3DCollections +* :ghpull:`19416`: fixes TypeError constructor returned NULL in wayland session +* :ghpull:`19439`: Move cheatsheet focus to the cheatsheets away +* :ghpull:`19425`: Add units to bar_label padding documentation. +* :ghpull:`19422`: Style fixes to triintepolate docs. +* :ghpull:`19421`: Switch to documenting generic collections in lowercase. +* :ghpull:`19411`: DOC: fix incorrect parameter names +* :ghpull:`19387`: Fix CSS table header layout +* :ghpull:`18683`: Better document font. rcParams entries. +* :ghpull:`19418`: BF: DOCS: fix slash for windows in conf.py +* :ghpull:`18544`: REORG: JoinStyle and CapStyle classes +* :ghpull:`19415`: Make TaggedValue in basic_units a sequence +* :ghpull:`19412`: DOC: correct off by one indentation. +* :ghpull:`19407`: Improve doc of default labelpad. +* :ghpull:`19373`: test for align_ylabel bug with constrained_layout +* :ghpull:`19347`: os.environ-related cleanups. +* :ghpull:`19319`: DOC: make canonical version stable +* :ghpull:`19395`: wx: Use integers in more places +* :ghpull:`17850`: MNT: set the facecolor of nofill markers +* :ghpull:`19334`: Fix qt backend on mac big sur +* :ghpull:`19394`: Don't allow pyzmq 22.0.0 on AppVeyor. +* :ghpull:`19367`: Deprecate imread() reading from URLs +* :ghpull:`19341`: MarkerStyle is considered immutable +* :ghpull:`19337`: Move sphinx extension files into mpl-data. +* :ghpull:`19389`: Temporarily switch intersphinx to latest pytest. +* :ghpull:`19390`: Doc: Minor formatting +* :ghpull:`19383`: Always include sample_data in installs. +* :ghpull:`19378`: Modify indicate_inset default label value +* :ghpull:`19357`: Shorten/make more consistent the half-filled marker definitions. +* :ghpull:`18649`: Deprecate imread() reading from URLs +* :ghpull:`19370`: Force classic ("auto") date converter in classic style. +* :ghpull:`19364`: Fix trivial doc typos. +* :ghpull:`19359`: Replace use of pyplot with OO api in some examples +* :ghpull:`19342`: FIX: fix bbox_inches=tight and constrained layout bad interaction +* :ghpull:`19350`: Describe how to test regular installations of Matplotlib +* :ghpull:`19332`: Prefer concatenate to h/vstack in simple cases. +* :ghpull:`19340`: Remove the deprecated rcParams["datapath"]. +* :ghpull:`19326`: Whitespace in Choosing Colormaps tutorial plots +* :ghpull:`16417`: Deprecate rcParams["datapath"] in favor of mpl.get_data_path(). +* :ghpull:`19336`: Revert "Deprecate setting Line2D's pickradius via set_picker." +* :ghpull:`19153`: MNT: Remove deprecated axes kwargs collision detection (version 2) +* :ghpull:`19330`: Remove register storage class from Agg files. +* :ghpull:`19324`: Improve FT2Font docstrings. +* :ghpull:`19328`: Explain annotation behavior when used in conjunction with arrows +* :ghpull:`19329`: Fix building against system qhull +* :ghpull:`19331`: Skip an ImageMagick test if ffmpeg is unavailable. +* :ghpull:`19333`: Fix PGF with special character paths. +* :ghpull:`19322`: Improve docs of _path C-extension. +* :ghpull:`19317`: Pin to oldest supported PyQt on minver CI instance. +* :ghpull:`19315`: Update the markers part of matplotlib.pyplot.plot document (fix issue #19274) +* :ghpull:`18978`: API: Remove deprecated axes kwargs collision detection +* :ghpull:`19306`: Fix some packaging issues +* :ghpull:`19291`: Cleanup code for format processing +* :ghpull:`19316`: Simplify X11 checking for Qt. +* :ghpull:`19287`: Speedup LinearSegmentedColormap.from_list. +* :ghpull:`19293`: Fix some docstring interpolations +* :ghpull:`19313`: Add missing possible return value to docs of get_verticalalignment() +* :ghpull:`18916`: Add overset and underset support for mathtext +* :ghpull:`18126`: FIX: Allow deepcopy on norms and scales +* :ghpull:`19281`: Make all transforms copiable (and thus scales, too). +* :ghpull:`19294`: Deprecate project argument to Line3DCollection.draw. +* :ghpull:`19307`: DOC: remove stray assignment in "multiple legends" example +* :ghpull:`19303`: Extended the convolution filter for correct dilation +* :ghpull:`19261`: Add machinery for png-only, single-font mathtext tests. +* :ghpull:`16571`: Update Qhull to 2019.1 reentrant version +* :ghpull:`16720`: Download qhull at build-or-sdist time. +* :ghpull:`18653`: ENH: Add func norm +* :ghpull:`19272`: Strip irrelevant information from testing docs +* :ghpull:`19298`: Fix misplaced colon in bug report template. +* :ghpull:`19297`: Clarify return format of Line2D.get_data. +* :ghpull:`19277`: Warn on redundant definition of plot properties +* :ghpull:`19278`: Cleanup and document _plot_args() +* :ghpull:`19282`: Remove the unused TransformNode._gid. +* :ghpull:`19264`: Expand on slider_demo example +* :ghpull:`19244`: Move cbook._check_isinstance() to _api.check_isinstance() +* :ghpull:`19273`: Use proper pytest functionality for warnings and exceptions +* :ghpull:`19262`: more robust check for enter key in TextBox +* :ghpull:`19249`: Clarify Doc for Secondary axis, ad-hoc example +* :ghpull:`19248`: Make return value of _get_patch_verts always an array. +* :ghpull:`19247`: Fix markup for mplot3d example. +* :ghpull:`19216`: Ignore non-draw codes when calculating path extent +* :ghpull:`19215`: Collect information for setting up a development environment +* :ghpull:`19210`: Fix creation of AGG images bigger than 1024**3 pixels +* :ghpull:`18933`: Set clip path for PostScript texts. +* :ghpull:`19162`: Deprecate cbook.warn_deprecated and move internal calls to _api.warn_deprecated +* :ghpull:`16391`: Re-write sym-log-norm +* :ghpull:`19240`: FIX: process lists for inverse norms +* :ghpull:`18737`: Fix data cursor for images with additional transform +* :ghpull:`18642`: Propagate minpos from Collections to Axes.datalim +* :ghpull:`19242`: Update first occurrence of QT to show both 4 and 5 +* :ghpull:`19231`: Add reference section to all statistics examples +* :ghpull:`19217`: Request an autoscale at the end of ax.pie() +* :ghpull:`19176`: Deprecate additional positional args to plot_{surface,wireframe}. +* :ghpull:`19063`: Give plot_directive output a ``max-width: 100%`` +* :ghpull:`19187`: Support callable for formatting of Sankey labels +* :ghpull:`19220`: Remove one TOC level from the release guide +* :ghpull:`19212`: MNT: try to put more whitespace in welcome message +* :ghpull:`19155`: Consolidated the Install from Source docs +* :ghpull:`19208`: added version ask/hint to issue templates, grammar on pr bot +* :ghpull:`19185`: Document Triangulation.triangles +* :ghpull:`19181`: Remove unused imports +* :ghpull:`19207`: Fix Grouper example code +* :ghpull:`19204`: Clarify Date Format Example +* :ghpull:`19200`: Fix incorrect statement regarding test images cache size. +* :ghpull:`19198`: Fix link in contrbuting docs +* :ghpull:`19196`: Fix PR welcome action +* :ghpull:`19188`: Cleanup comparision between X11/CSS4 and xkcd colors +* :ghpull:`19194`: Fix trivial quiver doc typo. +* :ghpull:`19180`: Fix Artist.remove_callback() +* :ghpull:`19192`: Fixed part of Issue - #19100, changed documentation for axisartist +* :ghpull:`19179`: Check that no new figures are created in image comparison tests +* :ghpull:`19184`: Minor doc cleanup +* :ghpull:`19093`: DOCS: Specifying Colors tutorial format & arrange +* :ghpull:`17107`: Add Spines class as a container for all Axes spines +* :ghpull:`18829`: Create a RangeSlider widget +* :ghpull:`18873`: Getting Started GSoD +* :ghpull:`19175`: Fix axes direction for a floating axisartist +* :ghpull:`19130`: DOC: remove reference to 2.2.x branches from list of active branches +* :ghpull:`15212`: Dedupe window-title setting by moving it to FigureManagerBase. +* :ghpull:`19172`: Fix 3D surface example bug for non-square grid +* :ghpull:`19173`: Ensure backend tests are skipped if unavailable +* :ghpull:`19170`: Clarify meaning of facecolors for LineCollection +* :ghpull:`18310`: Add 3D stem plot +* :ghpull:`18127`: Implement lazy autoscaling in mplot3d. +* :ghpull:`16178`: Add multiple label support for Axes.plot() +* :ghpull:`19151`: Deprecate @cbook.deprecated and move internal calls to @_api.deprecated +* :ghpull:`19088`: Ignore CLOSEPOLY vertices when computing dataLim from patches +* :ghpull:`19166`: CI: add github action to post to first-time PRs openers +* :ghpull:`19124`: GOV/DOC: add section to docs on triaging and triage team +* :ghpull:`15602`: Add an auto-labeling helper function for bar charts +* :ghpull:`19164`: docs: fix simple typo, backslahes -> backslashes +* :ghpull:`19161`: Simplify test_backend_pdf::test_multipage_properfinalize. +* :ghpull:`19141`: FIX: suppress offset text in ConciseDateFormatter when largest scale is in years +* :ghpull:`19150`: Move from @cbook._classproperty to @_api.classproperty +* :ghpull:`19144`: Move from cbook._warn_external() to _api.warn_external() +* :ghpull:`19119`: Don't lose unit change handlers when pickling/unpickling. +* :ghpull:`19145`: Move from cbook._deprecate_*() to _api.deprecate_*() +* :ghpull:`19123`: Use Qt events to refresh pixel ratio. +* :ghpull:`19056`: Support raw/rgba frame format in FFMpegFileWriter +* :ghpull:`19140`: Fix the docstring of suptitle/subxlabel/supylabel. +* :ghpull:`19132`: Normalize docstring interpolation label for kwdoc() property lists +* :ghpull:`19134`: Switch internal API function calls from cbook to _api +* :ghpull:`19138`: Added non-code contributions to incubator docs +* :ghpull:`19125`: DOC: contributor incubator +* :ghpull:`18948`: DOC: Fix latexpdf build +* :ghpull:`18753`: Remove several more deprecations +* :ghpull:`19083`: Fix headless tests on Wayland. +* :ghpull:`19127`: Cleanups to webagg & friends. +* :ghpull:`19122`: FIX/DOC - make Text doscstring interp more easily searchable +* :ghpull:`19106`: Support setting rcParams["image.cmap"] to Colormap instances. +* :ghpull:`19085`: FIX: update a transfrom from transFigure to transSubfigure +* :ghpull:`19117`: Rename a confusing variable. +* :ghpull:`18647`: Axes.axline: implement support transform argument (for points but not slope) +* :ghpull:`16220`: Fix interaction with unpickled 3d plots. +* :ghpull:`19059`: Support blitting in webagg backend +* :ghpull:`19107`: Update pyplot.py +* :ghpull:`19044`: Cleanup Animation frame_formats. +* :ghpull:`19087`: FIX/TST: recursively remove ticks +* :ghpull:`19094`: Suppress -Wunused-function about _import_array when compiling tkagg.cpp. +* :ghpull:`19092`: Fix use transform mplot3d +* :ghpull:`19097`: DOC: add FuncScale to set_x/yscale +* :ghpull:`19089`: ENH: allow passing a scale instance to set_scale +* :ghpull:`19086`: FIX: add a default scale to Normalize +* :ghpull:`19073`: Mention in a few more places that artists default to not-pickable. +* :ghpull:`19079`: Remove incorrect statement about ``hist(..., log=True)``. +* :ghpull:`19076`: Small improvements to aitoff projection. +* :ghpull:`19071`: DOC: Add 'blackman' to list of imshow interpolations +* :ghpull:`17524`: ENH: add supxlabel and supylabel +* :ghpull:`18840`: Add tutorial about autoscaling +* :ghpull:`19042`: Simplify GridHelper invalidation. +* :ghpull:`19048`: Remove _draw_{ticks2,label2}; skip extents computation in _update_ticks. +* :ghpull:`18983`: Pass norm argument to spy +* :ghpull:`18802`: Add code of conduct +* :ghpull:`19060`: Fix broken link in Readme +* :ghpull:`18569`: More generic value snapping for Slider widgets +* :ghpull:`19055`: Fix kwargs handling in AnnotationBbox +* :ghpull:`19041`: Reword docs for exception_handler in CallbackRegistry. +* :ghpull:`19046`: Prepare inlining MovieWriter.cleanup() into MovieWriter.finish(). +* :ghpull:`19050`: Better validate tick direction. +* :ghpull:`19038`: Fix markup in interactive figures doc. +* :ghpull:`19035`: grid_helper_curvelinear cleanups. +* :ghpull:`19022`: Update event handling docs. +* :ghpull:`19025`: Remove individual doc entries for some methods Axes inherits from Artist +* :ghpull:`19018`: Inline and optimize ContourLabeler.get_label_coords. +* :ghpull:`19019`: Deprecate never used ``resize_callback`` param to FigureCanvasTk. +* :ghpull:`19023`: Cleanup comments/docs in backend_macosx, backend_pdf. +* :ghpull:`19020`: Replace mathtext assertions by unpacking. +* :ghpull:`19024`: Dedupe docs of GridSpec.subplots. +* :ghpull:`19013`: Improve docs of _get_packed_offsets, _get_aligned_offsets. +* :ghpull:`19009`: Compactify the implementation of ContourLabeler.add_label_near. +* :ghpull:`19008`: Deprecate event processing wrapper methods on FigureManagerBase. +* :ghpull:`19015`: Better document multilinebaseline (and other small TextArea fixes) +* :ghpull:`19012`: Common ``__init__`` for VPacker and HPacker. +* :ghpull:`19014`: Support normalize_kwargs(None) (== {}). +* :ghpull:`19010`: Inline _print_pdf_to_fh, _print_png_to_fh. +* :ghpull:`19003`: Remove reference to unicode-math in pgf preamble. +* :ghpull:`18847`: Cleanup interactive pan/zoom. +* :ghpull:`18868`: Expire _make_keyword_only deprecations from 3.2 +* :ghpull:`18903`: Move cbook._suppress_matplotlib_deprecation_warning() from cbook to _api +* :ghpull:`18997`: Micro-optimize check_isinstance. +* :ghpull:`18995`: Fix the doc of GraphicsContextBase.set_clip_rectangle. +* :ghpull:`18996`: Fix API change message from #18989 +* :ghpull:`18993`: Don't access private renderer attributes in tkagg blit. +* :ghpull:`18980`: DOC: fix typos +* :ghpull:`18989`: The Artist property rasterized cannot be None anymore +* :ghpull:`18987`: Fix punctuation in doc. +* :ghpull:`18894`: Use selectfont instead of findfont + scalefont + setfont in PostScript. +* :ghpull:`18990`: Minor cleanup of categorical example +* :ghpull:`18947`: Strictly increasing check with test coverage for streamplot grid +* :ghpull:`18981`: Cleanup Firefox SVG example. +* :ghpull:`18969`: Improve documentation on rasterization +* :ghpull:`18876`: Support fully-fractional HiDPI added in Qt 5.14. +* :ghpull:`18976`: Simplify contour_label_demo. +* :ghpull:`18975`: Fix typing error in pyplot's docs +* :ghpull:`18956`: Document rasterized parameter in pcolormesh() explicitly +* :ghpull:`18968`: Fix clabel() for backends without canvas.get_renderer() +* :ghpull:`18949`: Deprecate AxisArtist.ZORDER +* :ghpull:`18830`: Pgf plotting +* :ghpull:`18967`: Remove unnecessary calls to lower(). +* :ghpull:`18910`: Remove Artist.eventson and Container.eventson +* :ghpull:`18964`: Remove special-casing for PostScript dpi in pyplot.py. +* :ghpull:`18961`: Replace sphinx-gallery-specific references by standard :doc: refs. +* :ghpull:`18955`: added needs_ghostscript; skip test +* :ghpull:`18857`: Improve hat graph example +* :ghpull:`18943`: Small cleanup to StepPatch._update_path. +* :ghpull:`18937`: Cleanup stem docs and simplify implementation. +* :ghpull:`18895`: Introduce variable since which mpl version the minimal python version +* :ghpull:`18927`: Improve warning message for missing font family specified via alias. +* :ghpull:`18930`: Document limitations of Path.contains_point() and clarify its semantics +* :ghpull:`18892`: Fixes MIME type for svg frame_format in HTMLWriter. +* :ghpull:`18938`: Edit usetex docs. +* :ghpull:`18923`: Use lambdas to prevent gc'ing and deduplication of widget callbacks. +* :ghpull:`16171`: Contour fixes/improvements +* :ghpull:`18901`: Simplify repeat_delay and fix support for it when using iterable frames. +* :ghpull:`18911`: Added Aria-Labels to all inputs with tooltips for generated HTML animations: issue #17910 +* :ghpull:`18912`: Use CallbackRegistry for {Artist,Collection}.add_callback. +* :ghpull:`18919`: DOCS: fix contourf hatch demo legend +* :ghpull:`18905`: Make docs fail on Warning (and fix all existing warnings) +* :ghpull:`18763`: Single-line string notation for subplot_mosaic +* :ghpull:`18902`: Move ImageMagick version exclusion to _get_executable_info. +* :ghpull:`18915`: Remove hard-coded API removal version mapping. +* :ghpull:`18914`: Fix typo in error message: interable -> iterable. +* :ghpull:`15065`: step-between as drawstyle [Alternative approach to #15019] +* :ghpull:`18532`: Consistent behavior of draw_if_interactive across interactive backends. +* :ghpull:`18908`: Rework interactive backends tests. +* :ghpull:`18817`: MAINT: deprecate validCap, validJoin +* :ghpull:`18907`: Unmark wx-threading-test-failure as strict xfail. +* :ghpull:`18896`: Add note on keeping a reference to animation docstrings +* :ghpull:`18862`: Resolve mathtext.fontset at FontProperties creation time. +* :ghpull:`18877`: Remove fallback to nonexistent setDevicePixelRatioF. +* :ghpull:`18823`: Move from @cbook.deprecated to @_api.deprecated +* :ghpull:`18889`: Switch Tk to using PNG files for buttons +* :ghpull:`18888`: Update version of Matplotlib that needs Python 3.7 +* :ghpull:`18867`: Remove "Demo" from example titles (part 2) +* :ghpull:`18863`: Reword FontProperties docstring. +* :ghpull:`18866`: Fix RGBAxes docs markup. +* :ghpull:`18874`: Slightly compress down the pgf tests. +* :ghpull:`18565`: Make Tkagg blit thread safe +* :ghpull:`18858`: Remove "Demo" from example titles +* :ghpull:`15177`: Bind WX_CHAR_HOOK instead of WX_KEY_DOWN for wx key_press_event. +* :ghpull:`18821`: Simplification of animated histogram example +* :ghpull:`18844`: Fix sphinx formatting issues +* :ghpull:`18834`: Add cross-references to Artist tutorial +* :ghpull:`18827`: Update Qt version in event handling docs. +* :ghpull:`18825`: Warn in pgf backend when unknown font is requested. +* :ghpull:`18822`: Remove deprecate +* :ghpull:`18733`: Time series histogram plot example +* :ghpull:`18812`: Change LogFormatter coeff computation +* :ghpull:`18820`: Fix axes -> Axes changes in figure.py +* :ghpull:`18657`: Move cbook.deprecation to _api.deprecation +* :ghpull:`18818`: Clarify behavior of CallbackRegistry.disconnect with nonexistent cids. +* :ghpull:`18811`: DOC Use 'Axes' instead of 'axes' in figure.py +* :ghpull:`18814`: [Example] update Anscombe's Quartet +* :ghpull:`18806`: DOC Use 'Axes' in _axes.py docstrings +* :ghpull:`18799`: Remove unused wx private attribute. +* :ghpull:`18772`: BF: text not drawn shouldn't count for tightbbox +* :ghpull:`18793`: Consistently use axs to refer to a set of Axes (v2) +* :ghpull:`18792`: Cmap cleanup +* :ghpull:`18798`: Deprecate ps.useafm for mathtext +* :ghpull:`18302`: Remove 3D attributes from renderer +* :ghpull:`18795`: Make inset indicator more visible in the example +* :ghpull:`18781`: Update description of web application server example. +* :ghpull:`18791`: Fix documentation of edgecolors precedence for scatter() +* :ghpull:`14645`: Add a helper to copy a colormap and set its extreme colors. +* :ghpull:`17709`: Enh: SymNorm for normalizing symmetrical data around a center +* :ghpull:`18780`: CI: pydocstyle>=5.1.0, flake8-docstrings>=1.4.0 verified to work +* :ghpull:`18200`: Unpin pydocstyle +* :ghpull:`18767`: Turn "How to use Matplotlib in a web application server" into a sphinx-gallery example +* :ghpull:`18765`: Remove some unused tick private attributes. +* :ghpull:`18688`: Shorter property deprecation. +* :ghpull:`18748`: Allow dependabot to check GitHub actions daily +* :ghpull:`18529`: Synchronize view limits of shared axes after setting ticks +* :ghpull:`18575`: Colorbar grid position +* :ghpull:`18744`: DOCS: document log locator's ``numticks`` +* :ghpull:`18687`: Deprecate GraphicsContextPS. +* :ghpull:`18706`: Consistently use 3D, 2D, 1D for dimensionality +* :ghpull:`18702`: _make_norm_from_scale fixes. +* :ghpull:`18558`: Support usetex in date Formatters +* :ghpull:`18493`: MEP22 toolmanager set axes navigate_mode +* :ghpull:`18730`: TST: skip if known-bad version of imagemagick +* :ghpull:`18583`: Support binary comms in nbagg. +* :ghpull:`18728`: Disable mouseover info for NonUniformImage. +* :ghpull:`18710`: Deprecate cla() methods of Axis and Spines in favor of clear() +* :ghpull:`18719`: Added the trace plot of the end point +* :ghpull:`18729`: Use ax.add_image rather than ax.images.append in NonUniformImage example +* :ghpull:`18707`: Use "Return whether ..." docstring for functions returning bool +* :ghpull:`18724`: Remove extra newlines in contour(f) docs. +* :ghpull:`18696`: removed glossary +* :ghpull:`18721`: Remove the use_cmex font fallback mechanism. +* :ghpull:`18680`: wx backend API cleanups. +* :ghpull:`18709`: Use attributes Axes.x/yaxis instead of Axes.get_x/yaxis() +* :ghpull:`18712`: Shorten GraphicsContextWx.get_wxcolour. +* :ghpull:`18708`: Individualize contour and contourf docstrings +* :ghpull:`18663`: fix: keep baseline scale to baseline 0 even if set to None +* :ghpull:`18704`: Fix docstring of Axes.cla() +* :ghpull:`18675`: Merge ParasiteAxesAuxTransBase into ParasiteAxesBase. +* :ghpull:`18651`: Allow Type3 subsetting of otf fonts in pdf backend. +* :ghpull:`17396`: Improve headlessness detection for backend selection. +* :ghpull:`17737`: Deprecate BoxStyle._Base. +* :ghpull:`18655`: Sync SubplotDivider API with SubplotBase API changes. +* :ghpull:`18582`: Shorten mlab tests. +* :ghpull:`18599`: Simplify wx rubberband drawing. +* :ghpull:`18671`: DOC: fix autoscale docstring +* :ghpull:`18637`: BLD: sync build and run time numpy pinning +* :ghpull:`18693`: Also fix tk key mapping, following the same strategy as for gtk. +* :ghpull:`18691`: Cleanup sample_data. +* :ghpull:`18697`: Catch TypeError when validating rcParams types. +* :ghpull:`18537`: Create security policy +* :ghpull:`18356`: ENH: Subfigures +* :ghpull:`18694`: Document limitations on ``@deprecated`` with multiple-inheritance. +* :ghpull:`18669`: Rework checks for old macosx +* :ghpull:`17791`: More accurate handling of unicode/numpad input in gtk3 backends. +* :ghpull:`18679`: Further simplify pgf tmpdir cleanup. +* :ghpull:`18685`: Cleanup pgf examples +* :ghpull:`18682`: Small API cleanups to plot_directive. +* :ghpull:`18686`: Numpydocify setp. +* :ghpull:`18684`: Small simplification to triage_tests.py. +* :ghpull:`17832`: pdf: Support setting URLs on Text objects +* :ghpull:`18674`: Remove accidentally added swapfile. +* :ghpull:`18673`: Small cleanups to parasite axes. +* :ghpull:`18536`: axes3d panning +* :ghpull:`18667`: TST: Lock cache directory during cleanup. +* :ghpull:`18672`: Created Border for color examples +* :ghpull:`18661`: Define GridFinder.{,inv\_}transform_xy as normal methods. +* :ghpull:`18656`: Fix some missing references. +* :ghpull:`18659`: Small simplifications to BboxImage. +* :ghpull:`18511`: feat: StepPatch to take array as baseline +* :ghpull:`18646`: Support activating figures with plt.figure(figure_instance). +* :ghpull:`18370`: Move PostScript Type3 subsetting to pure python. +* :ghpull:`18645`: Simplify Colorbar.set_label, inline Colorbar._edges. +* :ghpull:`18633`: Support linestyle='none' in Patch +* :ghpull:`18527`: Fold ColorbarPatch into Colorbar, deprecate colorbar_factory. +* :ghpull:`17480`: Regenerate background when RectangleSelector active-flag is set back on. +* :ghpull:`18626`: Specify case when parameter is ignored. +* :ghpull:`18634`: Fix typo in warning message. +* :ghpull:`18603`: bugfix #18600 by using the MarkerStyle copy constructor +* :ghpull:`18628`: Remove outdate comment about canvases with no manager attribute. +* :ghpull:`18591`: Deprecate MathTextParser("bitmap") and associated APIs. +* :ghpull:`18617`: Remove special styling of sidebar heading +* :ghpull:`18616`: Improve instructions for building the docs +* :ghpull:`18623`: Provide a 'cursive' font present in Windows' default font set. +* :ghpull:`18579`: Fix stairs() tests +* :ghpull:`18618`: Correctly separate two fantasy font names. +* :ghpull:`18610`: DOCS: optional doc building dependencies +* :ghpull:`18601`: Simplify Rectangle and RegularPolygon. +* :ghpull:`18573`: add_subplot(..., axes_class=...) for more idiomatic mpl_toolkits usage. +* :ghpull:`18605`: Correctly sync state of wx toolbar buttons when triggered by keyboard. +* :ghpull:`18606`: Revert "FIX: pin pytest" +* :ghpull:`18587`: Fix docstring of zaxis_date. +* :ghpull:`18589`: Factor out pdf Type3 glyph drawing. +* :ghpull:`18586`: Text cleanups. +* :ghpull:`18594`: FIX: pin pytest +* :ghpull:`18577`: Random test cleanups +* :ghpull:`18578`: Merge all axisartist axis_direction demos together. +* :ghpull:`18588`: Use get_x/yaxis_transform more. +* :ghpull:`18585`: FIx precision in pie and donut example +* :ghpull:`18564`: Prepare for merging SubplotBase into AxesBase. +* :ghpull:`15127`: ENH/API: improvements to register_cmap +* :ghpull:`18576`: DOC: prefer colormap over color map +* :ghpull:`18340`: Colorbar grid postion +* :ghpull:`18568`: Added Reporting to code_of_conduct.md +* :ghpull:`18555`: Convert _math_style_dict into an Enum. +* :ghpull:`18567`: Replace subplot(ijk) calls by subplots(i, j) +* :ghpull:`18554`: Replace some usages of plt.subplot() by plt.subplots() in tests +* :ghpull:`18556`: Accept same types to errorevery as markevery +* :ghpull:`15932`: Use test cache for test result images too. +* :ghpull:`18557`: DOC: Add an option to disable Google Analytics. +* :ghpull:`18560`: Remove incorrect override of pcolor/contour in parasite axes. +* :ghpull:`18566`: Use fig, ax = plt.subplots() in tests (part 2) +* :ghpull:`18553`: Use fig, ax = plt.subplots() in tests +* :ghpull:`11748`: get_clip_path checks for nan +* :ghpull:`8987`: Tick formatter does not support grouping with locale +* :ghpull:`18552`: Change \*subplot(111, ...) to \*subplot(...) as 111 is the default. +* :ghpull:`18189`: FIX: Add get/set methods for 3D collections +* :ghpull:`18430`: FIX: do not reset ylabel ha when changing position +* :ghpull:`18515`: Remove deprecated backend code. +* :ghpull:`17935`: MNT: improve error messages on bad pdf metadata input +* :ghpull:`18525`: Add Text3D position getter/setter +* :ghpull:`18542`: CLEANUP: validate join/cap style centrally +* :ghpull:`18501`: TST: Add test for _repr_html_ +* :ghpull:`18528`: Deprecate TextArea minimumdescent. +* :ghpull:`18543`: Documentation improvements for stairs() +* :ghpull:`18531`: Unit handling improvements +* :ghpull:`18523`: Don't leak file paths into PostScript metadata +* :ghpull:`18526`: Templatize _image.resample to deduplicate it. +* :ghpull:`18522`: Remove mlab, toolkits, and misc deprecations +* :ghpull:`18516`: Remove deprecated font-related things. +* :ghpull:`18535`: Add a code of conduct link to github +* :ghpull:`17521`: Remove font warning when legend is added while using Tex +* :ghpull:`18517`: Include kerning when outputting pdf strings. +* :ghpull:`18521`: Inline some helpers in ColorbarBase. +* :ghpull:`18512`: Private api2 +* :ghpull:`18519`: Correctly position text with nonzero descent with afm fonts / ps output. +* :ghpull:`18513`: Remove Locator.autoscale. +* :ghpull:`18497`: Merge v3.3.x into master +* :ghpull:`18502`: Remove the deprecated matplotlib.cm.revcmap() +* :ghpull:`18506`: Inline ScalarFormatter._formatSciNotation. +* :ghpull:`18455`: Fix BoundingBox in EPS files. +* :ghpull:`18275`: feat: StepPatch +* :ghpull:`18507`: Fewer "soft" dependencies on LaTeX packages. +* :ghpull:`18378`: Deprecate public access to many mathtext internals. +* :ghpull:`18494`: Move cbook._check_in_list() to _api.check_in_list() +* :ghpull:`18423`: 2-D array RGB and RGBA values not understood in plt.plot() +* :ghpull:`18492`: Fix doc build failure due to #18440 +* :ghpull:`18435`: New environment terminal language +* :ghpull:`18456`: Reuse InsetLocator to make twinned axes follow their parents. +* :ghpull:`18440`: List existing rcParams in rcParams docstring. +* :ghpull:`18453`: FIX: allow manually placed axes in constrained_layout +* :ghpull:`18473`: Correct link to widgets examples +* :ghpull:`18466`: Remove unnecessary autoscale handling in hist(). +* :ghpull:`18465`: Don't modify bottom argument in place in stacked histograms. +* :ghpull:`18468`: Cleanup multiple_yaxis_with_spines example. +* :ghpull:`18463`: Improve formatting of defaults in docstrings. +* :ghpull:`6268`: ENH: support alpha arrays in collections +* :ghpull:`18449`: Remove the private Axes._set_position. +* :ghpull:`18460`: DOC: example gray level in 'Specifying Colors' tutorial +* :ghpull:`18426`: plot directive: caption-option +* :ghpull:`18444`: Support doubleclick in webagg/nbagg +* :ghpull:`12518`: Example showing scale-invariant angle arc +* :ghpull:`18446`: Normalize properties passed to ToolHandles. +* :ghpull:`18445`: Warn if an animation is gc'd before doing anything. +* :ghpull:`18452`: Move Axes ``__repr__`` from Subplot to AxesBase. +* :ghpull:`15374`: Replace _prod_vectorized by @-multiplication. +* :ghpull:`13643`: RecangleSelector constructor does not handle marker_props +* :ghpull:`18403`: DOC: Remove related topics entries from the sidebar +* :ghpull:`18421`: Move {get,set}_{x,y}label to _AxesBase. +* :ghpull:`18429`: DOC: fix date example +* :ghpull:`18353`: DOCS: describe shared axes behavior with units +* :ghpull:`18420`: Always strip out date in postscript's test_savefig_to_stringio. +* :ghpull:`18422`: Decrease output when running ``pytest -s``. +* :ghpull:`18418`: Cleanup menu example +* :ghpull:`18419`: Avoid demo'ing passing kwargs to gca(). +* :ghpull:`18372`: DOC: Fix various missing references and typos +* :ghpull:`18400`: Clarify argument name in constrained_layout error message +* :ghpull:`18384`: Clarification in ArtistAnimation docstring +* :ghpull:`17892`: Add earlier color validation +* :ghpull:`18367`: Support horizontalalignment in TextArea/AnchoredText. +* :ghpull:`18362`: DOC: Add some types to Returns entries. +* :ghpull:`18365`: move canvas focus after toomanager initialization +* :ghpull:`18360`: Add example for specifying figure size in different units +* :ghpull:`18341`: DOCS: add action items to PR template +* :ghpull:`18349`: Remove redundant angles in ellipse demo. +* :ghpull:`18145`: Created a parameter fontset that can be used in each Text element +* :ghpull:`18344`: More nouns/imperative forms in docs. +* :ghpull:`18308`: Synchronize units change in Axis.set_units for shared axis +* :ghpull:`17494`: Rewrite of constrained_layout.... +* :ghpull:`16646`: update colorbar.py make_axes_gridspec +* :ghpull:`18306`: Fix configure subplots +* :ghpull:`17509`: Fix ``swap_if_landscape`` call in backend_ps +* :ghpull:`18323`: Deleted "Our Favorite Recipes" section and moved the examples. +* :ghpull:`18128`: Change several deprecated symbols in _macosx.m +* :ghpull:`18251`: Merge v3.3.x into master +* :ghpull:`18329`: Change default keymap in toolmanager example. +* :ghpull:`18330`: Dedent rst list. +* :ghpull:`18286`: Fix imshow to work with subclasses of ndarray. +* :ghpull:`18320`: Make Colorbar outline into a Spine. +* :ghpull:`18316`: Safely import pyplot if a GUI framework is already running. +* :ghpull:`18321`: Capture output of CallbackRegistry exception test. +* :ghpull:`17900`: Add getters and _repr_html_ for over/under/bad values of Colormap objects. +* :ghpull:`17930`: Fix errorbar property cycling to match plot. +* :ghpull:`18290`: Remove unused import to fix flake8. +* :ghpull:`16818`: Dedupe implementations of configure_subplots(). +* :ghpull:`18284`: TkTimer interval=0 workaround +* :ghpull:`17901`: DOC: Autoreformating of backend/\*.py +* :ghpull:`17291`: Normalize gridspec ratios to lists in the setter. +* :ghpull:`18226`: Use CallbackRegistry in Widgets and some related cleanup +* :ghpull:`18203`: Force locator and formatter inheritence +* :ghpull:`18279`: boxplot: Add conf_intervals reference to notch docs. +* :ghpull:`18276`: Fix autoscaling to exclude inifinite data limits when possible. +* :ghpull:`18261`: Migrate tk backend tests into subprocesses +* :ghpull:`17961`: DOCS: Remove How-to: Contributing +* :ghpull:`18201`: Remove mpl.colors deprecations for 3.4 +* :ghpull:`18223`: Added example on how to make packed bubble charts +* :ghpull:`18264`: Fix broken links in doc build. +* :ghpull:`8031`: Add errorbars to mplot3d +* :ghpull:`18187`: Add option to create horizontally-oriented stem plots +* :ghpull:`18250`: correctly autolabel Documentation and Maintenance issues +* :ghpull:`18161`: Add more specific GitHub issue templates +* :ghpull:`18181`: Replace ttconv by plain python for pdf subsetting +* :ghpull:`17371`: add context manager functionality to ion and ioff +* :ghpull:`17789`: Tk backend improvements +* :ghpull:`15532`: Resolve 'text ignores rotational part of transformation' (#698) +* :ghpull:`17851`: Fix Axes3D.add_collection3d issues +* :ghpull:`18205`: Hat graph example +* :ghpull:`6168`: #5856: added option to create vertically-oriented stem plots +* :ghpull:`18202`: Remove mpl.testing deprecations for 3.4 +* :ghpull:`18081`: Support scale in ttf composite glyphs +* :ghpull:`18199`: Some cleanup on TickedStroke +* :ghpull:`18190`: Use ``super()`` more in backends +* :ghpull:`18193`: Allow savefig to save SVGs on FIPS enabled systems #18192 +* :ghpull:`17802`: fix FigureManagerTk close behavior if embedded in Tk App +* :ghpull:`15458`: TickedStroke, a stroke style with ticks useful for depicting constraints +* :ghpull:`18178`: DOC: clarify that display space coordinates are not stable +* :ghpull:`18172`: allow webAgg to report middle click events +* :ghpull:`17578`: Search for minus of any font size to get height of tex result +* :ghpull:`17546`: ``func`` argument in ``legend_elements`` with non-monotonically increasing functions +* :ghpull:`17684`: Deprecate passing bytes to FT2Font.set_text. +* :ghpull:`17500`: Tst improve memleak +* :ghpull:`17669`: Small changes to svg font embedding details +* :ghpull:`18095`: Error on unexpected kwargs in scale classes +* :ghpull:`18106`: Copy docstring description from Axes.legend() to Figure.legend() +* :ghpull:`18002`: Deprecate various vector-backend-specific mathtext helpers. +* :ghpull:`18006`: Fix ToolManager inconsistencies with regular toolbar +* :ghpull:`18004`: Typos and docs for mathtext fonts. +* :ghpull:`18133`: DOC: Update paths for moved API/what's new fragments +* :ghpull:`18122`: Document and test legend argument parsing +* :ghpull:`18124`: Fix FuncAnimation._draw_frame exception and testing +* :ghpull:`18125`: pdf: Convert operator list to an Enum. +* :ghpull:`18123`: Cleanup figure title example +* :ghpull:`18121`: Improve rasterization demo +* :ghpull:`18012`: Add explanatory text for rasterization demo +* :ghpull:`18103`: Support data reference for hexbin() parameter C +* :ghpull:`17826`: Add pause() and resume() methods to the base Animation class +* :ghpull:`18090`: Privatize cbook.format_approx. +* :ghpull:`18080`: Reduce numerical precision in Type 1 fonts +* :ghpull:`18044`: Super-ify parts of the code base, part 3 +* :ghpull:`18087`: Add a note on working around limit expansion of set_ticks() +* :ghpull:`18071`: Remove deprecated animation code +* :ghpull:`17822`: Check for float values for min/max values to ax{v,h}line +* :ghpull:`18069`: Remove support for multiple-color strings in to_rgba_array +* :ghpull:`18070`: Remove rcsetup deprecations +* :ghpull:`18073`: Remove disable_internet.py +* :ghpull:`18075`: typo in usetex.py example +* :ghpull:`18043`: Super-ify parts of the code base, part 2 +* :ghpull:`18062`: Bump matplotlib.patches coverage +* :ghpull:`17269`: Fix ConciseDateFormatter when plotting a range included in a second +* :ghpull:`18063`: Remove un-used trivial setters and getters +* :ghpull:`18025`: add figpager as a third party package +* :ghpull:`18046`: Discourage references in section headings. +* :ghpull:`18042`: scatter: Raise if unexpected type of ``s`` argument. +* :ghpull:`18028`: Super-ify parts of the code base, part 1 +* :ghpull:`18029`: Remove some unused imports. +* :ghpull:`18018`: Cache realpath resolution in font_manager. +* :ghpull:`18013`: Use argumentless ``super()`` more. +* :ghpull:`17988`: add test with -OO +* :ghpull:`17993`: Make inset_axes and secondary_axis picklable. +* :ghpull:`17992`: Shorten tight_bbox. +* :ghpull:`18003`: Deprecate the unneeded Fonts.destroy. +* :ghpull:`16457`: Build lognorm/symlognorm from corresponding scales. +* :ghpull:`17966`: Fix some words +* :ghpull:`17803`: Simplify projection-of-point-on-polyline in contour.py. +* :ghpull:`17699`: raise RuntimeError appropriately for animation update func +* :ghpull:`17954`: Remove another overspecified latex geometry. +* :ghpull:`17948`: Sync Cairo's usetex measurement with base class. +* :ghpull:`17788`: Tighten a bit the RendererAgg API. +* :ghpull:`12443`: Warn in colorbar() when mappable.axes != figure.gca(). +* :ghpull:`17926`: Deprecate hatch patterns with invalid values +* :ghpull:`17922`: Rewrite the barcode example +* :ghpull:`17890`: Properly use thin space after math text operator +* :ghpull:`16090`: Change pcolormesh snapping (fixes alpha colorbar/grid issues) [AGG] +* :ghpull:`17842`: Move "Request a new feature" from How-to to Contributing +* :ghpull:`17897`: Force origin='upper' in pyplot.specgram +* :ghpull:`17929`: Improve hatch demo +* :ghpull:`17927`: Remove unnecessary file save during test +* :ghpull:`14896`: Updated doc in images.py by adding direct link to 24-bit stink bug png +* :ghpull:`17909`: frame_format to support all listed by animation writers +* :ghpull:`13569`: Style cleanup to pyplot. +* :ghpull:`17924`: Remove the example "Easily creating subplots" +* :ghpull:`17869`: FIX: new date rcParams weren't being evaluated +* :ghpull:`17921`: Added density and combination hatching examples +* :ghpull:`17159`: Merge consecutive rasterizations +* :ghpull:`17895`: Use indexed color for PNG images in PDF files when possible +* :ghpull:`17894`: DOC: Numpydoc format. +* :ghpull:`17884`: Created Hatch marker styles Demo for Example Gallery +* :ghpull:`17347`: ENH: reuse oldgridspec is possible... +* :ghpull:`17915`: Document that set_ticks() increases view limits if necessary +* :ghpull:`17902`: Fix figure size in path effects guide +* :ghpull:`17899`: Add missing space in cairo error +* :ghpull:`17888`: Add _repr_png_ and _repr_html_ to Colormap objects. +* :ghpull:`17830`: Fix BoundaryNorm for multiple colors and one region +* :ghpull:`17883`: Remove Python 3.6 compatibility shims +* :ghpull:`17889`: Minor doc fixes +* :ghpull:`17879`: Link to style-file example page in style tutorial +* :ghpull:`17876`: Fix description of subplot2grid arguments +* :ghpull:`17856`: Clarify plotnonfinite parameter docs of scatter() +* :ghpull:`17843`: Add fullscreen toggle support to WxAgg backend +* :ghpull:`17022`: ENH: add rcParam for ConciseDate and interval_multiples +* :ghpull:`17799`: Deduplicate attribute docs of ContourSet and its derived classes +* :ghpull:`17847`: Remove overspecified latex geometry. +* :ghpull:`17662`: Mnt drop py36 +* :ghpull:`17845`: Fix size of donate button +* :ghpull:`17825`: Add quick-link buttons for contributing +* :ghpull:`17837`: Remove "Reporting a bug or submitting a patch" from How-to +* :ghpull:`17828`: API: treat xunits=None and yunits=None as "default" +* :ghpull:`17839`: Avoid need to lock in dvi generation, to avoid deadlocks. +* :ghpull:`17824`: Improve categorical converter error message +* :ghpull:`17834`: Keep using a single dividers LineCollection instance in colorbar. +* :ghpull:`17838`: Prefer colorbar(ScalarMappable(...)) to ColorbarBase in tutorial. +* :ghpull:`17836`: More precise axes section names in docs +* :ghpull:`17835`: Colorbar cleanups. +* :ghpull:`17727`: FIX: properly handle dates when intmult is true +* :ghpull:`15617`: Dev docs update +* :ghpull:`17819`: Fix typos in tight layout guide +* :ghpull:`17806`: Set colorbar label only in set_label. +* :ghpull:`17265`: Mnt rearrange next api again +* :ghpull:`17808`: Improve docstring of ColorbarBase.set_label() +* :ghpull:`17723`: Deprecate FigureCanvas.{get,set}_window_title. +* :ghpull:`17798`: Fix overindented bullet/enumerated lists. +* :ghpull:`17767`: Allow list of hatches to {bar, barh} +* :ghpull:`17749`: Deprecate ``FancyBboxPatch(..., boxstyle="custom", bbox_transmuter=...)`` +* :ghpull:`17783`: DOC: point to bbox static "constructor" functions in set_position +* :ghpull:`17782`: MNT: update mailmap +* :ghpull:`17776`: Changes in the image for test_load_from_url +* :ghpull:`17750`: Soft-deprecate mutation_aspect=None. +* :ghpull:`17780`: Reorganize colorbar docstrings. +* :ghpull:`17778`: Fix whatsnew confusing typo. +* :ghpull:`17748`: Don't use bezier helpers in axisartist. +* :ghpull:`17700`: Remove remnants of macosx old-style toolbar. +* :ghpull:`17753`: Support location="left"/"top" for gridspec-based colorbars. +* :ghpull:`17761`: Update hard-coded results in artist tutorial +* :ghpull:`17728`: Move Win32_{Get,Set}ForegroundWindow to c_internal_utils. +* :ghpull:`17754`: Small cleanups to contour() code. +* :ghpull:`17751`: Deprecate dpi_cor property of FancyArrowPatch. +* :ghpull:`15941`: FontManager fixes. +* :ghpull:`17661`: Issue #17659: set tick color and tick labelcolor independently from rcParams +* :ghpull:`17389`: Don't duplicate docstrings of pyplot-level cmap setters. +* :ghpull:`17555`: Set Win32 AppUserModelId to fix taskbar icons. +* :ghpull:`17726`: Clarify docs of box_aspect() +* :ghpull:`17704`: Remove "created-by-matplotlib" comment in svg output. +* :ghpull:`17697`: Add description examples/pyplots/pyplot simple.py +* :ghpull:`17694`: CI: Only skip devdocs deploy if PR is to this repo. +* :ghpull:`17691`: ci: Print out reasons for not deploying docs. +* :ghpull:`17099`: Make Spines accessable by the attributes. + +Issues (204): + +* :ghissue:`19701`: Notebook plotting regression in 3.4.0rc* +* :ghissue:`19754`: add space in python -mpip +* :ghissue:`18364`: ``Axes3d`` attaches itself to a figure, where as ``Axes`` does not +* :ghissue:`19700`: Setting pickradius regression in 3.4.0rc +* :ghissue:`19594`: code of conduct link 404s +* :ghissue:`19576`: duplicate pick events firing +* :ghissue:`19560`: segfault due to font objects when multi-threading +* :ghissue:`19598`: Axes order changed in 3.4.0rc1 +* :ghissue:`19631`: subplot mosaic 1 element list +* :ghissue:`19581`: Missing kerning for single-byte strings in PDF +* :ghissue:`17769`: interactive figure close with wxpython 4.1 causes freeze / crash (segfault?) +* :ghissue:`19427`: Fix mistake in documentation +* :ghissue:`19624`: Cannot add colorbar to figure after pickle +* :ghissue:`19544`: Regression in 3.4.0rc1 in creating ListedColormap from a set +* :ghissue:`5855`: plt.step(..., where="auto") +* :ghissue:`19474`: Memory leak with CallbackRegistry +* :ghissue:`19345`: legend is eating up huge amounts of memory +* :ghissue:`19066`: plt.scatter, error with NaN values and edge color +* :ghissue:`19432`: Unexpected change in behavior in plt.subplot +* :ghissue:`18020`: Scatter3D: facecolor or color to "none" leads to an error +* :ghissue:`18939`: Warn re: Axes3D constructor behavior change in mpl3.4 +* :ghissue:`19128`: webagg reports incorrect values for non-alphanumeric key events on non-qwerty keyboards +* :ghissue:`16558`: Request: for non-interactive backends make fig.canvas.draw() force the render +* :ghissue:`19234`: tick labels displaced vertically with text.usetex and xcolor +* :ghissue:`18407`: pgf backend no longer supports fig.draw +* :ghissue:`2298`: axes.xmargin/ymargin rcParam behaves differently than pyplot.margins() +* :ghissue:`19473`: Animations in Tkinter window advance non-uniformly +* :ghissue:`8688`: document moved examples +* :ghissue:`9553`: Display warning on out-of-date documentation websites +* :ghissue:`9556`: Examples page version is out of date +* :ghissue:`12374`: Examples in docs should be redirected to latest version number +* :ghissue:`19486`: Figure.tight_layout() raises MatplotlibDeprecationWarning +* :ghissue:`19445`: axline transform support broke axline in loglog scale +* :ghissue:`19178`: mathtext \lim is vertically misaligned +* :ghissue:`19446`: Better document and error handle third dimension in pyplot.text() positional argument +* :ghissue:`8790`: Inconsistent doc vs behavior for RendererXXX.draw_markers +* :ghissue:`18815`: Patch3D object does not return correct face color with get_facecolor +* :ghissue:`19152`: Automatically Aligned Labels outside Figure with Constrained Layout in Exported File +* :ghissue:`18934`: stairs() crashes with no values and one edge +* :ghissue:`11296`: Image in github repo does not match matplotlib.org (breaks image tutorial) +* :ghissue:`18699`: Issue with downloading stinkbug for "Image Tutorial" +* :ghissue:`19405`: TypeError constructor returned NULL in wayland session +* :ghissue:`18962`: Table CSS needs cleanup +* :ghissue:`19417`: CI failing on numpy... +* :ghissue:`17849`: Problems caused by changes to logic of scatter coloring in matplotlib 3.3.0.rc1 +* :ghissue:`18648`: Drop support for directly imread()ing urls. +* :ghissue:`19366`: Current CI doc builds fail +* :ghissue:`19372`: matplotlib.axes.Axes.indicate_inset default label value is incompatible with LaTeX +* :ghissue:`17100`: Is it a better solution to acess one of the spines by class atrribute? +* :ghissue:`17375`: Proposal: add_subfigs.... +* :ghissue:`19339`: constrained_layout + fixed-aspect axes + bbox_inches="tight" +* :ghissue:`19308`: Reduce whitespace in Choosing Colormaps tutorial plots +* :ghissue:`18832`: MNT: Remove AxesStack and deprecated behavior of reuse of existing axes with same arguments +* :ghissue:`19084`: Arrow coordinates slightly off when used with annotation text +* :ghissue:`17765`: PGF xelatex can't find fonts in special-character paths +* :ghissue:`19274`: Missing marker in documentation of plot +* :ghissue:`18241`: LaTeX overset: unknown symbol +* :ghissue:`19292`: Non interpolated placeholder value in docstring. +* :ghissue:`18119`: Can no longer deepcopy LogNorm objects on master +* :ghissue:`8665`: Noninteger Bases in mathtext sqrt +* :ghissue:`19243`: matplotlib doesn't build with qhull-2020.2 +* :ghissue:`19275`: Double specifications of plot attributes +* :ghissue:`15066`: Feature request: stem3 +* :ghissue:`19209`: Segfault when trying to create gigapixel image with agg backend +* :ghissue:`4321`: clabel ticks and axes limits with eps zoom output +* :ghissue:`16376`: ``SymLogNorm`` and ``SymLogScale`` give inconsistent results.... +* :ghissue:`19239`: _make_norm_from_scale needs to process values +* :ghissue:`16552`: Scatter autoscaling still has issues with log scaling and zero values +* :ghissue:`18417`: Documentation issue template should ask for matplotlib version +* :ghissue:`19206`: matplotlib.cbook.Grouper: Example raise exception: +* :ghissue:`19203`: Date Tick Labels example +* :ghissue:`18581`: Add a check in check_figures_equal that the test did not accidentally plot on non-fixture figures +* :ghissue:`18563`: Create a RangeSlider widget +* :ghissue:`19099`: axisartist axis_direction bug +* :ghissue:`19171`: 3D surface example bug for non-square grid +* :ghissue:`18112`: set_{x,y,z}bound 3d limits are not persistent upon interactive rotation +* :ghissue:`19078`: _update_patch_limits should not use CLOSEPOLY verticies for updating +* :ghissue:`16123`: test_dpi_ratio_change fails on Windows/Qt5Agg +* :ghissue:`15796`: [DOC] PDF build of matplotlib own documentation crashes with LaTeX error "too deeply nested" +* :ghissue:`19091`: 3D Axes don't work in SubFigures +* :ghissue:`7238`: better document how to configure artists for picking +* :ghissue:`11147`: FR: add a supxlabel and supylabel as the suptitle function which are already exist +* :ghissue:`17417`: tutorial on how autoscaling works +* :ghissue:`18917`: Spy displays nothing for full arrays +* :ghissue:`18562`: Allow slider valstep to be arraylike +* :ghissue:`18942`: AnnotationBbox errors with kwargs +* :ghissue:`11472`: Mention predefined keyboard shortcuts in the docs on event-handling +* :ghissue:`18898`: wrong bounds checking in streamplot start_points +* :ghissue:`18974`: Contour label demo would benefit from some more info and/or references. +* :ghissue:`17708`: Mention rasterized option in more methods +* :ghissue:`18826`: Pgf plots with pdflatex broken +* :ghissue:`18959`: Add sphinx-gallery cross ref instructions to documenting guide +* :ghissue:`18926`: Font not installed, unclear warning +* :ghissue:`18891`: SVG animation doesn't work in HTMLWriter due to wrong type +* :ghissue:`18222`: It is painful as a new user, to figure out what AxesSubplot is +* :ghissue:`16153`: gap size for contour labels is poorly estimated +* :ghissue:`17910`: Improve accessibility of form controls in HTML widgets +* :ghissue:`18273`: Surprising behavior of shared axes with categorical units +* :ghissue:`18731`: Compact string notation for subplot_mosaic +* :ghissue:`18221`: Add example of keys to explore 3D data +* :ghissue:`18882`: Incorrect version requirement message from setup.py +* :ghissue:`18491`: Mostly unused glossary still exists in our docs +* :ghissue:`18548`: add_subplot(..., axes_cls=...) +* :ghissue:`8249`: Bug in mpl_connect(): On Windows, with the wx backend, arrow keys are not reported +* :ghissue:`15609`: [SPRINT] Update Named Colors Example +* :ghissue:`18800`: Log-scale ticker fails at 1e-323 +* :ghissue:`18392`: ``scatter()``: ``edgecolor`` takes precedence over ``edgecolors`` +* :ghissue:`18301`: "How to use Matplotlib in a web application server" should be made an example +* :ghissue:`18386`: Path3DCollection.set_color(self, c) does not change the color of scatter points. +* :ghissue:`8946`: Axes with sharex can have divergent axes after setting tick markers +* :ghissue:`2294`: tex option not respected by date x-axis +* :ghissue:`4382`: use new binary comm in nbagg +* :ghissue:`17088`: ``projection`` kwarg could be better documented. +* :ghissue:`18717`: Tick formatting issues on horizontal histogram with datetime on 3.3.2 +* :ghissue:`12636`: Characters doesn't display correctly when figure saved as pdf with a custom font +* :ghissue:`18377`: Matplotlib picks a headless backend on Linux if Wayland is available but X11 isn't +* :ghissue:`13199`: Examples that use private APIs +* :ghissue:`18662`: Inconsistent setting of axis limits with autoscale=False +* :ghissue:`18690`: Class deprecation machinery and mixins +* :ghissue:`18510`: Build fails on OS X: wrong minimum version +* :ghissue:`18641`: Conversion cache cleaning is broken with xdist +* :ghissue:`15614`: named color examples need borders +* :ghissue:`5519`: The linestyle 'None', ' ' and '' not supported by PathPatch. +* :ghissue:`17487`: Polygon selector with useblit=True - polygon dissapears +* :ghissue:`17476`: RectangleSelector fails to clear itself after being toggled inactive and then back to active. +* :ghissue:`18600`: plt.errorbar raises error when given marker= +* :ghissue:`18355`: Optional components required to build docs aren't documented +* :ghissue:`18428`: small bug in the mtplotlib gallery +* :ghissue:`4438`: inconsistent behaviour of the errorevery option in pyplot.errorbar() to the markevery keyword +* :ghissue:`5823`: pleas dont include the Google Analytics tracking in the off-line doc +* :ghissue:`13035`: Path3DCollection from 3D scatter cannot set_color +* :ghissue:`9725`: scatter - set_facecolors is not working on Axes3D +* :ghissue:`3370`: Patch3DCollection doesn't update color after calling set_color +* :ghissue:`18427`: yaxis.set_label_position("right") resets "horizontalalignment" +* :ghissue:`3129`: super-ify the code base +* :ghissue:`17518`: Plotting legend throws error "font family ['serif'] not found. Falling back to DejaVu Sans" +* :ghissue:`18282`: Bad interaction between kerning and non-latin1 characters in pdf output +* :ghissue:`6669`: [Feature request] Functions for "manually" plotting histograms +* :ghissue:`18411`: 2-D array RGB and RGBA values not understood in plt.plot() +* :ghissue:`18404`: Double-click events are not recognised in Jupyter notebook +* :ghissue:`12027`: marker_props is never used in the constructor of RectangleSelector +* :ghissue:`18438`: Warn when a non-started animation is gc'ed. +* :ghissue:`11259`: Symbols appear as streaks with usetex=True, times font and PDF backend +* :ghissue:`18345`: Specify what sharex and sharey do... +* :ghissue:`18082`: Feature Request: Non overlapping Bubble Plots +* :ghissue:`568`: Support error bars on 3D plots +* :ghissue:`17865`: Earlier validation of color inputs +* :ghissue:`18363`: ha="right" breaks AnchoredText placement. +* :ghissue:`11050`: keyboard shortcuts don't get registered using the experimental toolmanager with qt +* :ghissue:`17906`: Set mathtext.fontset per element +* :ghissue:`18311`: Subplot scatter plot with categorical data on y-axis with 'sharey=True' option overwrites the y-axis labels +* :ghissue:`10304`: No link to shared axes for Axis.set_units +* :ghissue:`17712`: constrained_layout fails on suptitle+colorbars+some figure sizes +* :ghissue:`14638`: colorbar.make_axes doesn't anchor in constrained_layout +* :ghissue:`18299`: New configure_subplots behaves badly on TkAgg backend +* :ghissue:`18300`: Remove the examples category "Our Favorite Recipies" +* :ghissue:`18077`: Imshow breaks if given a unyt_array input +* :ghissue:`7074`: Using a linestyle cycler with plt.errorbar results in strange plots +* :ghissue:`18236`: FuncAnimation fails to display with interval 0 on Tkagg backend +* :ghissue:`8107`: invalid command name "..._on_timer" in FuncAnimation for (too) small interval +* :ghissue:`18272`: Add CI Intervall to boxplot notch documentation +* :ghissue:`18137`: axhspan() in empty plots changes the xlimits of plots sharing the X axis +* :ghissue:`18246`: test_never_update is flaky +* :ghissue:`5856`: Horizontal stem plot +* :ghissue:`18160`: Add feature request template +* :ghissue:`17197`: Missing character upon savefig() with Free Serif font +* :ghissue:`17013`: Request: provide a contextmanager for ioff or allow plt.figure(draw_on_create=False) +* :ghissue:`17537`: hat graphs need an example... +* :ghissue:`17755`: mplot3d: add_collection3d issues +* :ghissue:`18192`: Cannot save SVG file with FIPS compliant Python +* :ghissue:`17574`: Vertical alignment of tick labels containing minus in font size other than 10 with usetex=True +* :ghissue:`18097`: Feature Request: Allow hexbin to use a string for parameter C to refer to column in data (DataFrame) +* :ghissue:`17689`: Add pause/resume methods to Animation baseclass +* :ghissue:`16087`: Error with greek letters in pdf export when using usetex=True and mathptmx +* :ghissue:`17136`: set_ticks() changes view limits of the axis +* :ghissue:`12198`: axvline incorrectly tries to handle unitized ymin, ymax +* :ghissue:`9139`: Python3 matplotlib 2.0.2 with Times New Roman misses unicode minus sign in pdf +* :ghissue:`5970`: pyplot.scatter raises obscure error when mistakenly passed a third string param +* :ghissue:`17936`: documenattion and behavior do not match for suppressing (PDF) metadata +* :ghissue:`17932`: latex textrm does not work in Cairo backend +* :ghissue:`17714`: Universal fullscreen command +* :ghissue:`4584`: ColorbarBase draws edges in slightly wrong positions. +* :ghissue:`17878`: flipping of imshow in specgram +* :ghissue:`6118`: consider using qtpy for qt abstraction layer +* :ghissue:`17908`: rcParams restrictions on frame_formats are out of sync with supported values (HTMLWriter) +* :ghissue:`17867`: datetime plotting broken on master +* :ghissue:`16810`: Docs do not build in parallel +* :ghissue:`17918`: Extend hatch reference +* :ghissue:`17149`: Rasterization creates multiple bitmap elements and large file sizes +* :ghissue:`17855`: Add Hatch Example to gallery +* :ghissue:`15821`: Should constrained_layout work as plt.figure() argument? +* :ghissue:`15616`: Colormaps should have a ``_repr_html_`` that is an image of the colormap +* :ghissue:`17579`: ``BoundaryNorm`` yield a ``ZeroDivisionError: division by zero`` +* :ghissue:`17652`: NEP 29 : Stop support fro Python 3.6 soon ? +* :ghissue:`11095`: Repeated plot calls with xunits=None throws exception +* :ghissue:`17733`: Rename "array" (and perhaps "fields") section of Axes API +* :ghissue:`15610`: Link to most recent DevDocs when installing from Master Source +* :ghissue:`17817`: (documentation, possible first-timer bug) Typo and grammar on Legends and Annotations for tight layout guide page +* :ghissue:`17804`: Setting the norm on imshow object removes colorbar ylabel +* :ghissue:`17758`: bar, barh should take a list of hatches like it does of colors +* :ghissue:`17746`: Antialiasing with colorbars? +* :ghissue:`17659`: Enhancement: Set tick and ticklabel colors separately from matplotlib style file +* :ghissue:`17144`: Wrong icon on windows task bar for figure windows +* :ghissue:`2870`: Wrong symbols from a TrueType font diff --git a/doc/users/prev_whats_new/whats_new_3.2.0.rst b/doc/users/prev_whats_new/whats_new_3.2.0.rst index 0e6c9a867898..efa099d01a23 100644 --- a/doc/users/prev_whats_new/whats_new_3.2.0.rst +++ b/doc/users/prev_whats_new/whats_new_3.2.0.rst @@ -47,6 +47,8 @@ Gouraud-shading alpha channel in PDF backend The pdf backend now supports an alpha channel in Gouraud-shaded triangle meshes. +.. _whats-new-3-2-0-kerning: + Kerning adjustments now use correct values ------------------------------------------ Due to an error in how kerning adjustments were applied, previous versions of diff --git a/doc/users/prev_whats_new/whats_new_3.4.0.rst b/doc/users/prev_whats_new/whats_new_3.4.0.rst new file mode 100644 index 000000000000..cb8220bb5f0b --- /dev/null +++ b/doc/users/prev_whats_new/whats_new_3.4.0.rst @@ -0,0 +1,1037 @@ +============================== +What's new in Matplotlib 3.4.0 +============================== + +For a list of all of the issues and pull requests since the last revision, see +the :ref:`github-stats`. + +.. contents:: Table of Contents + :depth: 4 + +.. toctree:: + :maxdepth: 4 + +Figure and Axes creation / management +===================================== + +New subfigure functionality +--------------------------- + +New `.figure.Figure.add_subfigure` and `.figure.Figure.subfigures` +functionalities allow creating virtual figures within figures. Similar nesting +was previously done with nested gridspecs (see +:doc:`/gallery/subplots_axes_and_figures/gridspec_nested`). However, this did +not allow localized figure artists (e.g., a colorbar or suptitle) that only +pertained to each subgridspec. + +The new methods `.figure.Figure.add_subfigure` and `.figure.Figure.subfigures` +are meant to rhyme with `.figure.Figure.add_subplot` and +`.figure.Figure.subplots` and have most of the same arguments. + +See :doc:`/gallery/subplots_axes_and_figures/subfigures` for further details. + +.. note:: + + The subfigure functionality is experimental API as of v3.4. + +.. plot:: + + def example_plot(ax, fontsize=12, hide_labels=False): + pc = ax.pcolormesh(np.random.randn(30, 30)) + if not hide_labels: + ax.set_xlabel('x-label', fontsize=fontsize) + ax.set_ylabel('y-label', fontsize=fontsize) + ax.set_title('Title', fontsize=fontsize) + return pc + + np.random.seed(19680808) + fig = plt.figure(constrained_layout=True, figsize=(10, 4)) + subfigs = fig.subfigures(1, 2, wspace=0.07) + + axsLeft = subfigs[0].subplots(1, 2, sharey=True) + subfigs[0].set_facecolor('#eee') + for ax in axsLeft: + pc = example_plot(ax) + subfigs[0].suptitle('Left plots', fontsize='x-large') + subfigs[0].colorbar(pc, shrink=0.6, ax=axsLeft, location='bottom') + + axsRight = subfigs[1].subplots(3, 1, sharex=True) + for nn, ax in enumerate(axsRight): + pc = example_plot(ax, hide_labels=True) + if nn == 2: + ax.set_xlabel('xlabel') + if nn == 1: + ax.set_ylabel('ylabel') + subfigs[1].colorbar(pc, shrink=0.6, ax=axsRight) + subfigs[1].suptitle('Right plots', fontsize='x-large') + + fig.suptitle('Figure suptitle', fontsize='xx-large') + + plt.show() + +Single-line string notation for ``subplot_mosaic`` +-------------------------------------------------- + +`.Figure.subplot_mosaic` and `.pyplot.subplot_mosaic` now accept a single-line +string, using semicolons to delimit rows. Namely, :: + + plt.subplot_mosaic( + """ + AB + CC + """) + +may be written as the shorter: + +.. plot:: + :include-source: + + plt.subplot_mosaic("AB;CC") + +Changes to behavior of Axes creation methods (``gca``, ``add_axes``, ``add_subplot``) +------------------------------------------------------------------------------------- + +The behavior of the functions to create new Axes (`.pyplot.axes`, +`.pyplot.subplot`, `.figure.Figure.add_axes`, `.figure.Figure.add_subplot`) has +changed. In the past, these functions would detect if you were attempting to +create Axes with the same keyword arguments as already-existing Axes in the +current Figure, and if so, they would return the existing Axes. Now, +`.pyplot.axes`, `.figure.Figure.add_axes`, and `.figure.Figure.add_subplot` +will always create new Axes. `.pyplot.subplot` will continue to reuse an +existing Axes with a matching subplot spec and equal *kwargs*. + +Correspondingly, the behavior of the functions to get the current Axes +(`.pyplot.gca`, `.figure.Figure.gca`) has changed. In the past, these functions +accepted keyword arguments. If the keyword arguments matched an +already-existing Axes, then that Axes would be returned, otherwise new Axes +would be created with those keyword arguments. Now, the keyword arguments are +only considered if there are no Axes at all in the current figure. In a future +release, these functions will not accept keyword arguments at all. + +``add_subplot``/``add_axes`` gained an *axes_class* parameter +------------------------------------------------------------- + +In particular, ``mpl_toolkits`` Axes subclasses can now be idiomatically used +using, e.g., ``fig.add_subplot(axes_class=mpl_toolkits.axislines.Axes)`` + +Subplot and subplot2grid can now work with constrained layout +------------------------------------------------------------- + +``constrained_layout`` depends on a single `.GridSpec` for each logical layout +on a figure. Previously, `.pyplot.subplot` and `.pyplot.subplot2grid` added a +new ``GridSpec`` each time they were called and were therefore incompatible +with ``constrained_layout``. + +Now ``subplot`` attempts to reuse the ``GridSpec`` if the number of rows and +columns is the same as the top level GridSpec already in the figure, i.e., +``plt.subplot(2, 1, 2)`` will use the same GridSpec as ``plt.subplot(2, 1, 1)`` +and the ``constrained_layout=True`` option to `~.figure.Figure` will work. + +In contrast, mixing *nrows* and *ncols* will *not* work with +``constrained_layout``: ``plt.subplot(2, 2, 1)`` followed by ``plt.subplots(2, +1, 2)`` will still produce two GridSpecs, and ``constrained_layout=True`` will +give bad results. In order to get the desired effect, the second call can +specify the cells the second Axes is meant to cover: ``plt.subplots(2, 2, (2, +4))``, or the more Pythonic ``plt.subplot2grid((2, 2), (0, 1), rowspan=2)`` can +be used. + + +Plotting methods +================ + +``axline`` supports *transform* parameter +----------------------------------------- + +`~.Axes.axline` now supports the *transform* parameter, which applies to the +points *xy1*, *xy2*. The *slope* (if given) is always in data coordinates. + +For example, this can be used with ``ax.transAxes`` for drawing lines with a +fixed slope. In the following plot, the line appears through the same point on +both Axes, even though they show different data limits. + +.. plot:: + :include-source: + + fig, axs = plt.subplots(1, 2) + + for i, ax in enumerate(axs): + ax.axline((0.25, 0), slope=2, transform=ax.transAxes) + ax.set(xlim=(i, i+5), ylim=(i, i+5)) + +New automatic labeling for bar charts +------------------------------------- + +A new `.Axes.bar_label` method has been added for auto-labeling bar charts. + +.. figure:: /gallery/lines_bars_and_markers/images/sphx_glr_bar_label_demo_001.png + :target: /gallery/lines_bars_and_markers/bar_label_demo.html + + Example of the new automatic labeling. + +A list of hatches can be specified to `~.axes.Axes.bar` and `~.axes.Axes.barh` +------------------------------------------------------------------------------ + +Similar to some other rectangle properties, it is now possible to hand a list +of hatch styles to `~.axes.Axes.bar` and `~.axes.Axes.barh` in order to create +bars with different hatch styles, e.g. + +.. plot:: + + fig, ax = plt.subplots() + ax.bar([1, 2], [2, 3], hatch=['+', 'o']) + plt.show() + +Setting ``BarContainer`` orientation +------------------------------------ + +`.BarContainer` now accepts a new string argument *orientation*. It can be +either ``'vertical'`` or ``'horizontal'``, default is ``None``. + +Contour plots now default to using ScalarFormatter +-------------------------------------------------- + +Pass ``fmt="%1.3f"`` to the contouring call to restore the old default label +format. + +``Axes.errorbar`` cycles non-color properties correctly +------------------------------------------------------- + +Formerly, `.Axes.errorbar` incorrectly skipped the Axes property cycle if a +color was explicitly specified, even if the property cycler was for other +properties (such as line style). Now, `.Axes.errorbar` will advance the Axes +property cycle as done for `.Axes.plot`, i.e., as long as all properties in the +cycler are not explicitly passed. + +For example, the following will cycle through the line styles: + +.. plot:: + :include-source: + + x = np.arange(0.1, 4, 0.5) + y = np.exp(-x) + offsets = [0, 1] + + plt.rcParams['axes.prop_cycle'] = plt.cycler('linestyle', ['-', '--']) + + fig, ax = plt.subplots() + for offset in offsets: + ax.errorbar(x, y + offset, xerr=0.1, yerr=0.3, fmt='tab:blue') + +``errorbar`` *errorevery* parameter matches *markevery* +------------------------------------------------------- + +Similar to the *markevery* parameter to `~.Axes.plot`, the *errorevery* +parameter of `~.Axes.errorbar` now accept slices and NumPy fancy indexes (which +must match the size of *x*). + +.. plot:: + + x = np.linspace(0, 1, 15) + y = x * (1-x) + yerr = y/6 + + fig, ax = plt.subplots(2, constrained_layout=True) + ax[0].errorbar(x, y, yerr, capsize=2) + ax[0].set_title('errorevery unspecified') + + ax[1].errorbar(x, y, yerr, capsize=2, + errorevery=[False, True, True, False, True] * 3) + ax[1].set_title('errorevery=[False, True, True, False, True] * 3') + +``hexbin`` supports data reference for *C* parameter +---------------------------------------------------- + +As with the *x* and *y* parameters, `.Axes.hexbin` now supports passing the *C* +parameter using a data reference. + +.. plot:: + :include-source: + + data = { + 'a': np.random.rand(1000), + 'b': np.random.rand(1000), + 'c': np.random.rand(1000), + } + + fig, ax = plt.subplots() + ax.hexbin('a', 'b', C='c', data=data, gridsize=10) + +Support callable for formatting of Sankey labels +------------------------------------------------ + +The `format` parameter of `matplotlib.sankey.Sankey` can now accept callables. + +This allows the use of an arbitrary function to label flows, for example +allowing the mapping of numbers to emoji. + +.. plot:: + + from matplotlib.sankey import Sankey + import math + + + def display_in_cats(values, min_cats, max_cats): + def display_in_cat_scale(value): + max_value = max(values, key=abs) + number_cats_to_show = \ + max(min_cats, math.floor(abs(value) / max_value * max_cats)) + return str(number_cats_to_show * '🐱') + + return display_in_cat_scale + + + flows = [35, 15, 40, -20, -15, -5, -40, -10] + orientations = [-1, 1, 0, 1, 1, 1, -1, -1] + + # Cats are good, we want a strictly positive number of them + min_cats = 1 + # More than four cats might be too much for some people + max_cats = 4 + + cats_format = display_in_cats(flows, min_cats, max_cats) + + sankey = Sankey(flows=flows, orientations=orientations, format=cats_format, + offset=.1, head_angle=180, shoulder=0, scale=.010) + + diagrams = sankey.finish() + + diagrams[0].texts[2].set_text('') + + plt.title(f'Sankey flows measured in cats \n' + f'🐱 = {max(flows, key=abs) / max_cats}') + + plt.show() + +``Axes.spines`` access shortcuts +-------------------------------- + +``Axes.spines`` is now a dedicated container class `.Spines` for a set of +`.Spine`\s instead of an ``OrderedDict``. On top of dict-like access, +``Axes.spines`` now also supports some ``pandas.Series``-like features. + +Accessing single elements by item or by attribute:: + + ax.spines['top'].set_visible(False) + ax.spines.top.set_visible(False) + +Accessing a subset of items:: + + ax.spines[['top', 'right']].set_visible(False) + +Accessing all items simultaneously:: + + ax.spines[:].set_visible(False) + +New ``stairs`` method and ``StepPatch`` artist +---------------------------------------------- + +`.pyplot.stairs` and the underlying artist `~.matplotlib.patches.StepPatch` +provide a cleaner interface for plotting stepwise constant functions for the +common case that you know the step edges. This supersedes many use cases of +`.pyplot.step`, for instance when plotting the output of `numpy.histogram`. + +For both the artist and the function, the x-like edges input is one element +longer than the y-like values input + +.. plot:: + + np.random.seed(0) + h, edges = np.histogram(np.random.normal(5, 2, 5000), + bins=np.linspace(0,10,20)) + + fig, ax = plt.subplots(constrained_layout=True) + + ax.stairs(h, edges) + + plt.show() + +See :doc:`/gallery/lines_bars_and_markers/stairs_demo` for examples. + +Added *orientation* parameter for stem plots +-------------------------------------------- + +By default, stem lines are vertical. They can be changed to horizontal using +the *orientation* parameter of `.Axes.stem` or `.pyplot.stem`: + +.. plot:: + + locs = np.linspace(0.1, 2 * np.pi, 25) + heads = np.cos(locs) + + fig, ax = plt.subplots() + ax.stem(locs, heads, orientation='horizontal') + +Angles on Bracket arrow styles +------------------------------ + +Angles specified on the *Bracket* arrow styles (``]-[``, ``]-``, ``-[``, or +``|-|`` passed to *arrowstyle* parameter of `.FancyArrowPatch`) are now +applied. Previously, the *angleA* and *angleB* options were allowed, but did +nothing. + +.. plot:: + + import matplotlib.patches as mpatches + + fig, ax = plt.subplots() + ax.set(xlim=(0, 1), ylim=(-1, 4)) + + for i, stylename in enumerate((']-[', '|-|')): + for j, angle in enumerate([-30, 60]): + arrowstyle = f'{stylename},angleA={angle},angleB={-angle}' + patch = mpatches.FancyArrowPatch((0.1, 2*i + j), (0.9, 2*i + j), + arrowstyle=arrowstyle, + mutation_scale=25) + ax.text(0.5, 2*i + j, arrowstyle, + verticalalignment='bottom', horizontalalignment='center') + ax.add_patch(patch) + +``TickedStroke`` patheffect +--------------------------- + +The new `.TickedStroke` patheffect can be used to produce lines with a ticked +style. This can be used to, e.g., distinguish the valid and invalid sides of +the constraint boundaries in the solution space of optimizations. + +.. figure:: /gallery/misc/images/sphx_glr_tickedstroke_demo_002.png + :target: /gallery/misc/tickedstroke_demo.html + + +Colors and colormaps +==================== + +Collection color specification and mapping +------------------------------------------ + +Reworking the handling of color mapping and the keyword arguments for +*facecolor* and *edgecolor* has resulted in three behavior changes: + +1. Color mapping can be turned off by calling ``Collection.set_array(None)``. + Previously, this would have no effect. +2. When a mappable array is set, with ``facecolor='none'`` and + ``edgecolor='face'``, both the faces and the edges are left uncolored. + Previously the edges would be color-mapped. +3. When a mappable array is set, with ``facecolor='none'`` and + ``edgecolor='red'``, the edges are red. This addresses Issue #1302. + Previously the edges would be color-mapped. + +Transparency (alpha) can be set as an array in collections +---------------------------------------------------------- + +Previously, the alpha value controlling transparency in collections could be +specified only as a scalar applied to all elements in the collection. For +example, all the markers in a `~.Axes.scatter` plot, or all the quadrilaterals +in a `~.Axes.pcolormesh` plot, would have the same alpha value. + +Now it is possible to supply alpha as an array with one value for each element +(marker, quadrilateral, etc.) in a collection. + +.. plot:: + + x = np.arange(5, dtype=float) + y = np.arange(5, dtype=float) + # z and zalpha for demo pcolormesh + z = x[1:, np.newaxis] + y[np.newaxis, 1:] + zalpha = np.ones_like(z) + zalpha[::2, ::2] = 0.3 # alternate patches are partly transparent + # s and salpha for demo scatter + s = x + salpha = np.linspace(0.1, 0.9, len(x)) # just a ramp + + fig, axs = plt.subplots(2, 2, constrained_layout=True) + axs[0, 0].pcolormesh(x, y, z, alpha=zalpha) + axs[0, 0].set_title("pcolormesh") + axs[0, 1].scatter(x, y, c=s, alpha=salpha) + axs[0, 1].set_title("color-mapped") + axs[1, 0].scatter(x, y, c='k', alpha=salpha) + axs[1, 0].set_title("c='k'") + axs[1, 1].scatter(x, y, c=['r', 'g', 'b', 'c', 'm'], alpha=salpha) + axs[1, 1].set_title("c=['r', 'g', 'b', 'c', 'm']") + +pcolormesh has improved transparency handling by enabling snapping +------------------------------------------------------------------ + +Due to how the snapping keyword argument was getting passed to the Agg backend, +previous versions of Matplotlib would appear to show lines between the grid +edges of a mesh with transparency. This version now applies snapping by +default. To restore the old behavior (e.g., for test images), you may set +:rc:`pcolormesh.snap` to `False`. + +.. plot:: + + # Use old pcolormesh snapping values + plt.rcParams['pcolormesh.snap'] = False + fig, ax = plt.subplots() + xx, yy = np.meshgrid(np.arange(10), np.arange(10)) + z = (xx + 1) * (yy + 1) + mesh = ax.pcolormesh(xx, yy, z, shading='auto', alpha=0.5) + fig.colorbar(mesh, orientation='vertical') + ax.set_title('Before (pcolormesh.snap = False)') + +Note that there are lines between the grid boundaries of the main plot which +are not the same transparency. The colorbar also shows these lines when a +transparency is added to the colormap because internally it uses pcolormesh to +draw the colorbar. With snapping on by default (below), the lines at the grid +boundaries disappear. + +.. plot:: + + fig, ax = plt.subplots() + xx, yy = np.meshgrid(np.arange(10), np.arange(10)) + z = (xx + 1) * (yy + 1) + mesh = ax.pcolormesh(xx, yy, z, shading='auto', alpha=0.5) + fig.colorbar(mesh, orientation='vertical') + ax.set_title('After (default: pcolormesh.snap = True)') + +IPython representations for Colormap objects +-------------------------------------------- + +The `matplotlib.colors.Colormap` object now has image representations for +IPython / Jupyter backends. Cells returning a colormap on the last line will +display an image of the colormap. + +.. only:: html + + .. code-block:: + + In[1]: cmap = plt.get_cmap('viridis').with_extremes(bad='r', under='g', over='b') + + In[2]: cmap + Out[2]: + +.. raw:: html + +
+ viridis +
+
+ viridis colormap +
+
+
+
+ under +
+
+ bad +
+
+
+ over +
+
+ +``Colormap.set_extremes`` and ``Colormap.with_extremes`` +-------------------------------------------------------- + +Because the `.Colormap.set_bad`, `.Colormap.set_under` and `.Colormap.set_over` +methods modify the colormap in place, the user must be careful to first make a +copy of the colormap if setting the extreme colors e.g. for a builtin colormap. + +The new ``Colormap.with_extremes(bad=..., under=..., over=...)`` can be used to +first copy the colormap and set the extreme colors on that copy. + +The new `.Colormap.set_extremes` method is provided for API symmetry with +`.Colormap.with_extremes`, but note that it suffers from the same issue as the +earlier individual setters. + +Get under/over/bad colors of Colormap objects +--------------------------------------------- + +`matplotlib.colors.Colormap` now has methods `~.colors.Colormap.get_under`, +`~.colors.Colormap.get_over`, `~.colors.Colormap.get_bad` for the colors used +for out-of-range and masked values. + +New ``cm.unregister_cmap`` function +----------------------------------- + +`.cm.unregister_cmap` allows users to remove a colormap that they have +previously registered. + +New ``CenteredNorm`` for symmetrical data around a center +--------------------------------------------------------- + +In cases where data is symmetrical around a center, for example, positive and +negative anomalies around a center zero, `~.matplotlib.colors.CenteredNorm` is +a new norm that automatically creates a symmetrical mapping around the center. +This norm is well suited to be combined with a divergent colormap which uses an +unsaturated color in its center. + +.. plot:: + + from matplotlib.colors import CenteredNorm + + np.random.seed(20201004) + data = np.random.normal(size=(3, 4), loc=1) + + fig, ax = plt.subplots() + pc = ax.pcolormesh(data, cmap=plt.get_cmap('RdGy'), norm=CenteredNorm()) + fig.colorbar(pc) + ax.set_title('data centered around zero') + + # add text annotation + for irow, data_row in enumerate(data): + for icol, val in enumerate(data_row): + ax.text(icol + 0.5, irow + 0.5, f'{val:.2f}', color='C0', + size=16, va='center', ha='center') + plt.show() + +If the center of symmetry is different from 0, it can be set with the *vcenter* +argument. To manually set the range of `~.matplotlib.colors.CenteredNorm`, use +the *halfrange* argument. + +See :doc:`/tutorials/colors/colormapnorms` for an example and more details +about data normalization. + +New ``FuncNorm`` for arbitrary normalizations +--------------------------------------------- + +The `.FuncNorm` allows for arbitrary normalization using functions for the +forward and inverse. + +.. plot:: + + from matplotlib.colors import FuncNorm + + def forward(x): + return x**2 + def inverse(x): + return np.sqrt(x) + + norm = FuncNorm((forward, inverse), vmin=0, vmax=3) + + np.random.seed(20201004) + data = np.random.normal(size=(3, 4), loc=1) + + fig, ax = plt.subplots() + pc = ax.pcolormesh(data, norm=norm) + fig.colorbar(pc) + ax.set_title('squared normalization') + + # add text annotation + for irow, data_row in enumerate(data): + for icol, val in enumerate(data_row): + ax.text(icol + 0.5, irow + 0.5, f'{val:.2f}', color='C0', + size=16, va='center', ha='center') + plt.show() + +See :doc:`/tutorials/colors/colormapnorms` for an example and more details +about data normalization. + +GridSpec-based colorbars can now be positioned above or to the left of the main axes +------------------------------------------------------------------------------------ + +... by passing ``location="top"`` or ``location="left"`` to the ``colorbar()`` +call. + + +Titles, ticks, and labels +========================= + +supxlabel and supylabel +----------------------- + +It is possible to add x- and y-labels to a whole figure, analogous to +`.FigureBase.suptitle` using the new `.FigureBase.supxlabel` and +`.FigureBase.supylabel` methods. + +.. plot:: + + np.random.seed(19680801) + fig, axs = plt.subplots(3, 2, figsize=(5, 5), constrained_layout=True, + sharex=True, sharey=True) + + for nn, ax in enumerate(axs.flat): + ax.set_title(f'Channel {nn}') + ax.plot(np.cumsum(np.random.randn(50))) + + fig.supxlabel('Time [s]') + fig.supylabel('Data [V]') + +Shared-axes ``subplots`` tick label visibility is now correct for top or left labels +------------------------------------------------------------------------------------ + +When calling ``subplots(..., sharex=True, sharey=True)``, Matplotlib +automatically hides x tick labels for Axes not in the first column and y tick +labels for Axes not in the last row. This behavior is incorrect if rcParams +specify that Axes should be labeled on the top (``rcParams["xtick.labeltop"] = +True``) or on the right (``rcParams["ytick.labelright"] = True``). + +Cases such as the following are now handled correctly (adjusting visibility as +needed on the first row and last column of Axes): + +.. plot:: + :include-source: + + plt.rcParams["xtick.labelbottom"] = False + plt.rcParams["xtick.labeltop"] = True + plt.rcParams["ytick.labelleft"] = False + plt.rcParams["ytick.labelright"] = True + + fig, axs = plt.subplots(2, 2, sharex=True, sharey=True) + +An iterable object with labels can be passed to `.Axes.plot` +------------------------------------------------------------ + +When plotting multiple datasets by passing 2D data as *y* value to +`~.Axes.plot`, labels for the datasets can be passed as a list, the length +matching the number of columns in *y*. + +.. plot:: + :include-source: + + x = [1, 2, 3] + + y = [[1, 2], + [2, 5], + [4, 9]] + + plt.plot(x, y, label=['low', 'high']) + plt.legend() + + +Fonts and Text +============== + +Text transform can rotate text direction +---------------------------------------- + +The new `.Text` parameter ``transform_rotates_text`` now sets whether rotations +of the transform affect the text direction. + +.. figure:: /gallery/text_labels_and_annotations/images/sphx_glr_text_rotation_relative_to_line_001.png + :target: /gallery/text_labels_and_annotations/text_rotation_relative_to_line.html + + Example of the new *transform_rotates_text* parameter + +``matplotlib.mathtext`` now supports *overset* and *underset* LaTeX symbols +--------------------------------------------------------------------------- + +`.mathtext` now supports *overset* and *underset*, called as +``\overset{annotation}{body}`` or ``\underset{annotation}{body}``, where +*annotation* is the text "above" or "below" the *body*. + +.. plot:: + + math_expr = r"$ x \overset{f}{\rightarrow} y \underset{f}{\leftarrow} z $" + plt.text(0.4, 0.5, math_expr, usetex=False) + +*math_fontfamily* parameter to change ``Text`` font family +---------------------------------------------------------- + +The new *math_fontfamily* parameter may be used to change the family of fonts +for each individual text element in a plot. If no parameter is set, the global +value :rc:`mathtext.fontset` will be used. + +.. figure:: /gallery/text_labels_and_annotations/images/sphx_glr_mathtext_fontfamily_example_001.png + :target: /gallery/text_labels_and_annotations/mathtext_fontfamily_example.html + +``TextArea``/``AnchoredText`` support *horizontalalignment* +----------------------------------------------------------- + +The horizontal alignment of text in a `.TextArea` or `.AnchoredText` may now be +specified, which is mostly effective for multiline text: + +.. plot:: + + from matplotlib.offsetbox import AnchoredText + + fig, ax = plt.subplots() + + text0 = AnchoredText("test\ntest long text", loc="center left", + pad=0.2, prop={"ha": "left"}) + ax.add_artist(text0) + + text1 = AnchoredText("test\ntest long text", loc="center", + pad=0.2, prop={"ha": "center"}) + ax.add_artist(text1) + + text2 = AnchoredText("test\ntest long text", loc="center right", + pad=0.2, prop={"ha": "right"}) + ax.add_artist(text2) + +PDF supports URLs on ``Text`` artists +------------------------------------- + +URLs on `.text.Text` artists (i.e., from `.Artist.set_url`) will now be saved +in PDF files. + + +rcParams improvements +===================== + +New rcParams for dates: set converter and whether to use interval_multiples +--------------------------------------------------------------------------- + +The new :rc:`date.converter` allows toggling between +`matplotlib.dates.DateConverter` and `matplotlib.dates.ConciseDateConverter` +using the strings 'auto' and 'concise' respectively. + +The new :rc:`date.interval_multiples` allows toggling between the dates locator +trying to pick ticks at set intervals (i.e., day 1 and 15 of the month), versus +evenly spaced ticks that start wherever the timeseries starts: + +.. plot:: + :include-source: + + dates = np.arange('2001-01-10', '2001-05-23', dtype='datetime64[D]') + y = np.sin(dates.astype(float) / 10) + fig, axs = plt.subplots(nrows=2, constrained_layout=True) + + plt.rcParams['date.converter'] = 'concise' + plt.rcParams['date.interval_multiples'] = True + axs[0].plot(dates, y) + + plt.rcParams['date.converter'] = 'auto' + plt.rcParams['date.interval_multiples'] = False + axs[1].plot(dates, y) + +Date formatters now respect *usetex* rcParam +-------------------------------------------- + +The `.AutoDateFormatter` and `.ConciseDateFormatter` now respect +:rc:`text.usetex`, and will thus use fonts consistent with TeX rendering of the +default (non-date) formatter. TeX rendering may also be enabled/disabled by +passing the *usetex* parameter when creating the formatter instance. + +In the following plot, both the x-axis (dates) and y-axis (numbers) now use the +same (TeX) font: + +.. plot:: + + from datetime import datetime, timedelta + from matplotlib.dates import ConciseDateFormatter + + plt.rc('text', usetex=True) + + t0 = datetime(1968, 8, 1) + ts = [t0 + i * timedelta(days=1) for i in range(10)] + + fig, ax = plt.subplots() + ax.plot(ts, range(10)) + ax.xaxis.set_major_formatter(ConciseDateFormatter(ax.xaxis.get_major_locator())) + ax.set_xlabel('Date') + ax.set_ylabel('Value') + +Setting *image.cmap* to a ``Colormap`` +-------------------------------------- + +It is now possible to set :rc:`image.cmap` to a `.Colormap` instance, such as a +colormap created with the new `~.Colormap.set_extremes` above. (This can only +be done from Python code, not from the :file:`matplotlibrc` file.) + +Tick and tick label colors can be set independently using rcParams +------------------------------------------------------------------ + +Previously, :rc:`xtick.color` defined both the tick color and the label color. +The label color can now be set independently using :rc:`xtick.labelcolor`. It +defaults to ``'inherit'`` which will take the value from :rc:`xtick.color`. The +same holds for ``ytick.[label]color``. For instance, to set the ticks to light +grey and the tick labels to black, one can use the following code in a script:: + + import matplotlib as mpl + + mpl.rcParams['xtick.labelcolor'] = 'lightgrey' + mpl.rcParams['xtick.color'] = 'black' + mpl.rcParams['ytick.labelcolor'] = 'lightgrey' + mpl.rcParams['ytick.color'] = 'black' + +Or by adding the following lines to the :ref:`matplotlibrc +` file, or a Matplotlib style file: + +.. code-block:: none + + xtick.labelcolor : lightgrey + xtick.color : black + ytick.labelcolor : lightgrey + ytick.color : black + + +3D Axes improvements +==================== + +Errorbar method in 3D Axes +-------------------------- + +The errorbar function `.Axes.errorbar` is ported into the 3D Axes framework in +its entirety, supporting features such as custom styling for error lines and +cap marks, control over errorbar spacing, upper and lower limit marks. + +.. figure:: /gallery/mplot3d/images/sphx_glr_errorbar3d_001.png + :target: /gallery/mplot3d/errorbar3d.html + +Stem plots in 3D Axes +--------------------- + +Stem plots are now supported on 3D Axes. Much like 2D stems, +`~.axes3d.Axes3D.stem3D` supports plotting the stems in various orientations: + +.. plot:: + + theta = np.linspace(0, 2*np.pi) + x = np.cos(theta - np.pi/2) + y = np.sin(theta - np.pi/2) + z = theta + directions = ['z', 'x', 'y'] + names = [r'$\theta$', r'$\cos\theta$', r'$\sin\theta$'] + + fig, axs = plt.subplots(1, 3, figsize=(8, 4), + constrained_layout=True, + subplot_kw={'projection': '3d'}) + for ax, zdir, name in zip(axs, directions, names): + ax.stem(x, y, z, orientation=zdir) + ax.set_title(name) + fig.suptitle(r'A parametric circle: $(x, y) = (\cos\theta, \sin\theta)$') + +See also the :doc:`/gallery/mplot3d/stem3d_demo` demo. + +3D Collection properties are now modifiable +------------------------------------------- + +Previously, properties of a 3D Collection that were used for 3D effects (e.g., +colors were modified to produce depth shading) could not be changed after it +was created. + +Now it is possible to modify all properties of 3D Collections at any time. + +Panning in 3D Axes +------------------ + +Click and drag with the middle mouse button to pan 3D Axes. + + +Interactive tool improvements +============================= + +New ``RangeSlider`` widget +-------------------------- + +`.widgets.RangeSlider` allows for creating a slider that defines +a range rather than a single value. + +.. plot:: + + fig, ax = plt.subplots(2, 1, figsize=(5, 1)) + fig.subplots_adjust(left=0.2, right=0.8) + + from matplotlib.widgets import Slider, RangeSlider + Slider(ax[0], 'Slider', 0, 1) + RangeSlider(ax[1], 'RangeSlider', 0, 1) + +Sliders can now snap to arbitrary values +---------------------------------------- + +The `~matplotlib.widgets.Slider` UI widget now accepts arrays for *valstep*. +This generalizes the previous behavior by allowing the slider to snap to +arbitrary values. + +Pausing and Resuming Animations +------------------------------- + +The `.animation.Animation.pause` and `.animation.Animation.resume` methods +allow you to pause and resume animations. These methods can be used as +callbacks for event listeners on UI elements so that your plots can have some +playback control UI. + + +Sphinx extensions +================= + +``plot_directive`` *caption* option +----------------------------------- + +Captions were previously supported when using the ``plot_directive`` directive +with an external source file by specifying content:: + + .. plot:: path/to/plot.py + + This is the caption for the plot. + +The ``:caption:`` option allows specifying the caption for both external:: + + .. plot:: path/to/plot.py + :caption: This is the caption for the plot. + +and inline plots:: + + .. plot:: + :caption: This is a caption for the plot. + + plt.plot([1, 2, 3]) + + +Backend-specific improvements +============================= + +Consecutive rasterized draws now merged +--------------------------------------- + +Elements of a vector output can be individually set to rasterized, using the +*rasterized* keyword argument, or `~.artist.Artist.set_rasterized()`. This can +be useful to reduce file sizes. For figures with multiple raster elements they +are now automatically merged into a smaller number of bitmaps where this will +not effect the visual output. For cases with many elements this can result in +significantly smaller file sizes. + +To ensure this happens do not place vector elements between raster ones. + +To inhibit this merging set ``Figure.suppressComposite`` to True. + +Support raw/rgba frame format in ``FFMpegFileWriter`` +----------------------------------------------------- + +When using `.FFMpegFileWriter`, the *frame_format* may now be set to ``"raw"`` +or ``"rgba"``, which may be slightly faster than an image format, as no +encoding/decoding need take place between Matplotlib and FFmpeg. + +nbAgg/WebAgg support middle-click and double-click +-------------------------------------------------- + +Double click events are now supported by the nbAgg and WebAgg backends. +Formerly, WebAgg would report middle-click events as right clicks, but now +reports the correct button type. + +nbAgg support binary communication +---------------------------------- + +If the web browser and notebook support binary websockets, nbAgg will now use +them for slightly improved transfer of figure display. + +Indexed color for PNG images in PDF files when possible +------------------------------------------------------- + +When PNG images have 256 colors or fewer, they are converted to indexed color +before saving them in a PDF. This can result in a significant reduction in file +size in some cases. This is particularly true for raster data that uses a +colormap but no interpolation, such as Healpy mollview plots. Currently, this +is only done for RGB images. + +Improved font subsettings in PDF/PS +----------------------------------- + +Font subsetting in PDF and PostScript has been re-written from the embedded +``ttconv`` C code to Python. Some composite characters and outlines may have +changed slightly. This fixes ttc subsetting in PDF, and adds support for +subsetting of type 3 OTF fonts, resulting in smaller files (much smaller when +using CJK fonts), and avoids running into issues with type 42 embedding and +certain PDF readers such as Acrobat Reader. + +Kerning added to strings in PDFs +-------------------------------- + +As with text produced in the Agg backend (see :ref:`the previous what's new +entry ` for examples), PDFs now include kerning in +text strings. + +Fully-fractional HiDPI in QtAgg +------------------------------- + +Fully-fractional HiDPI (that is, HiDPI ratios that are not whole integers) was +added in Qt 5.14, and is now supported by the QtAgg backend when using this +version of Qt or newer. + +wxAgg supports fullscreen toggle +-------------------------------- + +The wxAgg backend supports toggling fullscreen using the :kbd:`f` shortcut, or +the manager function `.FigureManagerBase.full_screen_toggle`. diff --git a/doc/users/whats_new.rst b/doc/users/whats_new.rst index 4131fccde0ba..776f477ce4d4 100644 --- a/doc/users/whats_new.rst +++ b/doc/users/whats_new.rst @@ -26,4 +26,4 @@ What's new? next_whats_new/* .. Be sure to update the version in `exclude_patterns` in conf.py. -.. include:: prev_whats_new/whats_new_3.3.0.rst +.. include:: prev_whats_new/whats_new_3.4.0.rst diff --git a/lib/matplotlib/collections.py b/lib/matplotlib/collections.py index 28f9b747556d..7cc5fade3b2d 100644 --- a/lib/matplotlib/collections.py +++ b/lib/matplotlib/collections.py @@ -943,8 +943,11 @@ def update_from(self, other): artist.Artist.update_from(self, other) self._antialiaseds = other._antialiaseds + self._mapped_colors = other._mapped_colors + self._edge_is_mapped = other._edge_is_mapped self._original_edgecolor = other._original_edgecolor self._edgecolors = other._edgecolors + self._face_is_mapped = other._face_is_mapped self._original_facecolor = other._original_facecolor self._facecolors = other._facecolors self._linewidths = other._linewidths diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index 14b3f78f703b..98e2b5eb790a 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -1478,9 +1478,10 @@ def imread(fname, format=None): if isinstance(fname, str): parsed = parse.urlparse(fname) if len(parsed.scheme) > 1: # Pillow doesn't handle URLs directly. - cbook.warn_deprecated( + _api.warn_deprecated( "3.4", message="Directly reading images from URLs is " - "deprecated. Please open the URL for reading and pass the " + "deprecated since %(since)s and will no longer be supported " + "%(removal)s. Please open the URL for reading and pass the " "result to Pillow, e.g. with " "``PIL.Image.open(urllib.request.urlopen(url))``.") # hide imports to speed initial import on systems with slow linkers diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index d8495c4f4a13..11091ff893ab 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -52,14 +52,16 @@ def test_get_labels(): @check_figures_equal() def test_label_loc_vertical(fig_test, fig_ref): ax = fig_test.subplots() - sc = ax.scatter([1, 2], [1, 2], c=[1, 2]) + sc = ax.scatter([1, 2], [1, 2], c=[1, 2], label='scatter') + ax.legend() ax.set_ylabel('Y Label', loc='top') ax.set_xlabel('X Label', loc='right') cbar = fig_test.colorbar(sc) cbar.set_label("Z Label", loc='top') ax = fig_ref.subplots() - sc = ax.scatter([1, 2], [1, 2], c=[1, 2]) + sc = ax.scatter([1, 2], [1, 2], c=[1, 2], label='scatter') + ax.legend() ax.set_ylabel('Y Label', y=1, ha='right') ax.set_xlabel('X Label', x=1, ha='right') cbar = fig_ref.colorbar(sc) @@ -69,14 +71,16 @@ def test_label_loc_vertical(fig_test, fig_ref): @check_figures_equal() def test_label_loc_horizontal(fig_test, fig_ref): ax = fig_test.subplots() - sc = ax.scatter([1, 2], [1, 2], c=[1, 2]) + sc = ax.scatter([1, 2], [1, 2], c=[1, 2], label='scatter') + ax.legend() ax.set_ylabel('Y Label', loc='bottom') ax.set_xlabel('X Label', loc='left') cbar = fig_test.colorbar(sc, orientation='horizontal') cbar.set_label("Z Label", loc='left') ax = fig_ref.subplots() - sc = ax.scatter([1, 2], [1, 2], c=[1, 2]) + sc = ax.scatter([1, 2], [1, 2], c=[1, 2], label='scatter') + ax.legend() ax.set_ylabel('Y Label', y=0, ha='left') ax.set_xlabel('X Label', x=0, ha='left') cbar = fig_ref.colorbar(sc, orientation='horizontal') @@ -88,14 +92,16 @@ def test_label_loc_rc(fig_test, fig_ref): with matplotlib.rc_context({"xaxis.labellocation": "right", "yaxis.labellocation": "top"}): ax = fig_test.subplots() - sc = ax.scatter([1, 2], [1, 2], c=[1, 2]) + sc = ax.scatter([1, 2], [1, 2], c=[1, 2], label='scatter') + ax.legend() ax.set_ylabel('Y Label') ax.set_xlabel('X Label') cbar = fig_test.colorbar(sc, orientation='horizontal') cbar.set_label("Z Label") ax = fig_ref.subplots() - sc = ax.scatter([1, 2], [1, 2], c=[1, 2]) + sc = ax.scatter([1, 2], [1, 2], c=[1, 2], label='scatter') + ax.legend() ax.set_ylabel('Y Label', y=1, ha='right') ax.set_xlabel('X Label', x=1, ha='right') cbar = fig_ref.colorbar(sc, orientation='horizontal') diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 4326b74260cb..e1c8ecf07bfa 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -555,7 +555,7 @@ def set_3d_properties(self, zs, zdir): # depth-sorted version of that data into the private state used by the # base collection class in its draw method. # - # grab the current sizes and linewidths to preserve them + # Grab the current sizes and linewidths to preserve them. self._sizes3d = self._sizes self._linewidths3d = self._linewidths xs, ys, zs = self._offsets3d @@ -639,8 +639,8 @@ def get_facecolor(self): def get_edgecolor(self): # We need this check here to make sure we do not double-apply the depth - # based alpha shading when the edge color is "face" which means the - # edge colour should be identical to the face colour. + # based alpha shading when the edge color is "face" which means the + # edge colour should be identical to the face colour. if cbook._str_equal(self._edgecolors, 'face'): return self.get_facecolor() return self._maybe_depth_shade_and_sort_colors(super().get_edgecolor()) diff --git a/setup.cfg.template b/setup.cfg.template index f203e7d3d051..6b40f29fc217 100644 --- a/setup.cfg.template +++ b/setup.cfg.template @@ -10,7 +10,7 @@ license_files = LICENSE/* # often, and don't need the space saving/speedup. #enable_lto = True # By default, Matplotlib downloads and builds its own copies of FreeType and of -# of Qhull. You may set the following to True to instead link against a system +# Qhull. You may set the following to True to instead link against a system # FreeType/Qhull. As an exception, Matplotlib defaults to the system version # of FreeType on AIX. #system_freetype = False diff --git a/tools/cache_zenodo_svg.py b/tools/cache_zenodo_svg.py index 6a334a3bbd1b..d85c895592bc 100644 --- a/tools/cache_zenodo_svg.py +++ b/tools/cache_zenodo_svg.py @@ -62,6 +62,8 @@ def _get_xdg_cache_dir(): if __name__ == "__main__": data = { + "v3.4.1": "4649959", + "v3.4.0": "4638398", "v3.3.4": "4475376", "v3.3.3": "4268928", "v3.3.2": "4030140",