diff --git a/SECURITY.md b/SECURITY.md index ce022ca60a0f..4400a4501b51 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,14 +8,13 @@ versions. | Version | Supported | | ------- | ------------------ | +| 3.10.x | :white_check_mark: | | 3.9.x | :white_check_mark: | -| 3.8.x | :white_check_mark: | +| 3.8.x | :x: | | 3.7.x | :x: | | 3.6.x | :x: | | 3.5.x | :x: | -| 3.4.x | :x: | -| 3.3.x | :x: | -| < 3.3 | :x: | +| < 3.5 | :x: | ## Reporting a Vulnerability diff --git a/doc/_static/zenodo_cache/14249941.svg b/doc/_static/zenodo_cache/14249941.svg new file mode 100644 index 000000000000..f9165f17fdf0 --- /dev/null +++ b/doc/_static/zenodo_cache/14249941.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + DOI + + + DOI + + + 10.5281/zenodo.14249941 + + + 10.5281/zenodo.14249941 + + + \ No newline at end of file diff --git a/doc/_static/zenodo_cache/14436121.svg b/doc/_static/zenodo_cache/14436121.svg new file mode 100644 index 000000000000..1e4a7cd5b7a4 --- /dev/null +++ b/doc/_static/zenodo_cache/14436121.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + DOI + + + DOI + + + 10.5281/zenodo.14436121 + + + 10.5281/zenodo.14436121 + + + \ No newline at end of file diff --git a/doc/api/next_api_changes/behavior/26000-t.rst b/doc/api/next_api_changes/behavior/26000-t.rst deleted file mode 100644 index 054feb0887e6..000000000000 --- a/doc/api/next_api_changes/behavior/26000-t.rst +++ /dev/null @@ -1,5 +0,0 @@ -onselect argument to selector widgets made optional -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The *onselect* argument to `.EllipseSelector`, `.LassoSelector`, `.PolygonSelector`, and -`.RectangleSelector` is no longer required. diff --git a/doc/api/next_api_changes/behavior/27744-FM.rst b/doc/api/next_api_changes/behavior/27744-FM.rst deleted file mode 100644 index ae0d86336f81..000000000000 --- a/doc/api/next_api_changes/behavior/27744-FM.rst +++ /dev/null @@ -1,10 +0,0 @@ -``NavigationToolbar2.save_figure`` now returns filepath of saved figure -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``NavigationToolbar2.save_figure`` function may return the filename of the saved figure. - -If a backend implements this functionality it should return `None` -in the case where no figure is actually saved (because the user closed the dialog without saving). - -If the backend does not or can not implement this functionality (currently the Gtk4 backends -and webagg backends do not) this method will return ``NavigationToolbar2.UNKNOWN_SAVED_STATUS``. diff --git a/doc/api/next_api_changes/behavior/27833-JA.rst b/doc/api/next_api_changes/behavior/27833-JA.rst deleted file mode 100644 index 59323f56108f..000000000000 --- a/doc/api/next_api_changes/behavior/27833-JA.rst +++ /dev/null @@ -1,8 +0,0 @@ -SVG output: improved reproducibility -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Some SVG-format plots `produced different output on each render `__, even with a static ``svg.hashsalt`` value configured. - -The problem was a non-deterministic ID-generation scheme for clip paths; the fix introduces a repeatable, monotonically increasing integer ID scheme as a replacement. - -Provided that plots add clip paths themselves in deterministic order, this enables repeatable (a.k.a. reproducible, deterministic) SVG output. diff --git a/doc/api/next_api_changes/behavior/27891-ES.rst b/doc/api/next_api_changes/behavior/27891-ES.rst deleted file mode 100644 index f60b4b320a44..000000000000 --- a/doc/api/next_api_changes/behavior/27891-ES.rst +++ /dev/null @@ -1,5 +0,0 @@ -ft2font classes are now final -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The ft2font classes `.ft2font.FT2Font`, and `.ft2font.FT2Image` are now final -and can no longer be subclassed. diff --git a/doc/api/next_api_changes/behavior/27996-REC.rst b/doc/api/next_api_changes/behavior/27996-REC.rst deleted file mode 100644 index fe81a34073b8..000000000000 --- a/doc/api/next_api_changes/behavior/27996-REC.rst +++ /dev/null @@ -1,8 +0,0 @@ -``InsetIndicator`` artist -~~~~~~~~~~~~~~~~~~~~~~~~~ - -`~.Axes.indicate_inset` and `~.Axes.indicate_inset_zoom` now return an instance -of `~matplotlib.inset.InsetIndicator`. Use the -`~matplotlib.inset.InsetIndicator.rectangle` and -`~matplotlib.inset.InsetIndicator.connectors` properties of this artist to -access the objects that were previously returned directly. diff --git a/doc/api/next_api_changes/behavior/28061-JMK.rst b/doc/api/next_api_changes/behavior/28061-JMK.rst deleted file mode 100644 index e3ffb783b394..000000000000 --- a/doc/api/next_api_changes/behavior/28061-JMK.rst +++ /dev/null @@ -1,23 +0,0 @@ -``imshow`` *interpolation_stage* default changed to 'auto' -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The *interpolation_stage* parameter of `~.Axes.imshow` has a new default -value 'auto'. For images that are up-sampled less than a factor of -three or down-sampled, image interpolation will occur in 'rgba' space. For images -that are up-sampled by a factor of 3 or more, then image interpolation occurs -in 'data' space. - -The previous default was 'data', so down-sampled images may change subtly with -the new default. However, the new default also avoids floating point artifacts -at sharp boundaries in a colormap when down-sampling. - -The previous behavior can achieved by setting the *interpolation_stage* parameter -or :rc:`image.interpolation_stage` to 'data'. - -imshow default *interpolation* changed to 'auto' -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The *interpolation* parameter of `~.Axes.imshow` has a new default -value 'auto', changed from 'antialiased', for consistency with *interpolation_stage* -and because the interpolation is only anti-aliasing during down-sampling. Passing -'antialiased' still works, and behaves exactly the same as 'auto', but is discouraged. diff --git a/doc/api/next_api_changes/behavior/28156-AL.rst b/doc/api/next_api_changes/behavior/28156-AL.rst deleted file mode 100644 index af9c2b142261..000000000000 --- a/doc/api/next_api_changes/behavior/28156-AL.rst +++ /dev/null @@ -1,12 +0,0 @@ -dark_background and fivethirtyeight styles no longer set ``savefig.facecolor`` and ``savefig.edgecolor`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When using these styles, :rc:`savefig.facecolor` and :rc:`savefig.edgecolor` -now inherit the global default value of "auto", which means that the actual -figure colors will be used. Previously, these rcParams were set to the same -values as :rc:`figure.facecolor` and :rc:`figure.edgecolor`, i.e. a saved -figure would always use the theme colors even if the user manually overrode -them; this is no longer the case. - -This change should have no impact for users that do not manually set the figure -face and edge colors. diff --git a/doc/api/next_api_changes/behavior/28177-REC.rst b/doc/api/next_api_changes/behavior/28177-REC.rst deleted file mode 100644 index d7ea8ec0e947..000000000000 --- a/doc/api/next_api_changes/behavior/28177-REC.rst +++ /dev/null @@ -1,7 +0,0 @@ -(Sub)Figure.get_figure -~~~~~~~~~~~~~~~~~~~~~~ - -...in future will by default return the direct parent figure, which may be a SubFigure. -This will make the default behavior consistent with the -`~matplotlib.artist.Artist.get_figure` method of other artists. To control the -behavior, use the newly introduced *root* parameter. diff --git a/doc/api/next_api_changes/behavior/28354-YN.rst b/doc/api/next_api_changes/behavior/28354-YN.rst deleted file mode 100644 index 69c25575c516..000000000000 --- a/doc/api/next_api_changes/behavior/28354-YN.rst +++ /dev/null @@ -1,4 +0,0 @@ -Add zorder option in QuiverKey -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``zorder`` can be used as a keyword argument to `.QuiverKey`. Previously, -that parameter did not have any effect because the zorder was hard coded. diff --git a/doc/api/next_api_changes/behavior/28363-TS.rst b/doc/api/next_api_changes/behavior/28363-TS.rst deleted file mode 100644 index 2242f3929e04..000000000000 --- a/doc/api/next_api_changes/behavior/28363-TS.rst +++ /dev/null @@ -1,6 +0,0 @@ -Subfigures -~~~~~~~~~~ - -`.Figure.subfigures` are now added in row-major order to be consistent with -`.Figure.subplots`. The return value of `~.Figure.subfigures` is not changed, -but the order of ``fig.subfigs`` is. diff --git a/doc/api/next_api_changes/behavior/28375-MP.rst b/doc/api/next_api_changes/behavior/28375-MP.rst deleted file mode 100644 index 75d7f7cf5030..000000000000 --- a/doc/api/next_api_changes/behavior/28375-MP.rst +++ /dev/null @@ -1,5 +0,0 @@ -``transforms.AffineDeltaTransform`` updates correctly on axis limit changes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Before this change, transform sub-graphs with ``AffineDeltaTransform`` did not update correctly. -This PR ensures that changes to the child transform are passed through correctly. diff --git a/doc/api/next_api_changes/behavior/28501-OV.rst b/doc/api/next_api_changes/behavior/28501-OV.rst deleted file mode 100644 index cc816e55f696..000000000000 --- a/doc/api/next_api_changes/behavior/28501-OV.rst +++ /dev/null @@ -1,5 +0,0 @@ -The offset string associated with ConciseDateFormatter will now invert when the axis is inverted -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Previously, when the axis was inverted, the offset string associated with ConciseDateFormatter would not change, -so the offset string indicated the axis was oriented in the wrong direction. Now, when the axis is inverted, the offset -string is oriented correctly. diff --git a/doc/api/next_api_changes/behavior/28734-REC.rst b/doc/api/next_api_changes/behavior/28734-REC.rst deleted file mode 100644 index 825922f4fafb..000000000000 --- a/doc/api/next_api_changes/behavior/28734-REC.rst +++ /dev/null @@ -1,7 +0,0 @@ -``suptitle`` in compressed layout -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Compressed layout now automatically positions the `~.Figure.suptitle` just -above the top row of axes. To keep this title in its previous position, -either pass ``in_layout=False`` or explicitly set ``y=0.98`` in the -`~.Figure.suptitle` call. diff --git a/doc/api/next_api_changes/deprecations/27385-SS.rst b/doc/api/next_api_changes/deprecations/27385-SS.rst deleted file mode 100644 index b388ce22eb2b..000000000000 --- a/doc/api/next_api_changes/deprecations/27385-SS.rst +++ /dev/null @@ -1,3 +0,0 @@ -``proj3d.proj_transform_clip`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated with no replacement. diff --git a/doc/api/next_api_changes/deprecations/27786-TH.rst b/doc/api/next_api_changes/deprecations/27786-TH.rst deleted file mode 100644 index 6b66e0dba963..000000000000 --- a/doc/api/next_api_changes/deprecations/27786-TH.rst +++ /dev/null @@ -1,7 +0,0 @@ -Positional parameters in plotting functions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Many plotting functions will restrict positional arguments to the first few parameters -in the future. All further configuration parameters will have to be passed as keyword -arguments. This is to enforce better code and and allow for future changes with reduced -risk of breaking existing code. diff --git a/doc/api/next_api_changes/deprecations/28007-TH.rst b/doc/api/next_api_changes/deprecations/28007-TH.rst deleted file mode 100644 index cfaa329dd9e0..000000000000 --- a/doc/api/next_api_changes/deprecations/28007-TH.rst +++ /dev/null @@ -1,6 +0,0 @@ -Changing ``Figure.number`` -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Changing ``Figure.number`` is deprecated. This value is used by `.pyplot` -to identify figures. It must stay in sync with the pyplot internal state -and is not intended to be modified by the user. diff --git a/doc/api/next_api_changes/deprecations/28048-PR.rst b/doc/api/next_api_changes/deprecations/28048-PR.rst deleted file mode 100644 index 4e90a3aced19..000000000000 --- a/doc/api/next_api_changes/deprecations/28048-PR.rst +++ /dev/null @@ -1,4 +0,0 @@ -``PdfFile.hatchPatterns`` -~~~~~~~~~~~~~~~~~~~~~~~~~ - -... is deprecated. diff --git a/doc/api/next_api_changes/deprecations/28177-REC.rst b/doc/api/next_api_changes/deprecations/28177-REC.rst deleted file mode 100644 index a3e630630aeb..000000000000 --- a/doc/api/next_api_changes/deprecations/28177-REC.rst +++ /dev/null @@ -1,5 +0,0 @@ -(Sub)Figure.set_figure -~~~~~~~~~~~~~~~~~~~~~~ - -...is deprecated and in future will always raise an exception. The parent and -root figures of a (Sub)Figure are set at instantiation and cannot be changed. diff --git a/doc/api/next_api_changes/deprecations/28201-AT.rst b/doc/api/next_api_changes/deprecations/28201-AT.rst deleted file mode 100644 index 56205315a7c1..000000000000 --- a/doc/api/next_api_changes/deprecations/28201-AT.rst +++ /dev/null @@ -1,3 +0,0 @@ -``Poly3DCollection.get_vector`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... is deprecated with no replacement. diff --git a/doc/api/next_api_changes/deprecations/28670-TAC.rst b/doc/api/next_api_changes/deprecations/28670-TAC.rst deleted file mode 100644 index e970abf69d54..000000000000 --- a/doc/api/next_api_changes/deprecations/28670-TAC.rst +++ /dev/null @@ -1,6 +0,0 @@ -Deprecated ``register`` on ``matplotlib.patches._Styles`` and subclasses -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This class method is never used internally. Due to the internal check in the -method it only accepts subclasses of a private baseclass embedded in the host -class which makes it unlikely that it has been used externally. diff --git a/doc/api/next_api_changes/deprecations/28728-TH.rst b/doc/api/next_api_changes/deprecations/28728-TH.rst deleted file mode 100644 index 56d5a80b439c..000000000000 --- a/doc/api/next_api_changes/deprecations/28728-TH.rst +++ /dev/null @@ -1,10 +0,0 @@ -matplotlib.validate_backend -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -...is deprecated. Please use `matplotlib.rcsetup.validate_backend` instead. - - -matplotlib.sanitize_sequence -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -...is deprecated. Please use `matplotlib.cbook.sanitize_sequence` instead. diff --git a/doc/api/next_api_changes/deprecations/28842-ES.rst b/doc/api/next_api_changes/deprecations/28842-ES.rst deleted file mode 100644 index d88d3f7b9538..000000000000 --- a/doc/api/next_api_changes/deprecations/28842-ES.rst +++ /dev/null @@ -1,55 +0,0 @@ -ft2font module-level constants replaced by enums -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The `.ft2font`-level constants have been converted to `enum` classes, and all API using -them now take/return the new types. - -The following constants are now part of `.ft2font.Kerning` (without the ``KERNING_`` -prefix): - -- ``KERNING_DEFAULT`` -- ``KERNING_UNFITTED`` -- ``KERNING_UNSCALED`` - -The following constants are now part of `.ft2font.LoadFlags` (without the ``LOAD_`` -prefix): - -- ``LOAD_DEFAULT`` -- ``LOAD_NO_SCALE`` -- ``LOAD_NO_HINTING`` -- ``LOAD_RENDER`` -- ``LOAD_NO_BITMAP`` -- ``LOAD_VERTICAL_LAYOUT`` -- ``LOAD_FORCE_AUTOHINT`` -- ``LOAD_CROP_BITMAP`` -- ``LOAD_PEDANTIC`` -- ``LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH`` -- ``LOAD_NO_RECURSE`` -- ``LOAD_IGNORE_TRANSFORM`` -- ``LOAD_MONOCHROME`` -- ``LOAD_LINEAR_DESIGN`` -- ``LOAD_NO_AUTOHINT`` -- ``LOAD_TARGET_NORMAL`` -- ``LOAD_TARGET_LIGHT`` -- ``LOAD_TARGET_MONO`` -- ``LOAD_TARGET_LCD`` -- ``LOAD_TARGET_LCD_V`` - -The following constants are now part of `.ft2font.FaceFlags`: - -- ``EXTERNAL_STREAM`` -- ``FAST_GLYPHS`` -- ``FIXED_SIZES`` -- ``FIXED_WIDTH`` -- ``GLYPH_NAMES`` -- ``HORIZONTAL`` -- ``KERNING`` -- ``MULTIPLE_MASTERS`` -- ``SCALABLE`` -- ``SFNT`` -- ``VERTICAL`` - -The following constants are now part of `.ft2font.StyleFlags`: - -- ``ITALIC`` -- ``BOLD`` diff --git a/doc/api/next_api_changes/deprecations/28843-TH.rst b/doc/api/next_api_changes/deprecations/28843-TH.rst deleted file mode 100644 index 25dc91be3ccc..000000000000 --- a/doc/api/next_api_changes/deprecations/28843-TH.rst +++ /dev/null @@ -1,9 +0,0 @@ -FontProperties initialization -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`.FontProperties` initialization is limited to the two call patterns: - -- single positional parameter, interpreted as fontconfig pattern -- only keyword parameters for setting individual properties - -All other previously supported call patterns are deprecated. diff --git a/doc/api/next_api_changes/deprecations/28933-AL.rst b/doc/api/next_api_changes/deprecations/28933-AL.rst deleted file mode 100644 index b551c124b4e0..000000000000 --- a/doc/api/next_api_changes/deprecations/28933-AL.rst +++ /dev/null @@ -1,5 +0,0 @@ -``AxLine`` ``xy1`` and ``xy2`` setters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -These setters now each take a single argument, ``xy1`` or ``xy2`` as a tuple. -The old form, where ``x`` and ``y`` were passed as separate arguments, is -deprecated. diff --git a/doc/api/next_api_changes/deprecations/28946-TH.rst b/doc/api/next_api_changes/deprecations/28946-TH.rst deleted file mode 100644 index 6a2f09108686..000000000000 --- a/doc/api/next_api_changes/deprecations/28946-TH.rst +++ /dev/null @@ -1,6 +0,0 @@ -Calling ``pyplot.polar()`` with an existing non-polar Axes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This currently plots the data into the non-polar Axes, ignoring -the "polar" intention. This usage scenario is deprecated and -will raise an error in the future. diff --git a/doc/api/next_api_changes/deprecations/28967-ES.rst b/doc/api/next_api_changes/deprecations/28967-ES.rst deleted file mode 100644 index 8bb238def943..000000000000 --- a/doc/api/next_api_changes/deprecations/28967-ES.rst +++ /dev/null @@ -1,12 +0,0 @@ -Passing floating-point values to ``RendererAgg.draw_text_image`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Any floating-point values passed to the *x* and *y* parameters were truncated to integers -silently. This behaviour is now deprecated, and only `int` values should be used. - -Passing floating-point values to ``FT2Image`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Any floating-point values passed to the `.FT2Image` constructor, or the *x0*, *y0*, *x1*, -and *y1* parameters of `.FT2Image.draw_rect_filled` were truncated to integers silently. -This behaviour is now deprecated, and only `int` values should be used. diff --git a/doc/api/next_api_changes/development/28289-ES.rst b/doc/api/next_api_changes/development/28289-ES.rst deleted file mode 100644 index f891c63a64bf..000000000000 --- a/doc/api/next_api_changes/development/28289-ES.rst +++ /dev/null @@ -1,7 +0,0 @@ -Documentation-specific custom Sphinx roles are now semi-public -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For third-party packages that derive types from Matplotlib, our use of custom roles may -prevent Sphinx from building their docs. These custom Sphinx roles are now public solely -for the purposes of use within projects that derive from Matplotlib types. See -:mod:`matplotlib.sphinxext.roles` for details. diff --git a/doc/api/next_api_changes/removals/20866-JKS.rst b/doc/api/next_api_changes/removals/20866-JKS.rst deleted file mode 100644 index 45878dc38e16..000000000000 --- a/doc/api/next_api_changes/removals/20866-JKS.rst +++ /dev/null @@ -1,7 +0,0 @@ -ttconv removed -~~~~~~~~~~~~~~ - -The ``matplotlib._ttconv`` extension has been removed. Most of its -functionality was already replaced by other code, and the only thing left -was embedding TTF fonts in PostScript in Type 42 format. This is now -done in the PS backend using the FontTools library. diff --git a/doc/api/next_api_changes/removals/27218-TAC.rst b/doc/api/next_api_changes/removals/27218-TAC.rst deleted file mode 100644 index ac69e8a96a26..000000000000 --- a/doc/api/next_api_changes/removals/27218-TAC.rst +++ /dev/null @@ -1,7 +0,0 @@ -Remove hard reference to ``lastevent`` in ``LocationEvent`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -This was previously used to detect exiting from axes, however the hard -reference would keep closed `.Figure` objects and their children alive longer -than expected. diff --git a/doc/api/next_api_changes/removals/27891-ES.rst b/doc/api/next_api_changes/removals/27891-ES.rst deleted file mode 100644 index cb658e9bc671..000000000000 --- a/doc/api/next_api_changes/removals/27891-ES.rst +++ /dev/null @@ -1,4 +0,0 @@ -``ft2font.FT2Image.draw_rect`` and ``ft2font.FT2Font.get_xys`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... have been removed as they are unused. diff --git a/doc/api/next_api_changes/removals/28183-OG.rst b/doc/api/next_api_changes/removals/28183-OG.rst deleted file mode 100644 index 55745e47809a..000000000000 --- a/doc/api/next_api_changes/removals/28183-OG.rst +++ /dev/null @@ -1,62 +0,0 @@ -``Tick.set_label``, ``Tick.set_label1`` and ``Tick.set_label2`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... are removed. Calling these methods from third-party code usually had no -effect, as the labels are overwritten at draw time by the tick formatter. - - -Functions in ``mpl_toolkits.mplot3d.proj3d`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The function ``transform`` is just an alias for ``proj_transform``, -use the latter instead. - -The following functions were either unused (so no longer required in Matplotlib) -or considered private. - -* ``ortho_transformation`` -* ``persp_transformation`` -* ``proj_points`` -* ``proj_trans_points`` -* ``rot_x`` -* ``rotation_about_vector`` -* ``view_transformation`` - - -Arguments other than ``renderer`` to ``get_tightbbox`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... are keyword-only arguments. This is for consistency and that -different classes have different additional arguments. - - -Method parameters renamed to match base classes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The only parameter of ``transform_affine`` and ``transform_non_affine`` in ``Transform`` subclasses is renamed -to *values*. - -The *points* parameter of ``transforms.IdentityTransform.transform`` is renamed to *values*. - -The *trans* parameter of ``table.Cell.set_transform`` is renamed to *t* consistently with -`.Artist.set_transform`. - -The *clippath* parameters of ``axis.Axis.set_clip_path`` and ``axis.Tick.set_clip_path`` are -renamed to *path* consistently with `.Artist.set_clip_path`. - -The *s* parameter of ``images.NonUniformImage.set_filternorm`` is renamed to *filternorm* -consistently with ``_ImageBase.set_filternorm``. - -The *s* parameter of ``images.NonUniformImage.set_filterrad`` is renamed to *filterrad* -consistently with ``_ImageBase.set_filterrad``. - -The only parameter of ``Annotation.contains`` and ``Legend.contains`` is renamed to *mouseevent* -consistently with `.Artist.contains`. - -Method parameters renamed -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The *p* parameter of ``BboxBase.padded`` is renamed to *w_pad*, consistently with the other parameter, *h_pad* - -*numdecs* parameter and attribute of ``LogLocator`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -... are removed without replacement, because they had no effect. diff --git a/doc/api/next_api_changes/removals/28492-GML.rst b/doc/api/next_api_changes/removals/28492-GML.rst deleted file mode 100644 index 953b01b9489f..000000000000 --- a/doc/api/next_api_changes/removals/28492-GML.rst +++ /dev/null @@ -1,9 +0,0 @@ -The ``PolyQuadMesh`` class requires full 2D arrays of values -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Previously, if a masked array was input, the list of polygons within the collection -would shrink to the size of valid polygons and users were required to keep track of -which polygons were drawn and call ``set_array()`` with the smaller "compressed" -array size. Passing the "compressed" and flattened array values will no longer -work and the full 2D array of values (including the mask) should be passed -to `.PolyQuadMesh.set_array`. diff --git a/doc/api/next_api_changes/removals/28767-REC.rst b/doc/api/next_api_changes/removals/28767-REC.rst deleted file mode 100644 index a06d78245761..000000000000 --- a/doc/api/next_api_changes/removals/28767-REC.rst +++ /dev/null @@ -1,31 +0,0 @@ -``ContourSet.collections`` -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... has been removed. `~.ContourSet` is now implemented as a single -`~.Collection` of paths, each path corresponding to a contour level, possibly -including multiple unconnected components. - -``ContourSet.antialiased`` -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... has been removed. Use `~.Collection.get_antialiased` or -`~.Collection.set_antialiased` instead. Note that `~.Collection.get_antialiased` -returns an array. - -``tcolors`` and ``tlinewidths`` attributes of ``ContourSet`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... have been removed. Use `~.Collection.get_facecolor`, `~.Collection.get_edgecolor` -or `~.Collection.get_linewidths` instead. - - -``calc_label_rot_and_inline`` method of ``ContourLabeler`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... has been removed without replacement. - - -``add_label_clabeltext`` method of ``ContourLabeler`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -... has been removed. Use `~.ContourLabeler.add_label` instead. diff --git a/doc/api/prev_api_changes/api_changes_3.10.0.rst b/doc/api/prev_api_changes/api_changes_3.10.0.rst new file mode 100644 index 000000000000..83bde66213f3 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.10.0.rst @@ -0,0 +1,14 @@ +API Changes for 3.10.0 +====================== + +.. contents:: + :local: + :depth: 1 + +.. include:: /api/prev_api_changes/api_changes_3.10.0/behaviour.rst + +.. include:: /api/prev_api_changes/api_changes_3.10.0/deprecations.rst + +.. include:: /api/prev_api_changes/api_changes_3.10.0/removals.rst + +.. include:: /api/prev_api_changes/api_changes_3.10.0/development.rst diff --git a/doc/api/prev_api_changes/api_changes_3.10.0/behavior.rst b/doc/api/prev_api_changes/api_changes_3.10.0/behavior.rst new file mode 100644 index 000000000000..87da6568a860 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.10.0/behavior.rst @@ -0,0 +1,118 @@ +onselect argument to selector widgets made optional +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *onselect* argument to `.EllipseSelector`, `.LassoSelector`, `.PolygonSelector`, and +`.RectangleSelector` is no longer required. + +``NavigationToolbar2.save_figure`` now returns filepath of saved figure +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``NavigationToolbar2.save_figure`` function may return the filename of the saved figure. + +If a backend implements this functionality it should return `None` +in the case where no figure is actually saved (because the user closed the dialog without saving). + +If the backend does not or can not implement this functionality (currently the Gtk4 backends +and webagg backends do not) this method will return ``NavigationToolbar2.UNKNOWN_SAVED_STATUS``. + +SVG output: improved reproducibility +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Some SVG-format plots `produced different output on each render `__, even with a static ``svg.hashsalt`` value configured. + +The problem was a non-deterministic ID-generation scheme for clip paths; the fix introduces a repeatable, monotonically increasing integer ID scheme as a replacement. + +Provided that plots add clip paths themselves in deterministic order, this enables repeatable (a.k.a. reproducible, deterministic) SVG output. + +ft2font classes are now final +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ft2font classes `.ft2font.FT2Font`, and `.ft2font.FT2Image` are now final +and can no longer be subclassed. + +``InsetIndicator`` artist +~~~~~~~~~~~~~~~~~~~~~~~~~ + +`~.Axes.indicate_inset` and `~.Axes.indicate_inset_zoom` now return an instance +of `~matplotlib.inset.InsetIndicator`. Use the +`~matplotlib.inset.InsetIndicator.rectangle` and +`~matplotlib.inset.InsetIndicator.connectors` properties of this artist to +access the objects that were previously returned directly. + +``imshow`` *interpolation_stage* default changed to 'auto' +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *interpolation_stage* parameter of `~.Axes.imshow` has a new default +value 'auto'. For images that are up-sampled less than a factor of +three or down-sampled, image interpolation will occur in 'rgba' space. For images +that are up-sampled by a factor of 3 or more, then image interpolation occurs +in 'data' space. + +The previous default was 'data', so down-sampled images may change subtly with +the new default. However, the new default also avoids floating point artifacts +at sharp boundaries in a colormap when down-sampling. + +The previous behavior can achieved by setting the *interpolation_stage* parameter +or :rc:`image.interpolation_stage` to 'data'. + +imshow default *interpolation* changed to 'auto' +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *interpolation* parameter of `~.Axes.imshow` has a new default +value 'auto', changed from 'antialiased', for consistency with *interpolation_stage* +and because the interpolation is only anti-aliasing during down-sampling. Passing +'antialiased' still works, and behaves exactly the same as 'auto', but is discouraged. + +dark_background and fivethirtyeight styles no longer set ``savefig.facecolor`` and ``savefig.edgecolor`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When using these styles, :rc:`savefig.facecolor` and :rc:`savefig.edgecolor` +now inherit the global default value of "auto", which means that the actual +figure colors will be used. Previously, these rcParams were set to the same +values as :rc:`figure.facecolor` and :rc:`figure.edgecolor`, i.e. a saved +figure would always use the theme colors even if the user manually overrode +them; this is no longer the case. + +This change should have no impact for users that do not manually set the figure +face and edge colors. + +Add zorder option in QuiverKey +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``zorder`` can be used as a keyword argument to `.QuiverKey`. Previously, +that parameter did not have any effect because the zorder was hard coded. + +Subfigures +~~~~~~~~~~ + +`.Figure.subfigures` are now added in row-major order to be consistent with +`.Figure.subplots`. The return value of `~.Figure.subfigures` is not changed, +but the order of ``fig.subfigs`` is. + +(Sub)Figure.get_figure +~~~~~~~~~~~~~~~~~~~~~~ + +...in future will by default return the direct parent figure, which may be a SubFigure. +This will make the default behavior consistent with the +`~matplotlib.artist.Artist.get_figure` method of other artists. To control the +behavior, use the newly introduced *root* parameter. + + +``transforms.AffineDeltaTransform`` updates correctly on axis limit changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before this change, transform sub-graphs with ``AffineDeltaTransform`` did not update correctly. +This PR ensures that changes to the child transform are passed through correctly. + +The offset string associated with ConciseDateFormatter will now invert when the axis is inverted +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Previously, when the axis was inverted, the offset string associated with ConciseDateFormatter would not change, +so the offset string indicated the axis was oriented in the wrong direction. Now, when the axis is inverted, the offset +string is oriented correctly. + +``suptitle`` in compressed layout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Compressed layout now automatically positions the `~.Figure.suptitle` just +above the top row of axes. To keep this title in its previous position, +either pass ``in_layout=False`` or explicitly set ``y=0.98`` in the +`~.Figure.suptitle` call. diff --git a/doc/api/prev_api_changes/api_changes_3.10.0/deprecations.rst b/doc/api/prev_api_changes/api_changes_3.10.0/deprecations.rst new file mode 100644 index 000000000000..ad344b37d069 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.10.0/deprecations.rst @@ -0,0 +1,164 @@ +Positional parameters in plotting functions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Many plotting functions will restrict positional arguments to the first few parameters +in the future. All further configuration parameters will have to be passed as keyword +arguments. This is to enforce better code and and allow for future changes with reduced +risk of breaking existing code. +Changing ``Figure.number`` +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Changing ``Figure.number`` is deprecated. This value is used by `.pyplot` +to identify figures. It must stay in sync with the pyplot internal state +and is not intended to be modified by the user. + +``PdfFile.hatchPatterns`` +~~~~~~~~~~~~~~~~~~~~~~~~~ + +... is deprecated. + +(Sub)Figure.set_figure +~~~~~~~~~~~~~~~~~~~~~~ + +...is deprecated and in future will always raise an exception. The parent and +root figures of a (Sub)Figure are set at instantiation and cannot be changed. + +``Poly3DCollection.get_vector`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... is deprecated with no replacement. + +Deprecated ``register`` on ``matplotlib.patches._Styles`` and subclasses +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This class method is never used internally. Due to the internal check in the +method it only accepts subclasses of a private baseclass embedded in the host +class which makes it unlikely that it has been used externally. + +matplotlib.validate_backend +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +...is deprecated. Please use `matplotlib.rcsetup.validate_backend` instead. + + +matplotlib.sanitize_sequence +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +...is deprecated. Please use `matplotlib.cbook.sanitize_sequence` instead. + +ft2font module-level constants replaced by enums +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `.ft2font`-level constants have been converted to `enum` classes, and all API using +them now take/return the new types. + +The following constants are now part of `.ft2font.Kerning` (without the ``KERNING_`` +prefix): + +- ``KERNING_DEFAULT`` +- ``KERNING_UNFITTED`` +- ``KERNING_UNSCALED`` + +The following constants are now part of `.ft2font.LoadFlags` (without the ``LOAD_`` +prefix): + +- ``LOAD_DEFAULT`` +- ``LOAD_NO_SCALE`` +- ``LOAD_NO_HINTING`` +- ``LOAD_RENDER`` +- ``LOAD_NO_BITMAP`` +- ``LOAD_VERTICAL_LAYOUT`` +- ``LOAD_FORCE_AUTOHINT`` +- ``LOAD_CROP_BITMAP`` +- ``LOAD_PEDANTIC`` +- ``LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH`` +- ``LOAD_NO_RECURSE`` +- ``LOAD_IGNORE_TRANSFORM`` +- ``LOAD_MONOCHROME`` +- ``LOAD_LINEAR_DESIGN`` +- ``LOAD_NO_AUTOHINT`` +- ``LOAD_TARGET_NORMAL`` +- ``LOAD_TARGET_LIGHT`` +- ``LOAD_TARGET_MONO`` +- ``LOAD_TARGET_LCD`` +- ``LOAD_TARGET_LCD_V`` + +The following constants are now part of `.ft2font.FaceFlags`: + +- ``EXTERNAL_STREAM`` +- ``FAST_GLYPHS`` +- ``FIXED_SIZES`` +- ``FIXED_WIDTH`` +- ``GLYPH_NAMES`` +- ``HORIZONTAL`` +- ``KERNING`` +- ``MULTIPLE_MASTERS`` +- ``SCALABLE`` +- ``SFNT`` +- ``VERTICAL`` + +The following constants are now part of `.ft2font.StyleFlags`: + +- ``ITALIC`` +- ``BOLD`` + +FontProperties initialization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.FontProperties` initialization is limited to the two call patterns: + +- single positional parameter, interpreted as fontconfig pattern +- only keyword parameters for setting individual properties + +All other previously supported call patterns are deprecated. + +``AxLine`` ``xy1`` and ``xy2`` setters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +These setters now each take a single argument, ``xy1`` or ``xy2`` as a tuple. +The old form, where ``x`` and ``y`` were passed as separate arguments, is +deprecated. + +Calling ``pyplot.polar()`` with an existing non-polar Axes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This currently plots the data into the non-polar Axes, ignoring +the "polar" intention. This usage scenario is deprecated and +will raise an error in the future. + +Passing floating-point values to ``RendererAgg.draw_text_image`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Any floating-point values passed to the *x* and *y* parameters were truncated to integers +silently. This behaviour is now deprecated, and only `int` values should be used. + +Passing floating-point values to ``FT2Image`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Any floating-point values passed to the `.FT2Image` constructor, or the *x0*, *y0*, *x1*, +and *y1* parameters of `.FT2Image.draw_rect_filled` were truncated to integers silently. +This behaviour is now deprecated, and only `int` values should be used. + +``boxplot`` and ``bxp`` *vert* parameter, and ``rcParams["boxplot.vertical"]`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The parameter *vert: bool* has been deprecated on `~.Axes.boxplot` and +`~.Axes.bxp`. It is replaced by *orientation: {"vertical", "horizontal"}* +for API consistency. + +``rcParams["boxplot.vertical"]``, which controlled the orientation of ``boxplot``, +is deprecated without replacement. + +This deprecation is currently marked as pending and will be fully deprecated in Matplotlib 3.11. + +``violinplot`` and ``violin`` *vert* parameter +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The parameter *vert: bool* has been deprecated on `~.Axes.violinplot` and +`~.Axes.violin`. +It will be replaced by *orientation: {"vertical", "horizontal"}* for API +consistency. + +This deprecation is currently marked as pending and will be fully deprecated in Matplotlib 3.11. + +``proj3d.proj_transform_clip`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... is deprecated with no replacement. diff --git a/doc/api/next_api_changes/development/28503-ES.rst b/doc/api/prev_api_changes/api_changes_3.10.0/development.rst similarity index 56% rename from doc/api/next_api_changes/development/28503-ES.rst rename to doc/api/prev_api_changes/api_changes_3.10.0/development.rst index e9b109cb8515..58ece9877912 100644 --- a/doc/api/next_api_changes/development/28503-ES.rst +++ b/doc/api/prev_api_changes/api_changes_3.10.0/development.rst @@ -1,3 +1,11 @@ +Documentation-specific custom Sphinx roles are now semi-public +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For third-party packages that derive types from Matplotlib, our use of custom roles may +prevent Sphinx from building their docs. These custom Sphinx roles are now public solely +for the purposes of use within projects that derive from Matplotlib types. See +:mod:`matplotlib.sphinxext.roles` for details. + Increase to minimum supported versions of dependencies ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/api/next_api_changes/removals/28874-ES.rst b/doc/api/prev_api_changes/api_changes_3.10.0/removals.rst similarity index 58% rename from doc/api/next_api_changes/removals/28874-ES.rst rename to doc/api/prev_api_changes/api_changes_3.10.0/removals.rst index dbd8778dead1..e535123c7016 100644 --- a/doc/api/next_api_changes/removals/28874-ES.rst +++ b/doc/api/prev_api_changes/api_changes_3.10.0/removals.rst @@ -1,3 +1,126 @@ +ttconv removed +~~~~~~~~~~~~~~ + +The ``matplotlib._ttconv`` extension has been removed. Most of its +functionaliy was already replaced by other code, and the only thing left +was embedding TTF fonts in PostScript in Type 42 format. This is now +done in the PS backend using the FontTools library. + +Remove hard reference to ``lastevent`` in ``LocationEvent`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +This was previously used to detect exiting from axes, however the hard +reference would keep closed `.Figure` objects and their children alive longer +than expected. + +``ft2font.FT2Image.draw_rect`` and ``ft2font.FT2Font.get_xys`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... have been removed as they are unused. + +``Tick.set_label``, ``Tick.set_label1`` and ``Tick.set_label2`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... are removed. Calling these methods from third-party code usually had no +effect, as the labels are overwritten at draw time by the tick formatter. + + +Functions in ``mpl_toolkits.mplot3d.proj3d`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The function ``transform`` is just an alias for ``proj_transform``, +use the latter instead. + +The following functions were either unused (so no longer required in Matplotlib) +or considered private. + +* ``ortho_transformation`` +* ``persp_transformation`` +* ``proj_points`` +* ``proj_trans_points`` +* ``rot_x`` +* ``rotation_about_vector`` +* ``view_transformation`` + + +Arguments other than ``renderer`` to ``get_tightbbox`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... are keyword-only arguments. This is for consistency and that +different classes have different additional arguments. + + +Method parameters renamed to match base classes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The only parameter of ``transform_affine`` and ``transform_non_affine`` in ``Transform`` subclasses is renamed +to *values*. + +The *points* parameter of ``transforms.IdentityTransform.transform`` is renamed to *values*. + +The *trans* parameter of ``table.Cell.set_transform`` is renamed to *t* consistently with +`.Artist.set_transform`. + +The *clippath* parameters of ``axis.Axis.set_clip_path`` and ``axis.Tick.set_clip_path`` are +renamed to *path* consistently with `.Artist.set_clip_path`. + +The *s* parameter of ``images.NonUniformImage.set_filternorm`` is renamed to *filternorm* +consistently with ``_ImageBase.set_filternorm``. + +The *s* parameter of ``images.NonUniformImage.set_filterrad`` is renamed to *filterrad* +consistently with ``_ImageBase.set_filterrad``. + +The only parameter of ``Annotation.contains`` and ``Legend.contains`` is renamed to *mouseevent* +consistently with `.Artist.contains`. + +Method parameters renamed +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *p* parameter of ``BboxBase.padded`` is renamed to *w_pad*, consistently with the other parameter, *h_pad* + +*numdecs* parameter and attribute of ``LogLocator`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... are removed without replacement, because they had no effect. +The ``PolyQuadMesh`` class requires full 2D arrays of values +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Previously, if a masked array was input, the list of polygons within the collection +would shrink to the size of valid polygons and users were required to keep track of +which polygons were drawn and call ``set_array()`` with the smaller "compressed" +array size. Passing the "compressed" and flattened array values will no longer +work and the full 2D array of values (including the mask) should be passed +to `.PolyQuadMesh.set_array`. +``ContourSet.collections`` +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... has been removed. `~.ContourSet` is now implemented as a single +`~.Collection` of paths, each path corresponding to a contour level, possibly +including multiple unconnected components. + +``ContourSet.antialiased`` +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... has been removed. Use `~.Collection.get_antialiased` or +`~.Collection.set_antialiased` instead. Note that `~.Collection.get_antialiased` +returns an array. + +``tcolors`` and ``tlinewidths`` attributes of ``ContourSet`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... have been removed. Use `~.Collection.get_facecolor`, `~.Collection.get_edgecolor` +or `~.Collection.get_linewidths` instead. + + +``calc_label_rot_and_inline`` method of ``ContourLabeler`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... has been removed without replacement. + + +``add_label_clabeltext`` method of ``ContourLabeler`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +... has been removed. Use `~.ContourLabeler.add_label` instead. Passing extra positional arguments to ``Figure.add_axes`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/install/dependencies.rst b/doc/install/dependencies.rst index 4f8618921a0c..f01635d12367 100644 --- a/doc/install/dependencies.rst +++ b/doc/install/dependencies.rst @@ -434,5 +434,5 @@ process will raise various warnings. * `Inkscape `_ * `optipng `_ -* the font `xkcd script `_ or `Comic Neue `_ +* the font `xkcd script `_ or `Comic Neue `_ * the font "Times New Roman" diff --git a/doc/project/citing.rst b/doc/project/citing.rst index 38c989fca195..be58473a26e4 100644 --- a/doc/project/citing.rst +++ b/doc/project/citing.rst @@ -32,6 +32,12 @@ By version .. START OF AUTOGENERATED +v3.9.4 + .. image:: ../_static/zenodo_cache/14436121.svg + :target: https://doi.org/10.5281/zenodo.14436121 +v3.9.3 + .. image:: ../_static/zenodo_cache/14249941.svg + :target: https://doi.org/10.5281/zenodo.14249941 v3.9.2 .. image:: ../_static/zenodo_cache/13308876.svg :target: https://doi.org/10.5281/zenodo.13308876 diff --git a/doc/users/github_stats.rst b/doc/users/github_stats.rst index d357a6759d30..c12a983aa6a8 100644 --- a/doc/users/github_stats.rst +++ b/doc/users/github_stats.rst @@ -1,99 +1,590 @@ .. _github-stats: -GitHub statistics for 3.9.2 (Aug 12, 2024) -========================================== +GitHub statistics for 3.10.0 (Dec 13, 2024) +=========================================== -GitHub statistics for 2024/07/04 (tag: v3.9.1) - 2024/08/12 +GitHub statistics for 2024/05/15 (tag: v3.9.0) - 2024/12/13 These lists are automatically generated, and may be incomplete or contain duplicates. -We closed 9 issues and merged 45 pull requests. -The full list can be seen `on GitHub `__ +We closed 100 issues and merged 337 pull requests. +The full list can be seen `on GitHub `__ -The following 20 authors contributed 67 commits. +The following 128 authors contributed 1932 commits. +* abhi-jha * Adam J. Stewart +* Aditi Gautam +* Aditya Vidyadhar Kamath +* Aishling Cooke +* Alan +* Alan Sosa +* Alice +* Aman Nijjar +* Ammar Qazi +* Ancheng +* anpaulan +* Anson0028 * Anthony Lee +* anTon +* Antony Lee +* Ayoub Gouasmi +* Brigitta Sipőcz * Caitlin Hathaway +* cesar +* Charlie LeWarne +* Christian Mattsson * ClarkeAC +* Clemens Brunner +* Clement Gilli +* cmp0xff +* Costa Paraskevopoulos +* dale +* Dani Pinyol +* Daniel Weiss +* Danny +* David Bakaj +* David Lowry-Duda +* David Meyer +* David Stansby +* dbakaj * dependabot[bot] +* Diogo Cardoso +* Doron Behar +* Edgar Andrés Margffoy Tuay * Elliott Sales de Andrade +* Eytan Adler +* farquh +* Felipe Cybis Pereira * Filippo Balzaretti +* FMasson +* Francisco Cardozo +* Gavin S * Greg Lucas +* haaris * hannah * Ian Thomas +* Illviljan +* James Addison +* James Spencer * Jody Klymak +* john +* Jonas Eschle +* Jouni K. Seppänen +* juanis2112 +* Juanita Gomez +* Justin Hendrick +* K900 +* Kaustbh +* Kaustubh +* Kherim Willems * Kyle Sunden +* Kyra Cho +* Larry Bradley +* litchi +* Lorenzo +* Lucx33 +* Lumberbot (aka Jack) +* MadPhysicist +* malhar2460 +* Martino Sorbaro +* Mathias Hauser +* Matthew Feickert +* Matthew Petroff +* Melissa Weber Mendonça +* Michael +* Michael Droettboom +* Michael Hinton +* MischaMegens2 +* Moritz Wolter +* muchojp +* Nabil +* nakamura yuki +* odile +* OdileVidrine * Oscar Gustafsson +* Panicks28 +* Paul An +* Pedro Barão +* PedroBittarBarao +* Peter Talley +* Pierre-antoine Comby +* Pranav +* Pranav Raghu +* pre-commit-ci[bot] +* proximalf +* r3kste * Randolf Scholz * Refael Ackermann +* RickyP24 +* rnhmjoj * Ruth Comer +* Ryan May +* Sai Chaitanya, Sanivada +* saranti +* scaccol * Scott Shambaugh * Sean Smith +* Simon May +* simond07 +* smcgrawDotNet +* Takumasa N +* Takumasa N. +* Takumasa Nakamura +* thiagoluisbecker * Thomas A Caswell +* Tiago Lubiana * Tim Hoffmann +* trananso +* Trygve Magnus Ræder +* Victor Liu +* vittoboa +* Xeniya Shoiko GitHub issues and pull requests: -Pull Requests (45): +Pull Requests (337): -* :ghpull:`28687`: BLD: Include MSVCP140 runtime statically -* :ghpull:`28679`: Run delvewheel with path to required msvcp140.dll -* :ghpull:`28695`: Backport PR #27797 on branch v3.9.x (DOC: Use video files for saving animations) -* :ghpull:`28688`: Backport PR #28293 and #28668: Enable 3.13 wheels and bump cibuildwheel -* :ghpull:`27797`: DOC: Use video files for saving animations -* :ghpull:`28692`: Backport PR #28632 on branch v3.9.x (DOC: Tell sphinx-gallery to link mpl_toolkits from our build) -* :ghpull:`28632`: DOC: Tell sphinx-gallery to link mpl_toolkits from our build -* :ghpull:`28668`: Bump the actions group with 2 updates -* :ghpull:`28686`: Backport PR #28682 on branch v3.9.x (Fix warnings from mingw compilers) -* :ghpull:`28682`: Fix warnings from mingw compilers -* :ghpull:`28676`: Backport PR #28577 on branch v3.9.x (Copy all internals from initial Tick to lazy ones) -* :ghpull:`28577`: Copy all internals from initial Tick to lazy ones -* :ghpull:`28674`: Backport PR #28650 on branch v3.9.x (remove out of date todos on animation.py) -* :ghpull:`28650`: remove out of date todos on animation.py -* :ghpull:`28656`: Backport PR #28649 on branch v3.9.x (FIX: improve formatting of image values in cases of singular norms) -* :ghpull:`28665`: Backport PR #28546 on branch v3.9.x (DOC: Clarify/simplify example of multiple images with one colorbar) -* :ghpull:`28649`: FIX: improve formatting of image values in cases of singular norms -* :ghpull:`28635`: BLD: windows wheels -* :ghpull:`28645`: Backport PR #28644 on branch v3.9.x (DOC: Fix matching for version switcher) -* :ghpull:`28640`: Backport PR #28634 on branch v3.9.x (Closed open div tag in color.ColorMap._repr_html_) -* :ghpull:`28634`: Closed open div tag in color.ColorMap._repr_html_ -* :ghpull:`28636`: Backport PR #28625 on branch v3.9.x (added typing_extensions.Self to _AxesBase.twinx) -* :ghpull:`28625`: added typing_extensions.Self to _AxesBase.twinx -* :ghpull:`28622`: Backport PR #28621 on branch v3.9.x (TYP: Fix a typo in animation.pyi) -* :ghpull:`28621`: TYP: Fix a typo in animation.pyi -* :ghpull:`28605`: Backport PR #28604 on branch v3.9.x (cycler signature update.) -* :ghpull:`28604`: cycler signature update. -* :ghpull:`28598`: Pin PyQt6 back on Ubuntu 20.04 -* :ghpull:`28596`: Backport PR #28518 on branch v3.9.x ([TYP] Fix overload of ``pyplot.subplots``) -* :ghpull:`28518`: [TYP] Fix overload of ``pyplot.subplots`` -* :ghpull:`28591`: Backport PR #28580 on branch v3.9.x (Bump actions/attest-build-provenance from 1.3.2 to 1.3.3 in the actions group) -* :ghpull:`28580`: Bump actions/attest-build-provenance from 1.3.2 to 1.3.3 in the actions group -* :ghpull:`28586`: Backport PR #28582 on branch v3.9.x (FIX: make sticky edge tolerance relative to data range) -* :ghpull:`28582`: FIX: make sticky edge tolerance relative to data range -* :ghpull:`28572`: Backport PR #28571 on branch v3.9.x (DOC: Add version directive to hatch parameter in stackplot) -* :ghpull:`28571`: DOC: Add version directive to hatch parameter in stackplot -* :ghpull:`28564`: Backport PR #28534 on branch v3.9.x ([BLD] Fix WSL build warning) -* :ghpull:`28563`: Backport PR #28526 on branch v3.9.x (Bump pypa/cibuildwheel from 2.19.1 to 2.19.2 in the actions group) -* :ghpull:`28534`: [BLD] Fix WSL build warning -* :ghpull:`28526`: Bump pypa/cibuildwheel from 2.19.1 to 2.19.2 in the actions group -* :ghpull:`28552`: Backport PR #28541 on branch v3.9.x (MNT: be more careful about disk I/O failures when writing font cache) -* :ghpull:`28541`: MNT: be more careful about disk I/O failures when writing font cache -* :ghpull:`28524`: Backport PR #28523 on branch v3.9.x (Fix value error when set widget size to zero while using FigureCanvasQT ) -* :ghpull:`28523`: Fix value error when set widget size to zero while using FigureCanvasQT -* :ghpull:`28519`: Backport PR #28517 on branch v3.9.x (DOC: better cross referencing for animations) +* :ghpull:`29299`: Merge v3.9.x into v3.10.x +* :ghpull:`29296`: Backport PR #29295 on branch v3.10.x (BLD: Pin meson-python to <0.17.0) +* :ghpull:`29290`: Backport PR #29254 on branch v3.10.x (DOC: Add note to align_labels()) +* :ghpull:`29289`: Backport PR #29260 on branch v3.10.x (DOC: Better explanation of rcParams "patch.edgecolor" and "patch.force_edgecolor") +* :ghpull:`29288`: Backport PR #29285 on branch v3.10.x (Retarget PR#29175 to main) +* :ghpull:`29254`: DOC: Add note to align_labels() +* :ghpull:`29260`: DOC: Better explanation of rcParams "patch.edgecolor" and "patch.force_edgecolor" +* :ghpull:`29285`: Retarget PR#29175 to main +* :ghpull:`29286`: Backport PR #29274 on branch v3.10.x (Bump the actions group across 1 directory with 2 updates) +* :ghpull:`29274`: Bump the actions group across 1 directory with 2 updates +* :ghpull:`29283`: Backport PR #29272 on branch v3.10.x (DOC: Add section on translating between Axes and pyplot interface) +* :ghpull:`29272`: DOC: Add section on translating between Axes and pyplot interface +* :ghpull:`29279`: Backport PR #29265 on branch v3.10.x (DOC: Slightly improve the LineCollection docstring) +* :ghpull:`29276`: Backport PR #29247 on branch v3.10.x (Fix building freetype 2.6.1 on macOS clang 18) +* :ghpull:`29244`: Switch to a 3d rotation trackball implementation with path independence +* :ghpull:`29265`: DOC: Slightly improve the LineCollection docstring +* :ghpull:`29247`: Fix building freetype 2.6.1 on macOS clang 18 +* :ghpull:`29268`: Bump the actions group with 2 updates +* :ghpull:`29266`: Backport PR #29251 on branch v3.10.x (Zizmor audit) +* :ghpull:`29269`: Backport PR #29267 on branch v3.10.x (Exclude pylab from mypy checks) +* :ghpull:`29267`: Exclude pylab from mypy checks +* :ghpull:`29251`: Zizmor audit +* :ghpull:`29255`: Backport PR #29249 on branch v3.10.x ([Bug Fix] Fix reverse mapping for _translate_tick_params) +* :ghpull:`29249`: [Bug Fix] Fix reverse mapping for _translate_tick_params +* :ghpull:`29250`: Backport PR #29243 on branch v3.10.x (Add quotes around [dev] in environment.yml) +* :ghpull:`29243`: Add quotes around [dev] in environment.yml +* :ghpull:`29246`: Backport PR #29240 on branch v3.10.x (DOC: Add plt.show() to introductory pyplot example) +* :ghpull:`29240`: DOC: Add plt.show() to introductory pyplot example +* :ghpull:`29239`: Backport PR #29236 on branch v3.10.x (ANI: Reduce Pillow frames to RGB when opaque) +* :ghpull:`29238`: Backport PR #29167 on branch v3.10.x (BUGFIX: use axes unit information in ConnectionPatch ) +* :ghpull:`29236`: ANI: Reduce Pillow frames to RGB when opaque +* :ghpull:`29167`: BUGFIX: use axes unit information in ConnectionPatch +* :ghpull:`29232`: Merge branch v3.9.x into v3.10.x +* :ghpull:`29230`: Backport PR #29188 on branch v3.10.x (Bump pypa/cibuildwheel from 2.21.3 to 2.22.0 in the actions group) +* :ghpull:`29188`: Bump pypa/cibuildwheel from 2.21.3 to 2.22.0 in the actions group +* :ghpull:`29225`: Backport PR #29213 on branch v3.10.x (avoid-unnecessary-warning-in-_pcolorargs-function) +* :ghpull:`29211`: Backport PR #29133 on branch v3.10.x (Creating_parse_bar_color_args to unify color handling in plt.bar with precedence and sequence support for facecolor and edgecolor) +* :ghpull:`29177`: Backport PR #29148 on branch v3.10.x (Don't fail on equal-but-differently-named cmaps in qt figureoptions.) +* :ghpull:`29226`: Backport PR #29206 on branch v3.10.x (Skip more tests on pure-Wayland systems) +* :ghpull:`29206`: Skip more tests on pure-Wayland systems +* :ghpull:`29213`: avoid-unnecessary-warning-in-_pcolorargs-function +* :ghpull:`29210`: Backport PR #29209 on branch v3.10.x (FIX: pcolormesh with no x y args and nearest interp) +* :ghpull:`29133`: Creating_parse_bar_color_args to unify color handling in plt.bar with precedence and sequence support for facecolor and edgecolor +* :ghpull:`29209`: FIX: pcolormesh with no x y args and nearest interp +* :ghpull:`29200`: Backport PR #29182 on branch v3.10.x (Update backend_qt.py: parent not passed to __init__ on subplottool) +* :ghpull:`29207`: Backport PR #29169 on branch v3.10.x (Minor fixes to text intro explainer) +* :ghpull:`29169`: Minor fixes to text intro explainer +* :ghpull:`29159`: Pending warning for deprecated parameter 'vert' of box and violin on 3.10 +* :ghpull:`29196`: Backport PR #29191 on branch v3.10.x (ci: Simplify 3.13t test setup) +* :ghpull:`29182`: Update backend_qt.py: parent not passed to __init__ on subplottool +* :ghpull:`29189`: Backport PR #28934 on branch v3.10.x (ci: Unpin micromamba again) +* :ghpull:`29186`: Backport PR #28335 on branch v3.10.x (DOC: do not posting LLM output as your own work) +* :ghpull:`28934`: ci: Unpin micromamba again +* :ghpull:`28335`: DOC: do not posting LLM output as your own work +* :ghpull:`29178`: Backport PR #29163 on branch v3.9.x (ci: Remove outdated pkg-config package on macOS) +* :ghpull:`29170`: Backport PR #29154 on branch v3.10.x (Relax conditions for warning on updating converters) +* :ghpull:`29154`: Relax conditions for warning on updating converters +* :ghpull:`29166`: Backport PR #29153 on branch v3.10.x (Bump codecov/codecov-action from 4 to 5 in the actions group) +* :ghpull:`29164`: Backport PR #29163 on branch v3.10.x (ci: Remove outdated pkg-config package on macOS) +* :ghpull:`29168`: Backport PR #29073 on branch v3.10.x (Update secondary_axis tutorial) +* :ghpull:`29073`: Update secondary_axis tutorial +* :ghpull:`29163`: ci: Remove outdated pkg-config package on macOS +* :ghpull:`29145`: Backport PR #29144 on branch v3.10.x (Use both TCL_SETVAR and TCL_SETVAR2 for tcl 9 support) +* :ghpull:`29144`: Use both TCL_SETVAR and TCL_SETVAR2 for tcl 9 support +* :ghpull:`29140`: Backport PR #29080 on branch v3.10.x (Updates the ``galleries/tutorials/artists.py`` file in response to issue #28920) +* :ghpull:`29080`: Updates the ``galleries/tutorials/artists.py`` file in response to issue #28920 +* :ghpull:`29138`: Backport PR #29134 on branch v3.10.x (MNT: Temporarily skip failing test to unbreak CI) +* :ghpull:`29134`: MNT: Temporarily skip failing test to unbreak CI +* :ghpull:`29132`: Backport PR #29128 on branch v3.10.x (Tweak AutoMinorLocator docstring.) +* :ghpull:`29128`: Tweak AutoMinorLocator docstring. +* :ghpull:`29123`: Bump the actions group with 2 updates +* :ghpull:`29122`: Backport PR #29120 on branch v3.10.x (DOC: Switch nested pie example from cmaps to color_sequences) +* :ghpull:`29100`: Backport PR #29099 on branch v3.10.x (MNT: remove _ttconv.pyi) +* :ghpull:`29099`: MNT: remove _ttconv.pyi +* :ghpull:`29098`: Backport PR #29097 on branch v3.10.x (ENH: add back/forward buttons to osx backend move) +* :ghpull:`29097`: ENH: add back/forward buttons to osx backend move +* :ghpull:`29095`: Backport PR #29071 on branch v3.10.x (Bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0 in the actions group) +* :ghpull:`29096`: Backport PR #29094 on branch v3.10.x (DOC: fix link in See Also section of axes.violin) +* :ghpull:`29092`: Backport PR #29088 on branch v3.10.x (DOC: Format aliases in kwargs tables) +* :ghpull:`29094`: DOC: fix link in See Also section of axes.violin +* :ghpull:`29091`: Backport PR #29085 on branch v3.10.x (FIX: Update GTK3Agg backend export name for consistency) +* :ghpull:`29088`: DOC: Format aliases in kwargs tables +* :ghpull:`29089`: Backport PR #29065 on branch v3.10.x (DOC: Update docstring of triplot()) +* :ghpull:`29085`: FIX: Update GTK3Agg backend export name for consistency +* :ghpull:`29084`: Backport PR #29081 on branch v3.10.x (Document "none" as color value) +* :ghpull:`29065`: DOC: Update docstring of triplot() +* :ghpull:`29081`: Document "none" as color value +* :ghpull:`29061`: Backport PR #29024 on branch v3.10.x (Fix saving animations to transparent formats) +* :ghpull:`29069`: Backport PR #29068 on branch v3.10.x ([DOC] Fix indentation in sync_cmaps example) +* :ghpull:`29070`: Backport PR #29048 on branch v3.10.x (DOC: integrated pr workflow from contributing guide into install and workflow) +* :ghpull:`29048`: DOC: integrated pr workflow from contributing guide into install and workflow +* :ghpull:`29068`: [DOC] Fix indentation in sync_cmaps example +* :ghpull:`29024`: Fix saving animations to transparent formats +* :ghpull:`29059`: Cleanup converter docs and StrCategoryConverter behavior +* :ghpull:`29058`: [DOC] Update missing-references.json +* :ghpull:`29057`: DOC/TST: lock numpy<2.1 in environment.yml +* :ghpull:`29053`: Factor out common formats strings in LogFormatter, LogFormatterExponent. +* :ghpull:`28970`: Add explicit converter setting to Axis +* :ghpull:`28048`: Enables setting hatch linewidth in Patches and Collections, also fixes setting hatch linewidth by rcParams +* :ghpull:`29017`: DOC: Document preferred figure size for examples +* :ghpull:`28871`: updated contribution doc #28476 +* :ghpull:`28453`: Stop relying on dead-reckoning mouse buttons for motion_notify_event. +* :ghpull:`28495`: ticker.EngFormatter: allow offset +* :ghpull:`29039`: MNT: Add provisional get_backend(resolve=False) flag +* :ghpull:`28946`: MNT: Deprecate plt.polar() with an existing non-polar Axes +* :ghpull:`29013`: FIX: auto_fmtxdate for constrained layout +* :ghpull:`29022`: Fixes AIX internal CI build break. +* :ghpull:`28830`: Feature: Support passing DataFrames to table.table +* :ghpull:`27766`: Return filename from save_figure +* :ghpull:`27167`: ENH: add long_axis property to colorbar +* :ghpull:`29021`: Update minimum pybind11 to 2.13.2 +* :ghpull:`28863`: Improved documentation for quiver +* :ghpull:`29019`: Update requirements to add PyStemmer to doc-requirements and environment +* :ghpull:`28653`: Mnt/generalize plot varargs +* :ghpull:`28967`: Fix MSVC cast warnings +* :ghpull:`29016`: DOC: Better explain suptitle / supxlabel / supylabel naming +* :ghpull:`28842`: FT2Font extension improvements +* :ghpull:`28658`: New data → color pipeline +* :ghpull:`29012`: Bump required pybind11 to 2.13 +* :ghpull:`29007`: MNT: Deprecate changing Figure.number +* :ghpull:`28861`: Break Artist._remove_method reference cycle +* :ghpull:`28478`: bugfix for ``PathSimplifier`` +* :ghpull:`28992`: DOC: Refresh transform tree example +* :ghpull:`28890`: MNT: Add missing dependency to environment.yml +* :ghpull:`28354`: Add Quiverkey zorder option +* :ghpull:`28966`: Fix polar error bar cap orientation +* :ghpull:`28819`: Mark all extensions as free-threading safe +* :ghpull:`28986`: DOC: Add tags for 3D fill_between examples +* :ghpull:`28984`: DOC / BUG: Better example for 3D axlim_clip argument +* :ghpull:`20866`: Remove ttconv and implement Type-42 embedding using fontTools +* :ghpull:`28975`: Set guiEvent where applicable for gtk4. +* :ghpull:`28568`: added tags to mplot3d examples +* :ghpull:`28976`: Bump pypa/cibuildwheel from 2.21.2 to 2.21.3 in the actions group +* :ghpull:`28978`: CI: Resolve mypy stubtest build errors +* :ghpull:`28823`: Fix 3D rotation precession +* :ghpull:`28841`: Make mplot3d mouse rotation style adjustable +* :ghpull:`28971`: DOC: correct linestyle example and reference rcParams +* :ghpull:`28702`: [MNT]: #28701 separate the generation of polygon vertices in fill_between to enable resampling +* :ghpull:`28965`: Suggest imageio_ffmpeg to provide ffmpeg as animation writer. +* :ghpull:`28964`: FIX macos: Use the agg buffer_rgba rather than private attribute +* :ghpull:`28963`: Remove refs to outdated writers in animation.py. +* :ghpull:`28948`: Raise ValueError for RGB values outside the [0, 1] range in rgb_to_hsv function +* :ghpull:`28857`: Pybind11 cleanup +* :ghpull:`28949`: [pre-commit.ci] pre-commit autoupdate +* :ghpull:`28950`: Bump the actions group with 2 updates +* :ghpull:`28904`: Agg: Remove 16-bit limits +* :ghpull:`28856`: Convert remaining code to pybind11 +* :ghpull:`28874`: Remove remaining 3.8 deprecations +* :ghpull:`28943`: DOC: Clarify the returned line of axhline()/axvline() +* :ghpull:`28935`: DOC: Fix invalid rcParam references +* :ghpull:`28942`: In colorbar docs, add ref from 'boundaries' doc to 'spacing' doc. +* :ghpull:`28933`: Switch AxLine.set_xy{1,2} to take a single argument. +* :ghpull:`28869`: ci: Bump build image on AppVeyor to MSVC 2019 +* :ghpull:`28906`: Re-fix exception caching in dviread. +* :ghpull:`27349`: [ENH] Implement dynamic clipping to axes limits for 3D plots +* :ghpull:`28913`: DOC: Fix Axis.set_label reference +* :ghpull:`28911`: MNT: Fix double evaluation of _LazyTickList +* :ghpull:`28584`: MNT: Prevent users from erroneously using legend label API on Axis +* :ghpull:`28853`: MNT: Check the input sizes of regular X,Y in pcolorfast +* :ghpull:`28838`: TST: Fix minor issues in interactive backend test +* :ghpull:`28795`: MNT: Cleanup docstring substitution mechanisms +* :ghpull:`28897`: Fix minor issues in stubtest wrapper +* :ghpull:`28899`: Don't cache exception with traceback reference loop in dviread. +* :ghpull:`28888`: DOC: Better visualization for the default color cycle example +* :ghpull:`28896`: doc: specify non-python dependencies in dev install docs +* :ghpull:`28843`: MNT: Cleanup FontProperties __init__ API +* :ghpull:`28683`: MNT: Warn if fixed aspect overwrites explicitly set data limits +* :ghpull:`25645`: Fix issue with sketch not working on PathCollection in Agg +* :ghpull:`28886`: DOC: Cross-link Axes attributes +* :ghpull:`28880`: Remove 'in' from removal substitution for deprecation messages +* :ghpull:`28875`: DOC: Fix documentation of hist() kwarg lists +* :ghpull:`28825`: DOC: Fix non-working code object references +* :ghpull:`28862`: Improve pie chart error messages +* :ghpull:`28844`: DOC: Add illustration to Figure.subplots_adjust +* :ghpull:`28588`: Fix scaling in Tk on non-Windows systems +* :ghpull:`28849`: DOC: Mark subfigures as no longer provisional +* :ghpull:`26000`: making onselect a keyword argument on selectors +* :ghpull:`26013`: Support unhashable callbacks in CallbackRegistry +* :ghpull:`27011`: Convert Agg extension to pybind11 +* :ghpull:`28845`: In examples, prefer named locations rather than location numbers. +* :ghpull:`27218`: API: finish LocationEvent.lastevent removal +* :ghpull:`26870`: Removed the deprecated code from axis.py +* :ghpull:`27996`: Create ``InsetIndicator`` artist +* :ghpull:`28532`: TYP: Fix xycoords and friends +* :ghpull:`28785`: Convert ft2font extension to pybind11 +* :ghpull:`28815`: DOC: Document policy on colormaps and styles +* :ghpull:`28826`: MNT: Replace _docstring.dedent_interpd by its alias _docstring.interpd +* :ghpull:`27567`: DOC: batch of tags +* :ghpull:`27302`: Tags for simple_scatter.py demo +* :ghpull:`28820`: DOC: Fix missing cross-reference checks for sphinx-tags +* :ghpull:`28786`: Handle single color in ContourSet +* :ghpull:`28808`: DOC: Add a plot to margins() to visualize the effect +* :ghpull:`27938`: feat: add dunder method for math operations on Axes Size divider +* :ghpull:`28569`: Adding tags to many examples +* :ghpull:`28183`: Expire deprecations +* :ghpull:`28801`: DOC: Clarify AxLine.set_xy2 / AxLine.set_slope +* :ghpull:`28788`: TST: Skip webp tests if it isn't available +* :ghpull:`28550`: Remove internal use of ``Artist.figure`` +* :ghpull:`28767`: MNT: expire ``ContourSet`` deprecations +* :ghpull:`28755`: TYP: Add typing for internal _tri extension +* :ghpull:`28765`: Add tests for most of FT2Font, and fix some bugs +* :ghpull:`28781`: TST: Fix test_pickle_load_from_subprocess in a dirty tree +* :ghpull:`28783`: Fix places where "auto" was not listed as valid interpolation_stage. +* :ghpull:`28779`: DOC/TST: lock numpy < 2.1 +* :ghpull:`28771`: Ensure SketchParams is always fully initialized +* :ghpull:`28375`: FIX: Made AffineDeltaTransform pass-through properly +* :ghpull:`28454`: MultivarColormap and BivarColormap +* :ghpull:`27891`: Refactor some parts of ft2font extension +* :ghpull:`28752`: quick fix dev build by locking out numpy version that's breaking things +* :ghpull:`28749`: Add sphinxcontrib-video to environment.yml +* :ghpull:`27851`: Add ten-color accessible color cycle as style sheet +* :ghpull:`28501`: ConciseDateFormatter's offset string is correct on an inverted axis +* :ghpull:`28734`: Compressed layout moves suptitle +* :ghpull:`28736`: Simplify some code in dviread +* :ghpull:`28347`: Doc: added triage section to new contributor docs +* :ghpull:`28735`: ci: Avoid setuptools 72.2.0 when installing kiwi on PyPy +* :ghpull:`28728`: MNT: Deprecate reimported functions in top-level namespace +* :ghpull:`28730`: MNT: Don't rely on RcParams being a dict subclass in internal code +* :ghpull:`28714`: Simplify _api.warn_external on Python 3.12+ +* :ghpull:`28727`: MNT: Better workaround for format_cursor_data on ScalarMappables +* :ghpull:`28725`: Stop disabling FH4 Exception Handling on MSVC +* :ghpull:`28711`: Merge branch v3.9.x into main +* :ghpull:`28713`: DOC: Add a few more notes to release guide +* :ghpull:`28720`: DOC: Clarify axhline() uses axes coordinates +* :ghpull:`28718`: DOC: Update missing references for numpydoc 1.8.0 +* :ghpull:`28710`: DOC: clarify alpha handling for indicate_inset[_zoom] +* :ghpull:`28704`: Fixed arrowstyle doc interpolation in FancyPatch.set_arrow() #28698. +* :ghpull:`28709`: Bump actions/attest-build-provenance from 1.4.0 to 1.4.1 in the actions group +* :ghpull:`28707`: Avoid division-by-zero in Sketch::Sketch +* :ghpull:`28610`: CI: Add CI to test matplotlib against free-threaded Python +* :ghpull:`28262`: Fix PolygonSelector cursor to temporarily hide during active zoom/pan +* :ghpull:`28670`: API: deprecate unused helper in patch._Styles +* :ghpull:`28589`: Qt embedding example: Separate drawing and data retrieval timers +* :ghpull:`28655`: Inline annotation and PGF user demos +* :ghpull:`28654`: DOC: Remove long uninstructive examples +* :ghpull:`28652`: Fix docstring style inconsistencies in lines.py +* :ghpull:`28641`: DOC: Standardize example titles - part 2 +* :ghpull:`28642`: DOC: Simplify heatmap example +* :ghpull:`28638`: DOC: Remove hint on PRs from origin/main +* :ghpull:`28587`: Added dark-mode diverging colormaps +* :ghpull:`28546`: DOC: Clarify/simplify example of multiple images with one colorbar +* :ghpull:`28613`: Added documentation for parameters vmin and vmax inside specgram function. +* :ghpull:`28627`: DOC: Bump minimum Sphinx to 5.1.0 +* :ghpull:`28628`: DOC: Sub-structure next API changes overview +* :ghpull:`28629`: FIX: ``Axis.set_in_layout`` respected +* :ghpull:`28575`: Add branch tracking to development workflow instructions +* :ghpull:`28616`: CI: Build docs on latest Python +* :ghpull:`28617`: DOC: Enable parallel builds +* :ghpull:`28544`: DOC: Standardize example titles +* :ghpull:`28615`: DOC: hack to suppress sphinx-gallery 17.0 warning +* :ghpull:`28293`: BLD: Enable building Python 3.13 wheels for nightlies +* :ghpull:`27385`: Fix 3D lines being visible when behind camera +* :ghpull:`28609`: svg: Ensure marker-only lines get URLs +* :ghpull:`28599`: Upgrade code to Python 3.10 +* :ghpull:`28593`: Update ruff to 0.2.0 +* :ghpull:`28603`: Simplify ttconv python<->C++ conversion using std::optional. +* :ghpull:`28557`: DOC: apply toc styling to remove nesting +* :ghpull:`28542`: CI: adjust pins in mypy GHA job +* :ghpull:`28504`: Changes in SVG backend to improve compatibility with Affinity designer +* :ghpull:`28122`: Disable clipping in Agg resamplers. +* :ghpull:`28597`: Pin PyQt6 back on Ubuntu 20.04 +* :ghpull:`28073`: Add support for multiple hatches, edgecolors and linewidths in histograms +* :ghpull:`28594`: MNT: Raise on GeoAxes limits manipulation +* :ghpull:`28312`: Remove one indirection layer in ToolSetCursor. +* :ghpull:`28573`: ENH: include property name in artist AttributeError +* :ghpull:`28503`: Bump minimum Python to 3.10 +* :ghpull:`28525`: FIX: colorbar pad for ``ImageGrid`` +* :ghpull:`28558`: DOC: Change _make_image signature to numpydoc +* :ghpull:`28061`: API: add antialiased to interpolation-stage in image +* :ghpull:`28536`: [svg] Add rcParam["svg.id"] to add a top-level id attribute to +* :ghpull:`28540`: Subfigures become stale when their artists are stale +* :ghpull:`28177`: Rationalise artist get_figure methods; make figure attribute a property +* :ghpull:`28527`: DOC: improve tagging guidelines page +* :ghpull:`28530`: DOC: Simplify axhspan example +* :ghpull:`28537`: DOC: Update timeline example for newer releases +* :ghpull:`27833`: [SVG] Introduce sequential ID-generation scheme for clip-paths. +* :ghpull:`28512`: DOC: Fix version switcher for stable docs +* :ghpull:`28492`: MNT: Remove PolyQuadMesh deprecations +* :ghpull:`28509`: CI: Use micromamba on AppVeyor +* :ghpull:`28510`: Merge v3.9.1 release into main +* :ghpull:`28494`: [pre-commit.ci] pre-commit autoupdate +* :ghpull:`28497`: Add words to ignore for codespell +* :ghpull:`28455`: Expand ticklabels_rotation example to cover rotating default ticklabels. +* :ghpull:`28282`: DOC: clarify no-build-isolation & mypy ignoring new functions +* :ghpull:`28306`: Fixed PolarAxes not using fmt_xdata and added simple test (#4568) +* :ghpull:`28400`: DOC: Improve doc wording of data parameter +* :ghpull:`28225`: [ENH]: fill_between extended to 3D +* :ghpull:`28371`: Bump pypa/cibuildwheel from 2.18.1 to 2.19.0 in the actions group +* :ghpull:`28390`: Inline RendererBase._get_text_path_transform. +* :ghpull:`28381`: Take hinting rcParam into account in MathTextParser cache. +* :ghpull:`28363`: flip subfigures axes to match subplots +* :ghpull:`28340`: Fix missing font error when using MiKTeX +* :ghpull:`28379`: PathEffectsRenderer can plainly inherit RendererBase._draw_text_as_path. +* :ghpull:`28275`: Revive sanitizing default filenames extracted from UI window titles +* :ghpull:`28360`: DOC: fixed code for testing check figures equal example +* :ghpull:`28370`: Reorder Axes3D parameters semantically. +* :ghpull:`28350`: Typo in communication guide: extensiblity -> extensibility +* :ghpull:`28290`: Introduce natural 3D rotation with mouse +* :ghpull:`28186`: apply unary minus spacing directly after equals sign +* :ghpull:`28311`: Update 3D orientation indication right away +* :ghpull:`28300`: Faster title alignment +* :ghpull:`28313`: Factor out handling of missing spines in alignment calculations. +* :ghpull:`28196`: TST: add timeouts to font_manager + threading test +* :ghpull:`28279`: Doc/ipython dep +* :ghpull:`28091`: [MNT]: create build-requirements.txt and update dev-requirements.txt +* :ghpull:`27992`: Add warning for multiple pyplot.figure calls with same ID +* :ghpull:`28238`: DOC: Update release guide to match current automations +* :ghpull:`28232`: Merge v3.9.0 release into main +* :ghpull:`28228`: DOC: Fix typo in release_guide.rst +* :ghpull:`28074`: Add ``orientation`` parameter to Boxplot and deprecate ``vert`` +* :ghpull:`27998`: Add a new ``orientation`` parameter to Violinplot and deprecate ``vert`` +* :ghpull:`28217`: Better group logging of font handling by texmanager. +* :ghpull:`28130`: Clarify the role of out_mask and out_alpha in _make_image. +* :ghpull:`28201`: Deprecate ``Poly3DCollection.get_vector`` +* :ghpull:`28046`: DOC: Clarify merge policy +* :ghpull:`26893`: PGF: Consistently set LaTeX document font size +* :ghpull:`28156`: Don't set savefig.facecolor/edgecolor in dark_background/538 styles. +* :ghpull:`28030`: Fix #28016: wrong lower ylim when baseline=None on stairs +* :ghpull:`28127`: GOV: write up policy on not updating req for CVEs in dependencies +* :ghpull:`28106`: Fix: [Bug]: Setting norm by string doesn't work for hexbin #28105 +* :ghpull:`28143`: Merge branch v3.9.x into main +* :ghpull:`28133`: Make ``functions`` param to secondary_x/yaxis not keyword-only. +* :ghpull:`28083`: Convert TensorFlow to numpy for plots +* :ghpull:`28116`: FIX: Correct names of aliased cmaps +* :ghpull:`28118`: Remove redundant baseline tests in test_image. +* :ghpull:`28093`: Minor maintenance on pgf docs/backends. +* :ghpull:`27818`: Set polygon offsets for log scaled hexbin +* :ghpull:`28058`: TYP: add float to to_rgba x type +* :ghpull:`27964`: BUG: Fix NonUniformImage with nonlinear scale +* :ghpull:`28054`: DOC: Clarify that parameters to gridded data plotting functions are p… +* :ghpull:`27882`: Deleting all images that have passed tests before upload +* :ghpull:`28033`: API: warn if stairs used in way that is likely not desired +* :ghpull:`27786`: Deprecate positional use of most arguments of plotting functions +* :ghpull:`28025`: DOC: Clarify interface terminology +* :ghpull:`28043`: MNT: Add git blame ignore for docstring parameter indentation fix +* :ghpull:`28037`: DOC: Fix inconsistent spacing in some docstrings in _axes.py +* :ghpull:`28031`: Be more specific in findobj return type -Issues (9): +Issues (100): -* :ghissue:`28551`: [Bug]: Possible issue with Matplotlib 3.9.1 wheel on Windows only -* :ghissue:`28250`: [Doc]: Sphinx gallery links mispointed for Axes3D methods -* :ghissue:`28574`: [Bug]: Nondeterministic behavior with subplot spacing and constrained layout -* :ghissue:`28626`: [Doc]: Remove old TODO's from animation.py -* :ghissue:`28648`: [Bug]: format_image_data on an image of only zeros produces a large number of zeros -* :ghissue:`28624`: [Bug]: Bad type hint in ``_AxesBase.twinx()`` -* :ghissue:`28567`: [Bug]: sticky edge related changes for datetime plots -* :ghissue:`28533`: [Doc]: Stackplot hatch functionality has version dependencies -* :ghissue:`28538`: [Bug]: Permission denied when importing matplotlib.pyplot +* :ghissue:`29298`: [Doc]: The link at "see also" is incorrect. (Axes.violin) +* :ghissue:`29248`: [Bug]: Figure.align_labels() confused by GridSpecFromSubplotSpec +* :ghissue:`26738`: Improve LineCollection docstring further +* :ghissue:`29263`: [Bug]: mypy failures in CI +* :ghissue:`27416`: [Bug]: get_tick_params on xaxis shows wrong keywords +* :ghissue:`29241`: [Bug]: Instructions for setting up conda dev environment in environment.yml give issues with MacOS/zsh +* :ghissue:`29227`: [Bug]: Introductory example on the pyplot API page does not show - missing plt.show() +* :ghissue:`29190`: [Bug]: inconsistent ‘animation.FuncAnimation’ between display and save +* :ghissue:`29090`: [MNT]: More consistent color parameters for bar() +* :ghissue:`29179`: [Bug]: Incorrect pcolormesh when shading='nearest' and only the mesh data C is provided. +* :ghissue:`29067`: [Bug]: ``secondary_xaxis`` produces ticks at incorrect locations +* :ghissue:`29126`: [Bug]: TkAgg backend is broken with tcl/tk 9.0 +* :ghissue:`29045`: [ENH]: implement back/forward buttons on mouse move events on macOS +* :ghissue:`27173`: [Bug]: Gifs no longer create transparent background +* :ghissue:`19229`: Add public API for setting an axis unit converter +* :ghissue:`21108`: [Bug]: Hatch linewidths cannot be modified in an rcParam context +* :ghissue:`27784`: [Bug]: Polar plot error bars don't rotate with angle for ``set_theta_direction`` and ``set_theta_offset`` +* :ghissue:`29011`: [Bug]: Figure.autofmt_xdate() not working in presence of colorbar with constrained layout +* :ghissue:`29020`: AIX internal CI build break #Matplotlib +* :ghissue:`28726`: feature request: support passing DataFrames to table.table +* :ghissue:`28570`: [MNT]: Try improving doc build speed by using PyStemmer +* :ghissue:`13388`: Typo in the figure API (fig.suptitle) +* :ghissue:`28994`: [Bug]: Figure Number Gives Type Error +* :ghissue:`28985`: [ENH]: Cannot disable coordinate display in ToolManager/Toolbar (it's doable in NavigationToolbar2) +* :ghissue:`17914`: ``PathSimplifier`` fails to ignore ``CLOSEPOLY`` vertices +* :ghissue:`28885`: [Bug]: Strange errorbar caps when polar axes have non-default theta direction or theta zero location +* :ghissue:`12418`: replace ttconv for ps/pdf +* :ghissue:`28962`: [Bug]: gtk4 backend does not set guiEvent attribute +* :ghissue:`28408`: [ENH]: mplot3d mouse rotation style +* :ghissue:`28701`: [MNT]: Separate the generation of polygon vertices from ``_fill_between_x_or_y`` +* :ghissue:`28941`: [Bug]: unexplicit error message when using ``matplotlib.colors.rgb_to_hsv()`` with wrong input +* :ghissue:`23846`: [MNT]: Pybind11 transition plan +* :ghissue:`28866`: Possible memory leak in pybind11 migration +* :ghissue:`26368`: [Bug]: Long audio files result in incomplete spectrogram visualizations +* :ghissue:`23826`: [Bug]: Overflow of 16-bit integer in Agg renderer causes PolyCollections to be drawn at incorrect locations +* :ghissue:`28927`: [Bug]: Enforce that Line data modifications are sequences +* :ghissue:`12312`: colorbar(boundaries=...) doesn't work so well with nonlinear norms +* :ghissue:`28800`: [ENH]: AxLine xy1/xy2 setters should take xy as single parameters, (possibly) not separate ones +* :ghissue:`28893`: [Bug]: Lines between points are invisible when there are more than 7 subfigures per row +* :ghissue:`28908`: [Bug]: Possible performance issue with _LazyTickList +* :ghissue:`27971`: [Bug]: ax.xaxis.set_label(...) doesn't set the x-axis label +* :ghissue:`28059`: [Bug]: pcolorfast should validate that regularly spaced X or Y inputs have the right size +* :ghissue:`28892`: [Doc]: Be more specific on dependencies that need to be installed for a "reasonable" dev environment +* :ghissue:`19693`: path.sketch doesn't apply to PolyCollection +* :ghissue:`28873`: [Bug]: hist()'s doc for edgecolors/facecolors does not match behavior (which is itself not very consistent) +* :ghissue:`23005`: [Doc]: Add figure to ``subplots_adjust`` +* :ghissue:`25947`: [Doc]: Subfigures still marked as provisional +* :ghissue:`26012`: [Bug]: "Unhashable type" when event callback is a method of a ``dict`` subclass +* :ghissue:`23425`: [Bug]: Axes.indicate_inset connectors affect constrained layout +* :ghissue:`23424`: [Bug]: Axes.indicate_inset(linewidth=...) doesn't affect connectors +* :ghissue:`19768`: Overlay created by ``Axes.indicate_inset_zoom`` does not adjust when changing inset ranges +* :ghissue:`27673`: [Doc]: Confusing page on color changes +* :ghissue:`28782`: [Bug]: String ``contour(colors)`` gives confusing error when ``extend`` used +* :ghissue:`27930`: [ENH]: Make axes_grid1.Size more math friendly. +* :ghissue:`28372`: [Bug]: AffineDeltaTransform does not appear to invalidate properly +* :ghissue:`27866`: [Bug]: Adding suptitle in compressed layout causes weird spacing +* :ghissue:`28731`: [Bug]: Plotting numpy.array of dtype float32 with pyplot.imshow and specified colors.LogNorm produces wrong colors +* :ghissue:`28715`: [Bug]: CI doc builds fail since a couple of days +* :ghissue:`28698`: [bug]: arrowstyle doc interpolation in FancyPatch.set_arrow() +* :ghissue:`28669`: [Bug]: division-by-zero error in Sketch::Sketch with Agg backend +* :ghissue:`28548`: [Doc]: matplotlib.pyplot.specgram parameters vmin and vmax are not documented +* :ghissue:`28165`: [Bug]: PolygonSelector should hide itself when zoom/pan is active +* :ghissue:`18608`: Feature proposal: "Dark mode" divergent colormaps +* :ghissue:`28623`: [Bug]: ``Axis.set_in_layout`` not respected? +* :ghissue:`6305`: Matplotlib 3D plot - parametric curve “wraparound” from certain perspectives +* :ghissue:`28595`: [Bug]: set_url without effect for instances of Line2D with linestyle 'none' +* :ghissue:`20910`: [Bug]: Exported SVG files are no longer imported Affinity Designer correctly +* :ghissue:`28600`: [TST] Upcoming dependency test failures +* :ghissue:`26718`: [Bug]: stacked histogram does not properly handle edgecolor and hatches +* :ghissue:`28590`: [ENH]: Geo Projections support for inverting axis +* :ghissue:`27954`: [ENH]: Iterables in grouped histogram labels +* :ghissue:`27878`: [ENH]: AttributeError('... got an unexpected keyword argument ...') should set the .name attribute to the keyword +* :ghissue:`28489`: [TST] Upcoming dependency test failures +* :ghissue:`28343`: [Bug]: inconsistent colorbar pad for ``ImageGrid`` with ``cbar_mode="single"`` +* :ghissue:`28535`: [ENH]: Add id attribute to top level svg tag +* :ghissue:`28170`: [Doc]: ``get_figure`` may return a ``SubFigure`` +* :ghissue:`27831`: [Bug]: Nondeterminism in SVG clipPath element id attributes +* :ghissue:`4568`: Add ``fmt_r`` and ``fmt_theta`` methods to polar axes +* :ghissue:`28105`: [Bug]: Setting norm by string doesn't work for hexbin +* :ghissue:`28142`: [ENH]: Add fill between support for 3D plots +* :ghissue:`28344`: [Bug]: subfigures are added in column major order +* :ghissue:`28212`: [Bug]: Matplotlib not work with MiKTeX. +* :ghissue:`28288`: [ENH]: Natural 3D rotation with mouse +* :ghissue:`28180`: [Bug]: mathtext should distinguish between unary and binary minus +* :ghissue:`26150`: [Bug]: Savefig slow with subplots +* :ghissue:`28310`: [Bug]: orientation indication shows up late in mplot3d, and then lingers +* :ghissue:`16263`: Apply NEP29 (time-limited support) to IPython +* :ghissue:`28192`: [MNT]: Essential build requirements not included in dev-requirements +* :ghissue:`27978`: [Bug]: strange behaviour when redefining figure size +* :ghissue:`13435`: boxplot/violinplot orientation-setting API +* :ghissue:`28199`: [MNT]: Misleading function name ``Poly3DCollection.get_vector()`` +* :ghissue:`26892`: [Bug]: PGF font size mismatch between measurement and output +* :ghissue:`28016`: [Bug]: Unexpected ylim of stairs with baseline=None +* :ghissue:`28114`: [Bug]: mpl.colormaps[ "Grays" ].name is "Greys", not "Grays" +* :ghissue:`18045`: Cannot access hexbin data when ``xscale='log'`` and ``yscale='log'`` are set. +* :ghissue:`27820`: [Bug]: Logscale Axis + NonUniformImage + GUI move tool = Distortion +* :ghissue:`28047`: [Bug]: plt.barbs is a command that cannot be passed in a c parameter by parameter name, but can be passed in the form of a positional parameter +* :ghissue:`23400`: Only upload failed images on failure +* :ghissue:`26752`: [Bug]: ``ax.stairs()`` creates inaccurate ``fill`` for the plot +* :ghissue:`21817`: [Doc/Dev]: style guide claims "object oriented" is verboten. Previous GitHub statistics diff --git a/doc/users/next_whats_new/3d_clip_to_axis_limits.rst b/doc/users/next_whats_new/3d_clip_to_axis_limits.rst deleted file mode 100644 index a2230bddd66c..000000000000 --- a/doc/users/next_whats_new/3d_clip_to_axis_limits.rst +++ /dev/null @@ -1,34 +0,0 @@ -Data in 3D plots can now be dynamically clipped to the axes view limits -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -All 3D plotting functions now support the *axlim_clip* keyword argument, which -will clip the data to the axes view limits, hiding all data outside those -bounds. This clipping will be dynamically applied in real time while panning -and zooming. - -Please note that if one vertex of a line segment or 3D patch is clipped, then -the entire segment or patch will be hidden. Not being able to show partial -lines or patches such that they are "smoothly" cut off at the boundaries of the -view box is a limitation of the current renderer. - -.. plot:: - :include-source: true - :alt: Example of default behavior (blue) and axlim_clip=True (orange) - - import matplotlib.pyplot as plt - import numpy as np - - fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) - x = np.arange(-5, 5, 0.5) - y = np.arange(-5, 5, 0.5) - X, Y = np.meshgrid(x, y) - R = np.sqrt(X**2 + Y**2) - Z = np.sin(R) - - # Note that when a line has one vertex outside the view limits, the entire - # line is hidden. The same is true for 3D patches (not shown). - # In this example, data where x < 0 or z > 0.5 is clipped. - ax.plot_wireframe(X, Y, Z, color='C0') - ax.plot_wireframe(X, Y, Z, color='C1', axlim_clip=True) - ax.set(xlim=(0, 10), ylim=(-5, 5), zlim=(-1, 0.5)) - ax.legend(['axlim_clip=False (default)', 'axlim_clip=True']) diff --git a/doc/users/next_whats_new/axes_creation_speedup.rst b/doc/users/next_whats_new/axes_creation_speedup.rst deleted file mode 100644 index c9eaa48c0060..000000000000 --- a/doc/users/next_whats_new/axes_creation_speedup.rst +++ /dev/null @@ -1,4 +0,0 @@ -Axes creation speedup -~~~~~~~~~~~~~~~~~~~~~ - -Creating an Axes is now 20-25% faster due to internal optimizations. diff --git a/doc/users/next_whats_new/boxplot_orientation.rst b/doc/users/next_whats_new/boxplot_orientation.rst deleted file mode 100644 index 19193b530a9e..000000000000 --- a/doc/users/next_whats_new/boxplot_orientation.rst +++ /dev/null @@ -1,21 +0,0 @@ -``boxplot`` and ``bxp`` orientation parameter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Boxplots have a new parameter *orientation: {"vertical", "horizontal"}* -to change the orientation of the plot. This replaces the deprecated -*vert: bool* parameter. - - -.. plot:: - :include-source: true - :alt: Example of creating 4 horizontal boxplots. - - import matplotlib.pyplot as plt - import numpy as np - - fig, ax = plt.subplots() - np.random.seed(19680801) - all_data = [np.random.normal(0, std, 100) for std in range(6, 10)] - - ax.boxplot(all_data, orientation='horizontal') - plt.show() diff --git a/doc/users/next_whats_new/ccs_color_cycle.rst b/doc/users/next_whats_new/ccs_color_cycle.rst deleted file mode 100644 index 2c9c0c85145c..000000000000 --- a/doc/users/next_whats_new/ccs_color_cycle.rst +++ /dev/null @@ -1,19 +0,0 @@ -New more-accessible color cycle -------------------------------- - -A new color cycle named 'petroff10' was added. This cycle was constructed using a -combination of algorithmically-enforced accessibility constraints, including -color-vision-deficiency modeling, and a machine-learning-based aesthetics model -developed from a crowdsourced color-preference survey. It aims to be both -generally pleasing aesthetically and colorblind accessible such that it could -serve as a default in the aim of universal design. For more details -see `Petroff, M. A.: "Accessible Color Sequences for Data Visualization" -`_ and related `SciPy talk`_. A demonstration -is included in the style sheets reference_. To load this color cycle in place -of the default:: - - import matplotlib.pyplot as plt - plt.style.use('petroff10') - -.. _reference: https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html -.. _SciPy talk: https://www.youtube.com/watch?v=Gapv8wR5DYU diff --git a/doc/users/next_whats_new/contour_color.rst b/doc/users/next_whats_new/contour_color.rst deleted file mode 100644 index 1f7a326ec2b5..000000000000 --- a/doc/users/next_whats_new/contour_color.rst +++ /dev/null @@ -1,21 +0,0 @@ -Specifying a single color in ``contour`` and ``contourf`` ---------------------------------------------------------- - -`~.Axes.contour` and `~.Axes.contourf` previously accepted a single color -provided it was expressed as a string. This restriction has now been removed -and a single color in any format described in the :ref:`colors_def` tutorial -may be passed. - -.. plot:: - :include-source: true - :alt: Two-panel example contour plots. The left panel has all transparent red contours. The right panel has all dark blue contours. - - import matplotlib.pyplot as plt - - fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(6, 3)) - z = [[0, 1], [1, 2]] - - ax1.contour(z, colors=('r', 0.4)) - ax2.contour(z, colors=(0.1, 0.2, 0.5)) - - plt.show() diff --git a/doc/users/next_whats_new/diverging_colormaps.rst b/doc/users/next_whats_new/diverging_colormaps.rst deleted file mode 100644 index 8137acbf13d2..000000000000 --- a/doc/users/next_whats_new/diverging_colormaps.rst +++ /dev/null @@ -1,24 +0,0 @@ -Dark-mode diverging colormaps -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Three diverging colormaps have been added: "berlin", "managua", and "vanimo". -They are dark-mode diverging colormaps, with minimum lightness at the center, -and maximum at the extremes. These are taken from F. Crameri's Scientific -colour maps version 8.0.1 (DOI: https://doi.org/10.5281/zenodo.1243862). - - -.. plot:: - :include-source: true - :alt: Example figures using "imshow" with dark-mode diverging colormaps on positive and negative data. First panel: "berlin" (blue to red with a black center); second panel: "managua" (orange to cyan with a dark purple center); third panel: "vanimo" (pink to green with a black center). - - import numpy as np - import matplotlib.pyplot as plt - - vals = np.linspace(-5, 5, 100) - x, y = np.meshgrid(vals, vals) - img = np.sin(x*y) - - _, ax = plt.subplots(1, 3) - ax[0].imshow(img, cmap=plt.cm.berlin) - ax[1].imshow(img, cmap=plt.cm.managua) - ax[2].imshow(img, cmap=plt.cm.vanimo) diff --git a/doc/users/next_whats_new/engformatter_offset.rst b/doc/users/next_whats_new/engformatter_offset.rst deleted file mode 100644 index c805e45444c5..000000000000 --- a/doc/users/next_whats_new/engformatter_offset.rst +++ /dev/null @@ -1,13 +0,0 @@ -``matplotlib.ticker.EngFormatter`` can computes offsets now ------------------------------------------------------------ - -`matplotlib.ticker.EngFormatter` has gained the ability to show an offset text near the -axis. Using logic shared with `matplotlib.ticker.ScalarFormatter`, it is capable of -deciding whether the data qualifies having an offset and show it with an appropriate SI -quantity prefix, and with the supplied ``unit``. - -To enable this new behavior, simply pass ``useOffset=True`` when you -instantiate `matplotlib.ticker.EngFormatter`. See example -:doc:`/gallery/ticks/engformatter_offset`. - -.. plot:: gallery/ticks/engformatter_offset.py diff --git a/doc/users/next_whats_new/exception_prop_name.rst b/doc/users/next_whats_new/exception_prop_name.rst deleted file mode 100644 index c887b879393c..000000000000 --- a/doc/users/next_whats_new/exception_prop_name.rst +++ /dev/null @@ -1,26 +0,0 @@ -Exception handling control -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The exception raised when an invalid keyword parameter is passed now includes -that parameter name as the exception's ``name`` property. This provides more -control for exception handling: - - -.. code-block:: python - - import matplotlib.pyplot as plt - - def wobbly_plot(args, **kwargs): - w = kwargs.pop('wobble_factor', None) - - try: - plt.plot(args, **kwargs) - except AttributeError as e: - raise AttributeError(f'wobbly_plot does not take parameter {e.name}') from e - - - wobbly_plot([0, 1], wibble_factor=5) - -.. code-block:: - - AttributeError: wobbly_plot does not take parameter wibble_factor diff --git a/doc/users/next_whats_new/fill_between_3d.rst b/doc/users/next_whats_new/fill_between_3d.rst deleted file mode 100644 index 13e89780d34f..000000000000 --- a/doc/users/next_whats_new/fill_between_3d.rst +++ /dev/null @@ -1,25 +0,0 @@ -Fill between 3D lines ---------------------- - -The new method `.Axes3D.fill_between` allows to fill the surface between two -3D lines with polygons. - -.. plot:: - :include-source: - :alt: Example of 3D fill_between - - N = 50 - theta = np.linspace(0, 2*np.pi, N) - - x1 = np.cos(theta) - y1 = np.sin(theta) - z1 = 0.1 * np.sin(6 * theta) - - x2 = 0.6 * np.cos(theta) - y2 = 0.6 * np.sin(theta) - z2 = 2 # Note that scalar values work in addition to length N arrays - - fig = plt.figure() - ax = fig.add_subplot(projection='3d') - ax.fill_between(x1, y1, z1, x2, y2, z2, - alpha=0.5, edgecolor='k') diff --git a/doc/users/next_whats_new/fill_between_poly_collection.rst b/doc/users/next_whats_new/fill_between_poly_collection.rst deleted file mode 100644 index 6c3b7673e631..000000000000 --- a/doc/users/next_whats_new/fill_between_poly_collection.rst +++ /dev/null @@ -1,22 +0,0 @@ -``FillBetweenPolyCollection`` ------------------------------ - -The new class :class:`matplotlib.collections.FillBetweenPolyCollection` provides -the ``set_data`` method, enabling e.g. resampling -(:file:`galleries/event_handling/resample.html`). -:func:`matplotlib.axes.Axes.fill_between` and -:func:`matplotlib.axes.Axes.fill_betweenx` now return this new class. - -.. code-block:: python - - import numpy as np - from matplotlib import pyplot as plt - - t = np.linspace(0, 1) - - fig, ax = plt.subplots() - coll = ax.fill_between(t, -t**2, t**2) - fig.savefig("before.png") - - coll.set_data(t, -t**4, t**4) - fig.savefig("after.png") diff --git a/doc/users/next_whats_new/freethreading.rst b/doc/users/next_whats_new/freethreading.rst deleted file mode 100644 index 6ed7a0d636b6..000000000000 --- a/doc/users/next_whats_new/freethreading.rst +++ /dev/null @@ -1,22 +0,0 @@ -Preliminary support for free-threaded CPython 3.13 --------------------------------------------------- - -Matplotlib 3.10 has preliminary support for the free-threaded build of CPython 3.13. See -https://py-free-threading.github.io, `PEP 703 `_ and -the `CPython 3.13 release notes -`_ for more detail -about free-threaded Python. - -Support for free-threaded Python does not mean that Matplotlib is wholly thread safe. We -expect that use of a Figure within a single thread will work, and though input data is -usually copied, modification of data objects used for a plot from another thread may -cause inconsistencies in cases where it is not. Use of any global state (such as the -``pyplot`` module) is highly discouraged and unlikely to work consistently. Also note -that most GUI toolkits expect to run on the main thread, so interactive usage may be -limited or unsupported from other threads. - -If you are interested in free-threaded Python, for example because you have a -multiprocessing-based workflow that you are interested in running with Python threads, we -encourage testing and experimentation. If you run into problems that you suspect are -because of Matplotlib, please open an issue, checking first if the bug also occurs in the -“regular” non-free-threaded CPython 3.13 build. diff --git a/doc/users/next_whats_new/histogram_vectorized_parameters.rst b/doc/users/next_whats_new/histogram_vectorized_parameters.rst deleted file mode 100644 index 7b9c04e71739..000000000000 --- a/doc/users/next_whats_new/histogram_vectorized_parameters.rst +++ /dev/null @@ -1,46 +0,0 @@ -Vectorized ``hist`` style parameters ------------------------------------- - -The parameters *hatch*, *edgecolor*, *facecolor*, *linewidth* and *linestyle* -of the `~matplotlib.axes.Axes.hist` method are now vectorized. -This means that you can pass in individual parameters for each histogram -when the input *x* has multiple datasets. - - -.. plot:: - :include-source: true - :alt: Four charts, each displaying stacked histograms of three Poisson distributions. Each chart differentiates the histograms using various parameters: top left uses different linewidths, top right uses different hatches, bottom left uses different edgecolors, and bottom right uses different facecolors. Each histogram on the left side also has a different edgecolor. - - import matplotlib.pyplot as plt - import numpy as np - np.random.seed(19680801) - - fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(9, 9)) - - data1 = np.random.poisson(5, 1000) - data2 = np.random.poisson(7, 1000) - data3 = np.random.poisson(10, 1000) - - labels = ["Data 1", "Data 2", "Data 3"] - - ax1.hist([data1, data2, data3], bins=range(17), histtype="step", stacked=True, - edgecolor=["red", "green", "blue"], linewidth=[1, 2, 3]) - ax1.set_title("Different linewidths") - ax1.legend(labels) - - ax2.hist([data1, data2, data3], bins=range(17), histtype="barstacked", - hatch=["/", ".", "*"]) - ax2.set_title("Different hatch patterns") - ax2.legend(labels) - - ax3.hist([data1, data2, data3], bins=range(17), histtype="bar", fill=False, - edgecolor=["red", "green", "blue"], linestyle=["--", "-.", ":"]) - ax3.set_title("Different linestyles") - ax3.legend(labels) - - ax4.hist([data1, data2, data3], bins=range(17), histtype="barstacked", - facecolor=["red", "green", "blue"]) - ax4.set_title("Different facecolors") - ax4.legend(labels) - - plt.show() diff --git a/doc/users/next_whats_new/increased_figure_limits.rst b/doc/users/next_whats_new/increased_figure_limits.rst deleted file mode 100644 index 499701cbca38..000000000000 --- a/doc/users/next_whats_new/increased_figure_limits.rst +++ /dev/null @@ -1,9 +0,0 @@ -Increased Figure limits with Agg renderer -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Figures using the Agg renderer are now limited to 2**23 pixels in each -direction, instead of 2**16. Additionally, bugs that caused artists to not -render past 2**15 pixels horizontally have been fixed. - -Note that if you are using a GUI backend, it may have its own smaller limits -(which may themselves depend on screen size.) diff --git a/doc/users/next_whats_new/inset_indicator.rst b/doc/users/next_whats_new/inset_indicator.rst deleted file mode 100644 index 614e830e016c..000000000000 --- a/doc/users/next_whats_new/inset_indicator.rst +++ /dev/null @@ -1,18 +0,0 @@ -``InsetIndicator`` artist -~~~~~~~~~~~~~~~~~~~~~~~~~ - -`~.Axes.indicate_inset` and `~.Axes.indicate_inset_zoom` now return an instance -of `~matplotlib.inset.InsetIndicator` which contains the rectangle and -connector patches. These patches now update automatically so that - -.. code-block:: python - - ax.indicate_inset_zoom(ax_inset) - ax_inset.set_xlim(new_lim) - -now gives the same result as - -.. code-block:: python - - ax_inset.set_xlim(new_lim) - ax.indicate_inset_zoom(ax_inset) diff --git a/doc/users/next_whats_new/mouse_rotation.rst b/doc/users/next_whats_new/mouse_rotation.rst deleted file mode 100644 index c4eeab591da3..000000000000 --- a/doc/users/next_whats_new/mouse_rotation.rst +++ /dev/null @@ -1,45 +0,0 @@ -Rotating 3d plots with the mouse -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Rotating three-dimensional plots with the mouse has been made more intuitive. -The plot now reacts the same way to mouse movement, independent of the -particular orientation at hand; and it is possible to control all 3 rotational -degrees of freedom (azimuth, elevation, and roll). By default, -it uses a variation on Ken Shoemake's ARCBALL [1]_. -The particular style of mouse rotation can be set via -:rc:`axes3d.mouserotationstyle`. -See also :ref:`toolkit_mouse-rotation`. - -To revert to the original mouse rotation style, -create a file ``matplotlibrc`` with contents:: - - axes3d.mouserotationstyle: azel - -To try out one of the various mouse rotation styles: - -.. code:: - - import matplotlib as mpl - mpl.rcParams['axes3d.mouserotationstyle'] = 'trackball' # 'azel', 'trackball', 'sphere', or 'arcball' - - import numpy as np - import matplotlib.pyplot as plt - from matplotlib import cm - - ax = plt.figure().add_subplot(projection='3d') - - X = np.arange(-5, 5, 0.25) - Y = np.arange(-5, 5, 0.25) - X, Y = np.meshgrid(X, Y) - R = np.sqrt(X**2 + Y**2) - Z = np.sin(R) - - surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, - linewidth=0, antialiased=False) - - plt.show() - - -.. [1] Ken Shoemake, "ARCBALL: A user interface for specifying - three-dimensional rotation using a mouse", in Proceedings of Graphics - Interface '92, 1992, pp. 151-156, https://doi.org/10.20380/GI1992.18 diff --git a/doc/users/next_whats_new/mpl_toolkit_colorbar_pad.rst b/doc/users/next_whats_new/mpl_toolkit_colorbar_pad.rst deleted file mode 100644 index f22b7c79089c..000000000000 --- a/doc/users/next_whats_new/mpl_toolkit_colorbar_pad.rst +++ /dev/null @@ -1,6 +0,0 @@ -Fix padding of single colorbar for ``ImageGrid`` ------------------------------------------------- - -``ImageGrid`` with ``cbar_mode="single"`` no longer adds the ``axes_pad`` between the -axes and the colorbar for ``cbar_location`` "left" and "bottom". If desired, add additional spacing -using ``cbar_pad``. diff --git a/doc/users/next_whats_new/pass_pandasDataFrame_into_table.rst b/doc/users/next_whats_new/pass_pandasDataFrame_into_table.rst deleted file mode 100644 index aaefa1b2011b..000000000000 --- a/doc/users/next_whats_new/pass_pandasDataFrame_into_table.rst +++ /dev/null @@ -1,20 +0,0 @@ -``ax.table`` will accept a pandas DataFrame --------------------------------------------- - -The `~.axes.Axes.table` method can now accept a Pandas DataFrame for the ``cellText`` argument. - -.. code-block:: python - - import matplotlib.pyplot as plt - import pandas as pd - - data = { - 'Letter': ['A', 'B', 'C'], - 'Number': [100, 200, 300] - } - - df = pd.DataFrame(data) - fig, ax = plt.subplots() - table = ax.table(df, loc='center') # or table = ax.table(cellText=df, loc='center') - ax.axis('off') - plt.show() diff --git a/doc/users/next_whats_new/subfigures_change_order.rst b/doc/users/next_whats_new/subfigures_change_order.rst deleted file mode 100644 index e059d71755bc..000000000000 --- a/doc/users/next_whats_new/subfigures_change_order.rst +++ /dev/null @@ -1,29 +0,0 @@ -Subfigures no longer provisional --------------------------------- - -The API on `.Figure.subfigures` and `.SubFigure` are now considered stable. - - -Subfigures are now added in row-major order -------------------------------------------- - -``Figure.subfigures`` are now added in row-major order for API consistency. - - -.. plot:: - :include-source: true - :alt: Example of creating 3 by 3 subfigures. - - import matplotlib.pyplot as plt - - fig = plt.figure() - subfigs = fig.subfigures(3, 3) - x = np.linspace(0, 10, 100) - - for i, sf in enumerate(fig.subfigs): - ax = sf.subplots() - ax.plot(x, np.sin(x + i), label=f'Subfigure {i+1}') - sf.suptitle(f'Subfigure {i+1}') - ax.set_xticks([]) - ax.set_yticks([]) - plt.show() diff --git a/doc/users/next_whats_new/svg_id_rc.rst b/doc/users/next_whats_new/svg_id_rc.rst deleted file mode 100644 index 531d14860167..000000000000 --- a/doc/users/next_whats_new/svg_id_rc.rst +++ /dev/null @@ -1,32 +0,0 @@ -``svg.id`` rcParam -~~~~~~~~~~~~~~~~~~ -:rc:`svg.id` lets you insert an ``id`` attribute into the top-level ```` tag. - -e.g. ``rcParams["svg.id"] = "svg1"`` results in -default), no ``id`` tag is included - -.. code-block:: XML - - - -This is useful if you would like to link the entire matplotlib SVG file within -another SVG file with the ```` tag. - -.. code-block:: XML - - - - -Where the ``#svg1`` indicator will now refer to the top level ```` tag, and -will hence result in the inclusion of the entire file. diff --git a/doc/users/next_whats_new/update_features.rst b/doc/users/next_whats_new/update_features.rst deleted file mode 100644 index a655a06b9e23..000000000000 --- a/doc/users/next_whats_new/update_features.rst +++ /dev/null @@ -1,4 +0,0 @@ -Miscellaneous Changes ---------------------- - -- The `matplotlib.ticker.ScalarFormatter` class has gained a new instantiating parameter ``usetex``. diff --git a/doc/users/next_whats_new/violinplot_orientation.rst b/doc/users/next_whats_new/violinplot_orientation.rst deleted file mode 100644 index 23d81446ad35..000000000000 --- a/doc/users/next_whats_new/violinplot_orientation.rst +++ /dev/null @@ -1,21 +0,0 @@ -``violinplot`` and ``violin`` orientation parameter -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Violinplots have a new parameter *orientation: {"vertical", "horizontal"}* -to change the orientation of the plot. This will replace the deprecated -*vert: bool* parameter. - - -.. plot:: - :include-source: true - :alt: Example of creating 4 horizontal violinplots. - - import matplotlib.pyplot as plt - import numpy as np - - fig, ax = plt.subplots() - np.random.seed(19680801) - all_data = [np.random.normal(0, std, 100) for std in range(6, 10)] - - ax.violinplot(all_data, orientation='horizontal') - plt.show() diff --git a/doc/users/prev_whats_new/github_stats_3.9.0.rst b/doc/users/prev_whats_new/github_stats_3.9.0.rst index b1d229ffbfa1..5ddbdfd6f2bd 100644 --- a/doc/users/prev_whats_new/github_stats_3.9.0.rst +++ b/doc/users/prev_whats_new/github_stats_3.9.0.rst @@ -1,4 +1,4 @@ -.. _github-stats-3-9.0: +.. _github-stats-3-9-0: GitHub statistics for 3.9.0 (May 15, 2024) ========================================== diff --git a/doc/users/prev_whats_new/github_stats_3.9.2.rst b/doc/users/prev_whats_new/github_stats_3.9.2.rst new file mode 100644 index 000000000000..542e0d81ce32 --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.9.2.rst @@ -0,0 +1,96 @@ +.. _github-stats-3-9-2: + +GitHub statistics for 3.9.2 (Aug 12, 2024) +========================================== + +GitHub statistics for 2024/07/04 (tag: v3.9.1) - 2024/08/12 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 9 issues and merged 45 pull requests. +The full list can be seen `on GitHub `__ + +The following 20 authors contributed 67 commits. + +* Adam J. Stewart +* Anthony Lee +* Caitlin Hathaway +* ClarkeAC +* dependabot[bot] +* Elliott Sales de Andrade +* Filippo Balzaretti +* Greg Lucas +* hannah +* Ian Thomas +* Jody Klymak +* Kyle Sunden +* Oscar Gustafsson +* Randolf Scholz +* Refael Ackermann +* Ruth Comer +* Scott Shambaugh +* Sean Smith +* Thomas A Caswell +* Tim Hoffmann + +GitHub issues and pull requests: + +Pull Requests (45): + +* :ghpull:`28687`: BLD: Include MSVCP140 runtime statically +* :ghpull:`28679`: Run delvewheel with path to required msvcp140.dll +* :ghpull:`28695`: Backport PR #27797 on branch v3.9.x (DOC: Use video files for saving animations) +* :ghpull:`28688`: Backport PR #28293 and #28668: Enable 3.13 wheels and bump cibuildwheel +* :ghpull:`27797`: DOC: Use video files for saving animations +* :ghpull:`28692`: Backport PR #28632 on branch v3.9.x (DOC: Tell sphinx-gallery to link mpl_toolkits from our build) +* :ghpull:`28632`: DOC: Tell sphinx-gallery to link mpl_toolkits from our build +* :ghpull:`28668`: Bump the actions group with 2 updates +* :ghpull:`28686`: Backport PR #28682 on branch v3.9.x (Fix warnings from mingw compilers) +* :ghpull:`28682`: Fix warnings from mingw compilers +* :ghpull:`28676`: Backport PR #28577 on branch v3.9.x (Copy all internals from initial Tick to lazy ones) +* :ghpull:`28577`: Copy all internals from initial Tick to lazy ones +* :ghpull:`28674`: Backport PR #28650 on branch v3.9.x (remove out of date todos on animation.py) +* :ghpull:`28650`: remove out of date todos on animation.py +* :ghpull:`28656`: Backport PR #28649 on branch v3.9.x (FIX: improve formatting of image values in cases of singular norms) +* :ghpull:`28665`: Backport PR #28546 on branch v3.9.x (DOC: Clarify/simplify example of multiple images with one colorbar) +* :ghpull:`28649`: FIX: improve formatting of image values in cases of singular norms +* :ghpull:`28635`: BLD: windows wheels +* :ghpull:`28645`: Backport PR #28644 on branch v3.9.x (DOC: Fix matching for version switcher) +* :ghpull:`28640`: Backport PR #28634 on branch v3.9.x (Closed open div tag in color.ColorMap._repr_html_) +* :ghpull:`28634`: Closed open div tag in color.ColorMap._repr_html_ +* :ghpull:`28636`: Backport PR #28625 on branch v3.9.x (added typing_extensions.Self to _AxesBase.twinx) +* :ghpull:`28625`: added typing_extensions.Self to _AxesBase.twinx +* :ghpull:`28622`: Backport PR #28621 on branch v3.9.x (TYP: Fix a typo in animation.pyi) +* :ghpull:`28621`: TYP: Fix a typo in animation.pyi +* :ghpull:`28605`: Backport PR #28604 on branch v3.9.x (cycler signature update.) +* :ghpull:`28604`: cycler signature update. +* :ghpull:`28598`: Pin PyQt6 back on Ubuntu 20.04 +* :ghpull:`28596`: Backport PR #28518 on branch v3.9.x ([TYP] Fix overload of ``pyplot.subplots``) +* :ghpull:`28518`: [TYP] Fix overload of ``pyplot.subplots`` +* :ghpull:`28591`: Backport PR #28580 on branch v3.9.x (Bump actions/attest-build-provenance from 1.3.2 to 1.3.3 in the actions group) +* :ghpull:`28580`: Bump actions/attest-build-provenance from 1.3.2 to 1.3.3 in the actions group +* :ghpull:`28586`: Backport PR #28582 on branch v3.9.x (FIX: make sticky edge tolerance relative to data range) +* :ghpull:`28582`: FIX: make sticky edge tolerance relative to data range +* :ghpull:`28572`: Backport PR #28571 on branch v3.9.x (DOC: Add version directive to hatch parameter in stackplot) +* :ghpull:`28571`: DOC: Add version directive to hatch parameter in stackplot +* :ghpull:`28564`: Backport PR #28534 on branch v3.9.x ([BLD] Fix WSL build warning) +* :ghpull:`28563`: Backport PR #28526 on branch v3.9.x (Bump pypa/cibuildwheel from 2.19.1 to 2.19.2 in the actions group) +* :ghpull:`28534`: [BLD] Fix WSL build warning +* :ghpull:`28526`: Bump pypa/cibuildwheel from 2.19.1 to 2.19.2 in the actions group +* :ghpull:`28552`: Backport PR #28541 on branch v3.9.x (MNT: be more careful about disk I/O failures when writing font cache) +* :ghpull:`28541`: MNT: be more careful about disk I/O failures when writing font cache +* :ghpull:`28524`: Backport PR #28523 on branch v3.9.x (Fix value error when set widget size to zero while using FigureCanvasQT ) +* :ghpull:`28523`: Fix value error when set widget size to zero while using FigureCanvasQT +* :ghpull:`28519`: Backport PR #28517 on branch v3.9.x (DOC: better cross referencing for animations) + +Issues (9): + +* :ghissue:`28551`: [Bug]: Possible issue with Matplotlib 3.9.1 wheel on Windows only +* :ghissue:`28250`: [Doc]: Sphinx gallery links mispointed for Axes3D methods +* :ghissue:`28574`: [Bug]: Nondeterministic behavior with subplot spacing and constrained layout +* :ghissue:`28626`: [Doc]: Remove old TODO's from animation.py +* :ghissue:`28648`: [Bug]: format_image_data on an image of only zeros produces a large number of zeros +* :ghissue:`28624`: [Bug]: Bad type hint in ``_AxesBase.twinx()`` +* :ghissue:`28567`: [Bug]: sticky edge related changes for datetime plots +* :ghissue:`28533`: [Doc]: Stackplot hatch functionality has version dependencies +* :ghissue:`28538`: [Bug]: Permission denied when importing matplotlib.pyplot diff --git a/doc/users/prev_whats_new/github_stats_3.9.3.rst b/doc/users/prev_whats_new/github_stats_3.9.3.rst new file mode 100644 index 000000000000..06f0232c338c --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.9.3.rst @@ -0,0 +1,108 @@ +.. _github-stats-3-9-3: + +GitHub statistics for 3.9.3 (Nov 30, 2024) +========================================== + +GitHub statistics for 2024/08/12 (tag: v3.9.2) - 2024/11/30 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 6 issues and merged 62 pull requests. +The full list can be seen `on GitHub `__ + +The following 18 authors contributed 90 commits. + +* Andresporcruz +* Antony Lee +* Charlie LeWarne +* dependabot[bot] +* Elliott Sales de Andrade +* Gavin S +* Greg Lucas +* hannah +* Kyle Sunden +* Kyra Cho +* kyracho +* Lumberbot (aka Jack) +* Michael Hinton +* Oscar Gustafsson +* Ruth Comer +* Thomas A Caswell +* Tim Hoffmann +* vittoboa + +GitHub issues and pull requests: + +Pull Requests (62): + +* :ghpull:`29195`: Backport PR #29191 on branch v3.9.x (ci: Simplify 3.13t test setup) +* :ghpull:`29191`: ci: Simplify 3.13t test setup +* :ghpull:`29176`: Backport PR #29148 on branch v3.9.x (Don't fail on equal-but-differently-named cmaps in qt figureoptions.) +* :ghpull:`29148`: Don't fail on equal-but-differently-named cmaps in qt figureoptions. +* :ghpull:`29165`: Backport PR #29153 on branch v3.9.x (Bump codecov/codecov-action from 4 to 5 in the actions group) +* :ghpull:`29153`: Bump codecov/codecov-action from 4 to 5 in the actions group +* :ghpull:`29149`: Backport CI config updates to v3.9.x +* :ghpull:`29121`: Backport PR #29120 on branch v3.9.x (DOC: Switch nested pie example from cmaps to color_sequences) +* :ghpull:`29071`: Bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0 in the actions group +* :ghpull:`29046`: Backport PR #28981 on branch v3.9.x (FIX: macos: Use standard NSApp run loop in our input hook) +* :ghpull:`28981`: FIX: macos: Use standard NSApp run loop in our input hook +* :ghpull:`29041`: Backport PR #29035 on branch v3.9.x (FIX: Don't set_wmclass on GTK3) +* :ghpull:`29035`: FIX: Don't set_wmclass on GTK3 +* :ghpull:`29037`: Backport PR #29036 on branch v3.9.x (Don't pass redundant inline=True to example clabel() calls.) +* :ghpull:`29032`: Backport PR #27569 on branch v3.9.x (DOC: initial tags for statistics section of gallery) +* :ghpull:`29034`: Backport PR #29031 on branch v3.9.x (DOC: Fix copy-paste typo in ColorSequenceRegistry) +* :ghpull:`29031`: DOC: Fix copy-paste typo in ColorSequenceRegistry +* :ghpull:`29015`: Backport PR #29014 on branch v3.9.x (FIX: fake out setuptools scm in tox on ci) +* :ghpull:`29014`: FIX: fake out setuptools scm in tox on ci +* :ghpull:`29010`: Backport PR #29005 on branch v3.9.x (DOC: Update meson-python intersphinx link) +* :ghpull:`29006`: Backport PR #28993 on branch v3.9.x (FIX: contourf hatches use multiple edgecolors) +* :ghpull:`28993`: FIX: contourf hatches use multiple edgecolors +* :ghpull:`28988`: Backport PR #28987 on branch v3.9.x (Fix: Do not use numeric tolerances for axline special cases) +* :ghpull:`28947`: Backport PR #28925 on branch v3.9.x (TST: handle change in pytest.importorskip behavior) +* :ghpull:`28989`: Backport PR #28972 on branch v3.9.x (Switch macOS 12 runner images to macOS 13) +* :ghpull:`28972`: Switch macOS 12 runner images to macOS 13 +* :ghpull:`28987`: Fix: Do not use numeric tolerances for axline special cases +* :ghpull:`28954`: Backport PR #28952 on branch v3.9.x (BLD: update trove metadata to support py3.13) +* :ghpull:`28952`: BLD: update trove metadata to support py3.13 +* :ghpull:`28887`: Backport PR #28883 on branch v3.9.x (Only check X11 when running Tkinter tests) +* :ghpull:`28926`: Backport PR #28689 on branch v3.9.x (ci: Enable testing on Python 3.13) +* :ghpull:`28925`: TST: handle change in pytest.importorskip behavior +* :ghpull:`28945`: Backport PR #28943 on branch v3.9.x (DOC: Clarify the returned line of axhline()/axvline()) +* :ghpull:`28939`: Backport PR #28900 on branch v3.9.x (DOC: Improve fancybox demo) +* :ghpull:`28900`: DOC: Improve fancybox demo +* :ghpull:`28902`: Backport PR #28881 on branch v3.9.x (Fix ``axline`` for slopes <= 1E-8. Closes #28386) +* :ghpull:`28431`: Fix ``axline`` for slopes < 1E-8 +* :ghpull:`28881`: Fix ``axline`` for slopes <= 1E-8. Closes #28386 +* :ghpull:`28883`: Only check X11 when running Tkinter tests +* :ghpull:`28859`: Backport PR #28858 on branch v3.9.x (Fix flaky labelcolor tests) +* :ghpull:`28858`: Fix flaky labelcolor tests +* :ghpull:`28839`: Backport PR #28836 on branch v3.9.x (MNT: Use __init__ parameters of font properties) +* :ghpull:`28836`: MNT: Use __init__ parameters of font properties +* :ghpull:`28828`: Backport PR #28818 on branch v3.9.x (Resolve configdir so that it's not a symlink when is_dir() is called) +* :ghpull:`28818`: Resolve configdir so that it's not a symlink when is_dir() is called +* :ghpull:`28811`: Backport PR #28810 on branch v3.9.x (Document how to obtain sans-serif usetex math.) +* :ghpull:`28806`: Backport PR #28805 on branch v3.9.x (add brackets to satisfy the new sequence requirement) +* :ghpull:`28802`: Backport PR #28798 on branch v3.9.x (DOC: Correctly list modules that have been internalized) +* :ghpull:`28791`: Backport PR #28790 on branch v3.9.x (DOC: Fix duplicate Figure.set_dpi entry) +* :ghpull:`28787`: Backport PR #28706 on branch v3.9.x (Add Returns info to to_jshtml docstring) +* :ghpull:`28706`: Add Returns info to to_jshtml docstring +* :ghpull:`28751`: Backport PR #28271 on branch v3.9.x (Fix draggable legend disappearing when picking while use_blit=True) +* :ghpull:`28271`: Fix draggable legend disappearing when picking while use_blit=True +* :ghpull:`28747`: Backport PR #28743 on branch v3.9.x (Minor fixes in ticker docs) +* :ghpull:`28743`: Minor fixes in ticker docs +* :ghpull:`28738`: Backport PR #28737 on branch v3.9.x (TST: Fix image comparison directory for test_striped_lines) +* :ghpull:`28740`: Backport PR #28739 on branch v3.9.x (Tweak interactivity docs wording (and fix capitalization).) +* :ghpull:`28737`: TST: Fix image comparison directory for test_striped_lines +* :ghpull:`28733`: Backport PR #28732 on branch v3.9.x (Renames the minumumSizeHint method to minimumSizeHint) +* :ghpull:`28732`: Renames the minumumSizeHint method to minimumSizeHint +* :ghpull:`28689`: ci: Enable testing on Python 3.13 +* :ghpull:`28724`: Backport fixes from #28711 + +Issues (6): + +* :ghissue:`28960`: [Bug]: High CPU utilization of the macosx backend +* :ghissue:`28990`: [Bug]: no longer able to set multiple hatch colors +* :ghissue:`28870`: [Bug]: axline doesn't work with some axes scales +* :ghissue:`28386`: [Bug]: Minor issue - Drawing an axline sets slopes less than 1E-8 to 0 +* :ghissue:`28817`: [Bug]: ``~/.config/matplotlib`` is never used because ``~/.config`` is a symlink +* :ghissue:`28716`: Size hint method in Qt backend should be named ``minimumSizeHint``, not ``minumumSizeHint`` diff --git a/doc/users/prev_whats_new/github_stats_3.9.4.rst b/doc/users/prev_whats_new/github_stats_3.9.4.rst new file mode 100644 index 000000000000..a821d2fc1f57 --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.9.4.rst @@ -0,0 +1,30 @@ +.. _github-stats-3-9-4: + +GitHub statistics for 3.9.4 (Dec 13, 2024) +========================================== + +GitHub statistics for 2024/11/30 (tag: v3.9.3) - 2024/12/13 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 2 issues and merged 3 pull requests. +The full list can be seen `on GitHub `__ + +The following 3 authors contributed 15 commits. + +* Elliott Sales de Andrade +* Scott Shambaugh +* Victor Liu + +GitHub issues and pull requests: + +Pull Requests (3): + +* :ghpull:`29297`: Backport PR #29295 on branch v3.9.x (BLD: Pin meson-python to <0.17.0) +* :ghpull:`29295`: BLD: Pin meson-python to <0.17.0 +* :ghpull:`29175`: addressing issue #29156, converted ps to array before slicing + +Issues (2): + +* :ghissue:`29229`: [Bug]: Icons do not work with GTK +* :ghissue:`29156`: [Bug]: Poly3DCollection initialization cannot properly handle parameter verts when it is a list of nested tuples and shade is False diff --git a/doc/users/prev_whats_new/whats_new_3.10.0.rst b/doc/users/prev_whats_new/whats_new_3.10.0.rst new file mode 100644 index 000000000000..bc160787aebc --- /dev/null +++ b/doc/users/prev_whats_new/whats_new_3.10.0.rst @@ -0,0 +1,479 @@ +New more-accessible color cycle +------------------------------- + +A new color cycle named 'petroff10' was added. This cycle was constructed using a +combination of algorithmically-enforced accessibility constraints, including +color-vision-deficiency modeling, and a machine-learning-based aesthetics model +developed from a crowdsourced color-preference survey. It aims to be both +generally pleasing aesthetically and colorblind accessible such that it could +serve as a default in the aim of universal design. For more details +see `Petroff, M. A.: "Accessible Color Sequences for Data Visualization" +`_ and related `SciPy talk`_. A demonstration +is included in the style sheets reference_. To load this color cycle in place +of the default:: + + import matplotlib.pyplot as plt + plt.style.use('petroff10') + +.. _reference: https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html +.. _SciPy talk: https://www.youtube.com/watch?v=Gapv8wR5DYU + +Dark-mode diverging colormaps +----------------------------- + +Three diverging colormaps have been added: "berlin", "managua", and "vanimo". +They are dark-mode diverging colormaps, with minimum lightness at the center, +and maximum at the extremes. These are taken from F. Crameri's Scientific +colour maps version 8.0.1 (DOI: https://doi.org/10.5281/zenodo.1243862). + + +.. plot:: + :include-source: true + :alt: Example figures using "imshow" with dark-mode diverging colormaps on positive and negative data. First panel: "berlin" (blue to red with a black center); second panel: "managua" (orange to cyan with a dark purple center); third panel: "vanimo" (pink to green with a black center). + + import numpy as np + import matplotlib.pyplot as plt + + vals = np.linspace(-5, 5, 100) + x, y = np.meshgrid(vals, vals) + img = np.sin(x*y) + + _, ax = plt.subplots(1, 3) + ax[0].imshow(img, cmap=plt.cm.berlin) + ax[1].imshow(img, cmap=plt.cm.managua) + ax[2].imshow(img, cmap=plt.cm.vanimo) + +Specifying a single color in ``contour`` and ``contourf`` +--------------------------------------------------------- + +`~.Axes.contour` and `~.Axes.contourf` previously accepted a single color +provided it was expressed as a string. This restriction has now been removed +and a single color in any format described in the :ref:`colors_def` tutorial +may be passed. + +.. plot:: + :include-source: true + :alt: Two-panel example contour plots. The left panel has all transparent red contours. The right panel has all dark blue contours. + + import matplotlib.pyplot as plt + + fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(6, 3)) + z = [[0, 1], [1, 2]] + + ax1.contour(z, colors=('r', 0.4)) + ax2.contour(z, colors=(0.1, 0.2, 0.5)) + + plt.show() + +Exception handling control +-------------------------- + +The exception raised when an invalid keyword parameter is passed now includes +that parameter name as the exception's ``name`` property. This provides more +control for exception handling: + + +.. code-block:: python + + import matplotlib.pyplot as plt + + def wobbly_plot(args, **kwargs): + w = kwargs.pop('wobble_factor', None) + + try: + plt.plot(args, **kwargs) + except AttributeError as e: + raise AttributeError(f'wobbly_plot does not take parameter {e.name}') from e + + + wobbly_plot([0, 1], wibble_factor=5) + +.. code-block:: + + AttributeError: wobbly_plot does not take parameter wibble_factor + +Preliminary support for free-threaded CPython 3.13 +-------------------------------------------------- + +Matplotlib 3.10 has preliminary support for the free-threaded build of CPython 3.13. See +https://py-free-threading.github.io, `PEP 703 `_ and +the `CPython 3.13 release notes +`_ for more detail +about free-threaded Python. + +Support for free-threaded Python does not mean that Matplotlib is wholly thread safe. We +expect that use of a Figure within a single thread will work, and though input data is +usually copied, modification of data objects used for a plot from another thread may +cause inconsistencies in cases where it is not. Use of any global state (such as the +``pyplot`` module) is highly discouraged and unlikely to work consistently. Also note +that most GUI toolkits expect to run on the main thread, so interactive usage may be +limited or unsupported from other threads. + +If you are interested in free-threaded Python, for example because you have a +multiprocessing-based workflow that you are interested in running with Python threads, we +encourage testing and experimentation. If you run into problems that you suspect are +because of Matplotlib, please open an issue, checking first if the bug also occurs in the +“regular” non-free-threaded CPython 3.13 build. + +Increased Figure limits with Agg renderer +----------------------------------------- + +Figures using the Agg renderer are now limited to 2**23 pixels in each +direction, instead of 2**16. Additionally, bugs that caused artists to not +render past 2**15 pixels horizontally have been fixed. + +Note that if you are using a GUI backend, it may have its own smaller limits +(which may themselves depend on screen size.) + +Vectorized ``hist`` style parameters +------------------------------------ + +The parameters *hatch*, *edgecolor*, *facecolor*, *linewidth* and *linestyle* +of the `~matplotlib.axes.Axes.hist` method are now vectorized. +This means that you can pass in individual parameters for each histogram +when the input *x* has multiple datasets. + + +.. plot:: + :include-source: true + :alt: Four charts, each displaying stacked histograms of three Poisson distributions. Each chart differentiates the histograms using various parameters: top left uses different linewidths, top right uses different hatches, bottom left uses different edgecolors, and bottom right uses different facecolors. Each histogram on the left side also has a different edgecolor. + + import matplotlib.pyplot as plt + import numpy as np + np.random.seed(19680801) + + fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(9, 9)) + + data1 = np.random.poisson(5, 1000) + data2 = np.random.poisson(7, 1000) + data3 = np.random.poisson(10, 1000) + + labels = ["Data 1", "Data 2", "Data 3"] + + ax1.hist([data1, data2, data3], bins=range(17), histtype="step", stacked=True, + edgecolor=["red", "green", "blue"], linewidth=[1, 2, 3]) + ax1.set_title("Different linewidths") + ax1.legend(labels) + + ax2.hist([data1, data2, data3], bins=range(17), histtype="barstacked", + hatch=["/", ".", "*"]) + ax2.set_title("Different hatch patterns") + ax2.legend(labels) + + ax3.hist([data1, data2, data3], bins=range(17), histtype="bar", fill=False, + edgecolor=["red", "green", "blue"], linestyle=["--", "-.", ":"]) + ax3.set_title("Different linestyles") + ax3.legend(labels) + + ax4.hist([data1, data2, data3], bins=range(17), histtype="barstacked", + facecolor=["red", "green", "blue"]) + ax4.set_title("Different facecolors") + ax4.legend(labels) + + plt.show() + +``InsetIndicator`` artist +------------------------- + +`~.Axes.indicate_inset` and `~.Axes.indicate_inset_zoom` now return an instance +of `~matplotlib.inset.InsetIndicator` which contains the rectangle and +connector patches. These patches now update automatically so that + +.. code-block:: python + + ax.indicate_inset_zoom(ax_inset) + ax_inset.set_xlim(new_lim) + +now gives the same result as + +.. code-block:: python + + ax_inset.set_xlim(new_lim) + ax.indicate_inset_zoom(ax_inset) + +``matplotlib.ticker.EngFormatter`` can computes offsets now +----------------------------------------------------------- + +`matplotlib.ticker.EngFormatter` has gained the ability to show an offset text near the +axis. Using logic shared with `matplotlib.ticker.ScalarFormatter`, it is capable of +deciding whether the data qualifies having an offset and show it with an appropriate SI +quantity prefix, and with the supplied ``unit``. + +To enable this new behavior, simply pass ``useOffset=True`` when you +instantiate `matplotlib.ticker.EngFormatter`. See example +:doc:`/gallery/ticks/engformatter_offset`. + +.. plot:: gallery/ticks/engformatter_offset.py + + +Fix padding of single colorbar for ``ImageGrid`` +------------------------------------------------ + +``ImageGrid`` with ``cbar_mode="single"`` no longer adds the ``axes_pad`` between the +axes and the colorbar for ``cbar_location`` "left" and "bottom". If desired, add additional spacing +using ``cbar_pad``. + +``ax.table`` will accept a pandas DataFrame +-------------------------------------------- + +The `~.axes.Axes.table` method can now accept a Pandas DataFrame for the ``cellText`` argument. + +.. code-block:: python + + import matplotlib.pyplot as plt + import pandas as pd + + data = { + 'Letter': ['A', 'B', 'C'], + 'Number': [100, 200, 300] + } + + df = pd.DataFrame(data) + fig, ax = plt.subplots() + table = ax.table(df, loc='center') # or table = ax.table(cellText=df, loc='center') + ax.axis('off') + plt.show() + + +Subfigures are now added in row-major order +------------------------------------------- + +``Figure.subfigures`` are now added in row-major order for API consistency. + + +.. plot:: + :include-source: true + :alt: Example of creating 3 by 3 subfigures. + + import matplotlib.pyplot as plt + + fig = plt.figure() + subfigs = fig.subfigures(3, 3) + x = np.linspace(0, 10, 100) + + for i, sf in enumerate(fig.subfigs): + ax = sf.subplots() + ax.plot(x, np.sin(x + i), label=f'Subfigure {i+1}') + sf.suptitle(f'Subfigure {i+1}') + ax.set_xticks([]) + ax.set_yticks([]) + plt.show() + +``svg.id`` rcParam +------------------ + +:rc:`svg.id` lets you insert an ``id`` attribute into the top-level ```` tag. + +e.g. ``rcParams["svg.id"] = "svg1"`` results in +default), no ``id`` tag is included + +.. code-block:: XML + + + +This is useful if you would like to link the entire matplotlib SVG file within +another SVG file with the ```` tag. + +.. code-block:: XML + + + + +Where the ``#svg1`` indicator will now refer to the top level ```` tag, and +will hence result in the inclusion of the entire file. + +``boxplot`` and ``bxp`` orientation parameter +--------------------------------------------- + +Boxplots have a new parameter *orientation: {"vertical", "horizontal"}* +to change the orientation of the plot. This replaces the deprecated +*vert: bool* parameter. + + +.. plot:: + :include-source: true + :alt: Example of creating 4 horizontal boxplots. + + import matplotlib.pyplot as plt + import numpy as np + + fig, ax = plt.subplots() + np.random.seed(19680801) + all_data = [np.random.normal(0, std, 100) for std in range(6, 10)] + + ax.boxplot(all_data, orientation='horizontal') + plt.show() + + +``violinplot`` and ``violin`` orientation parameter +--------------------------------------------------- + +Violinplots have a new parameter *orientation: {"vertical", "horizontal"}* +to change the orientation of the plot. This will replace the deprecated +*vert: bool* parameter. + + +.. plot:: + :include-source: true + :alt: Example of creating 4 horizontal violinplots. + + import matplotlib.pyplot as plt + import numpy as np + + fig, ax = plt.subplots() + np.random.seed(19680801) + all_data = [np.random.normal(0, std, 100) for std in range(6, 10)] + + ax.violinplot(all_data, orientation='horizontal') + plt.show() + +``FillBetweenPolyCollection`` +----------------------------- + +The new class :class:`matplotlib.collections.FillBetweenPolyCollection` provides +the ``set_data`` method, enabling e.g. resampling +(:file:`galleries/event_handling/resample.html`). +:func:`matplotlib.axes.Axes.fill_between` and +:func:`matplotlib.axes.Axes.fill_betweenx` now return this new class. + +.. code-block:: python + + import numpy as np + from matplotlib import pyplot as plt + + t = np.linspace(0, 1) + + fig, ax = plt.subplots() + coll = ax.fill_between(t, -t**2, t**2) + fig.savefig("before.png") + + coll.set_data(t, -t**4, t**4) + fig.savefig("after.png") + +Fill between 3D lines +--------------------- + +The new method `.Axes3D.fill_between` allows to fill the surface between two +3D lines with polygons. + +.. plot:: + :include-source: + :alt: Example of 3D fill_between + + N = 50 + theta = np.linspace(0, 2*np.pi, N) + + x1 = np.cos(theta) + y1 = np.sin(theta) + z1 = 0.1 * np.sin(6 * theta) + + x2 = 0.6 * np.cos(theta) + y2 = 0.6 * np.sin(theta) + z2 = 2 # Note that scalar values work in addition to length N arrays + + fig = plt.figure() + ax = fig.add_subplot(projection='3d') + ax.fill_between(x1, y1, z1, x2, y2, z2, + alpha=0.5, edgecolor='k') + +Rotating 3d plots with the mouse +-------------------------------- + +Rotating three-dimensional plots with the mouse has been made more intuitive. +The plot now reacts the same way to mouse movement, independent of the +particular orientation at hand; and it is possible to control all 3 rotational +degrees of freedom (azimuth, elevation, and roll). By default, +it uses a variation on Ken Shoemake's ARCBALL [1]_. +The particular style of mouse rotation can be set via +:rc:`axes3d.mouserotationstyle`. +See also :ref:`toolkit_mouse-rotation`. + +To revert to the original mouse rotation style, +create a file ``matplotlibrc`` with contents:: + + axes3d.mouserotationstyle: azel + +To try out one of the various mouse rotation styles: + +.. code:: + + import matplotlib as mpl + mpl.rcParams['axes3d.mouserotationstyle'] = 'trackball' # 'azel', 'trackball', 'sphere', or 'arcball' + + import numpy as np + import matplotlib.pyplot as plt + from matplotlib import cm + + ax = plt.figure().add_subplot(projection='3d') + + X = np.arange(-5, 5, 0.25) + Y = np.arange(-5, 5, 0.25) + X, Y = np.meshgrid(X, Y) + R = np.sqrt(X**2 + Y**2) + Z = np.sin(R) + + surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, + linewidth=0, antialiased=False) + + plt.show() + + +.. [1] Ken Shoemake, "ARCBALL: A user interface for specifying + three-dimensional rotation using a mouse", in Proceedings of Graphics + Interface '92, 1992, pp. 151-156, https://doi.org/10.20380/GI1992.18 + + + +Data in 3D plots can now be dynamically clipped to the axes view limits +----------------------------------------------------------------------- + +All 3D plotting functions now support the *axlim_clip* keyword argument, which +will clip the data to the axes view limits, hiding all data outside those +bounds. This clipping will be dynamically applied in real time while panning +and zooming. + +Please note that if one vertex of a line segment or 3D patch is clipped, then +the entire segment or patch will be hidden. Not being able to show partial +lines or patches such that they are "smoothly" cut off at the boundaries of the +view box is a limitation of the current renderer. + +.. plot:: + :include-source: true + :alt: Example of default behavior (blue) and axlim_clip=True (orange) + + import matplotlib.pyplot as plt + import numpy as np + + fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) + x = np.arange(-5, 5, 0.5) + y = np.arange(-5, 5, 0.5) + X, Y = np.meshgrid(x, y) + R = np.sqrt(X**2 + Y**2) + Z = np.sin(R) + + # Note that when a line has one vertex outside the view limits, the entire + # line is hidden. The same is true for 3D patches (not shown). + # In this example, data where x < 0 or z > 0.5 is clipped. + ax.plot_wireframe(X, Y, Z, color='C0') + ax.plot_wireframe(X, Y, Z, color='C1', axlim_clip=True) + ax.set(xlim=(0, 10), ylim=(-5, 5), zlim=(-1, 0.5)) + ax.legend(['axlim_clip=False (default)', 'axlim_clip=True']) + + +Miscellaneous Changes +--------------------- + +- The `matplotlib.ticker.ScalarFormatter` class has gained a new instantiating parameter ``usetex``. +- Creating an Axes is now 20-25% faster due to internal optimizations. +- The API on `.Figure.subfigures` and `.SubFigure` are now considered stable. diff --git a/doc/users/release_notes.rst b/doc/users/release_notes.rst index 74bc0f13bf1f..3bb30bf2fa49 100644 --- a/doc/users/release_notes.rst +++ b/doc/users/release_notes.rst @@ -12,6 +12,14 @@ Release notes .. include:: release_notes_next.rst +Version 3.10 +^^^^^^^^^^^^ +.. toctree:: + :maxdepth: 1 + + prev_whats_new/whats_new_3.10.0.rst + ../api/prev_api_changes/api_changes_3.10.0.rst + prev_whats_new/github_stats_3.10.0.rst Version 3.9 ^^^^^^^^^^^ @@ -22,7 +30,9 @@ Version 3.9 ../api/prev_api_changes/api_changes_3.9.2.rst ../api/prev_api_changes/api_changes_3.9.1.rst ../api/prev_api_changes/api_changes_3.9.0.rst - github_stats.rst + prev_whats_new/github_stats_3.9.4.rst + prev_whats_new/github_stats_3.9.3.rst + prev_whats_new/github_stats_3.9.2.rst prev_whats_new/github_stats_3.9.1.rst prev_whats_new/github_stats_3.9.0.rst diff --git a/doc/users/resources/index.rst b/doc/users/resources/index.rst index 77010f176048..7e2339ee8191 100644 --- a/doc/users/resources/index.rst +++ b/doc/users/resources/index.rst @@ -54,8 +54,8 @@ Videos `_ by Eric Jones * `Anatomy of Matplotlib - `_ - by Benjamin Root + `_ + by Benjamin Root and Hannah Aizenman * `Data Visualization Basics with Python (O'Reilly) `_ diff --git a/galleries/examples/misc/image_thumbnail_sgskip.py b/galleries/examples/misc/image_thumbnail_sgskip.py index 55217cfdca02..e361d3bf53ab 100644 --- a/galleries/examples/misc/image_thumbnail_sgskip.py +++ b/galleries/examples/misc/image_thumbnail_sgskip.py @@ -7,7 +7,7 @@ Matplotlib relies on Pillow_ for reading images, and thus supports all formats supported by Pillow. -.. _Pillow: https://python-pillow.org/ +.. _Pillow: https://python-pillow.github.io """ from argparse import ArgumentParser diff --git a/galleries/users_explain/axes/arranging_axes.py b/galleries/users_explain/axes/arranging_axes.py index 1f910393a9da..bc537e15c12c 100644 --- a/galleries/users_explain/axes/arranging_axes.py +++ b/galleries/users_explain/axes/arranging_axes.py @@ -308,7 +308,7 @@ def annotate_axes(ax, text, fontsize=18): # ------------------------------------- # # We can index the *spec* array using `NumPy slice syntax -# `_ +# `_ # and the new Axes will span the slice. This would be the same # as ``fig, axd = plt.subplot_mosaic([['ax0', 'ax0'], ['ax1', 'ax2']], ...)``: diff --git a/galleries/users_explain/figure/backends.rst b/galleries/users_explain/figure/backends.rst index dc6d8a89457d..b808d5951fd8 100644 --- a/galleries/users_explain/figure/backends.rst +++ b/galleries/users_explain/figure/backends.rst @@ -211,7 +211,7 @@ wxAgg Agg rendering to a wxWidgets_ canvas (requires wxPython_ 4). .. _`Scalable Vector Graphics`: https://en.wikipedia.org/wiki/Scalable_Vector_Graphics .. _pgf: https://ctan.org/pkg/pgf .. _Cairo: https://www.cairographics.org -.. _PyGObject: https://wiki.gnome.org/action/show/Projects/PyGObject +.. _PyGObject: https://pygobject.gnome.org/ .. _pycairo: https://www.cairographics.org/pycairo/ .. _cairocffi: https://doc.courtbouillon.org/cairocffi/stable/ .. _wxPython: https://www.wxpython.org/ diff --git a/galleries/users_explain/figure/writing_a_backend_pyplot_interface.rst b/galleries/users_explain/figure/writing_a_backend_pyplot_interface.rst index c8dccc24da43..5325b3d9ba4c 100644 --- a/galleries/users_explain/figure/writing_a_backend_pyplot_interface.rst +++ b/galleries/users_explain/figure/writing_a_backend_pyplot_interface.rst @@ -107,7 +107,7 @@ module:// syntax Any backend in a separate module (not built into Matplotlib) can be used by specifying the path to the module in the form ``module://some.backend.module``. An example is ``module://mplcairo.qt`` for -`mplcairo `_. The backend's +`mplcairo `_. The backend's interactive framework will be taken from its ``FigureCanvas.required_interactive_framework``. diff --git a/lib/matplotlib/cbook.py b/lib/matplotlib/cbook.py index 2b1d817257f4..b18b935c8ead 100644 --- a/lib/matplotlib/cbook.py +++ b/lib/matplotlib/cbook.py @@ -615,9 +615,9 @@ def flatten(seq, scalarp=is_scalar_or_string): ['John', 'Hunter', 1, 23, 42, 5, 23] By: Composite of Holger Krekel and Luther Blissett - From: https://code.activestate.com/recipes/121294/ + From: https://code.activestate.com/recipes/121294-simple-generator-for-flattening-nested-containers/ and Recipe 1.12 in cookbook - """ + """ # noqa: E501 for item in seq: if scalarp(item) or item is None: yield item diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index 0c882caaba82..f71d49db8ad8 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -1711,7 +1711,7 @@ def thumbnail(infile, thumbfile, scale=0.1, interpolation='bilinear', thus supports a wide range of file formats, including PNG, JPG, TIFF and others. - .. _Pillow: https://python-pillow.org/ + .. _Pillow: https://python-pillow.github.io thumbfile : str or file-like The thumbnail filename. diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 0dbb546b8acd..1e35d75717b2 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -9424,8 +9424,8 @@ def test_violinplot_orientation(fig_test, fig_ref): ax_ref = fig_ref.subplots() ax_ref.violinplot(all_data, vert=False) - ax_test = fig_test.subplots() - ax_test.violinplot(all_data, orientation='horizontal') + ax_test = fig_test.subplots() + ax_test.violinplot(all_data, orientation='horizontal') @check_figures_equal(extensions=['png']) diff --git a/src/_tkagg.cpp b/src/_tkagg.cpp index 5e162caa6dff..955ce2103f90 100644 --- a/src/_tkagg.cpp +++ b/src/_tkagg.cpp @@ -7,7 +7,7 @@ // and methods of operation are now quite different. Because our review of // the codebase showed that all the code that came from PIL was removed or // rewritten, we have removed the PIL licensing information. If you want PIL, -// you can get it at https://python-pillow.org/ +// you can get it at https://python-pillow.github.io #include #include diff --git a/tools/cache_zenodo_svg.py b/tools/cache_zenodo_svg.py index 40814d21573c..6e31c2a70011 100644 --- a/tools/cache_zenodo_svg.py +++ b/tools/cache_zenodo_svg.py @@ -63,6 +63,8 @@ def _get_xdg_cache_dir(): if __name__ == "__main__": data = { + "v3.9.4": "14436121", + "v3.9.3": "14249941", "v3.9.2": "13308876", "v3.9.1": "12652732", "v3.9.0": "11201097",