diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000000..7607f0f6a8a2 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +custom: https://numfocus.salsalabs.org/donate-to-matplotlib/index.html diff --git a/LICENSE/LICENSE_PAINT b/LICENSE/LICENSE_PAINT new file mode 100644 index 000000000000..42595fff18ba --- /dev/null +++ b/LICENSE/LICENSE_PAINT @@ -0,0 +1,20 @@ +Copyright 2000 by Object Craft P/L, Melbourne, Australia. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Object Craft +is not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +OBJECT CRAFT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OBJECT CRAFT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/ci/azure-pipelines-steps.yml b/ci/azure-pipelines-steps.yml new file mode 100644 index 000000000000..f8b2a58fe3eb --- /dev/null +++ b/ci/azure-pipelines-steps.yml @@ -0,0 +1,92 @@ +parameters: + platform: none + installer: none + +steps: +- task: UsePythonVersion@0 + inputs: + versionSpec: '$(python.version)' + architecture: 'x64' + displayName: 'Use Python $(python.version)' + condition: and(succeeded(), ne(variables['python.version'], 'Pre')) + +- task: stevedower.python.InstallPython.InstallPython@1 + displayName: 'Use prerelease Python' + inputs: + prerelease: true + condition: and(succeeded(), eq(variables['python.version'], 'Pre')) + +- ${{ if eq(parameters.installer, 'nuget') }}: + - task: NuGetToolInstaller@0 + displayName: 'Use latest available Nuget' + + - script: | + nuget install libpng-msvc14-x64 -ExcludeVersion -OutputDirectory "$(build.BinariesDirectory)" + nuget install zlib-msvc14-x64 -ExcludeVersion -OutputDirectory "$(build.BinariesDirectory)" + echo ##vso[task.prependpath]$(build.BinariesDirectory)\libpng-msvc14-x64\build\native\bin_release + echo ##vso[task.prependpath]$(build.BinariesDirectory)\zlib-msvc14-x64\build\native\bin_release + echo ##vso[task.setvariable variable=CL]/I$(build.BinariesDirectory)\libpng-msvc14-x64\build\native\include /I$(build.BinariesDirectory)\zlib-msvc14-x64\build\native\include + echo ##vso[task.setvariable variable=LINK]/LIBPATH:$(build.BinariesDirectory)\libpng-msvc14-x64\build\native\lib_release /LIBPATH:$(build.BinariesDirectory)\zlib-msvc14-x64\build\native\lib_release + + displayName: 'Install dependencies with nuget' + +- ${{ if eq(parameters.installer, 'brew') }}: + - script: | + brew install pkg-config ffmpeg imagemagick mplayer ccache + displayName: 'Install dependencies with brew' + +- ${{ if eq(parameters.installer, 'apt') }}: + - script: | + sudo apt-add-repository ppa:jonathonf/ffmpeg-3 + sudo apt-get update + sudo apt-get install \ + cm-super \ + dvipng \ + ffmpeg \ + gdb \ + gir1.2-gtk-3.0 \ + graphviz \ + inkscape \ + libcairo2 \ + libgeos-dev \ + libgirepository-1.0.1 \ + lmodern \ + otf-freefont \ + pgf \ + texlive-fonts-recommended \ + texlive-latex-base \ + texlive-latex-extra \ + texlive-latex-recommended \ + texlive-xetex texlive-luatex + displayName: 'Install dependencies with apt' + +- script: | + + python -m pip install --upgrade pip + pip install -r requirements/testing/travis_all.txt -r requirements/testing/travis36.txt + + displayName: 'Install dependencies with pip' + +- script: | + + pip install -ve . + + displayName: "Install self" + env: + MPLLOCALFREETYPE: 1 + +- script: env + displayName: 'print env' + +- script: | + env + pytest --junitxml=junit/test-results.xml -raR --maxfail=50 --timeout=300 --durations=25 --cov-report= --cov=lib -n 2 + displayName: 'pytest' + env: + PYTHONFAULTHANDLER: 1 + +- task: PublishTestResults@2 + inputs: + testResultsFiles: '**/test-results.xml' + testRunTitle: 'Python $(python.version)' + condition: succeededOrFailed() diff --git a/doc/_static/blume_table_example.png b/doc/_static/blume_table_example.png new file mode 100644 index 000000000000..92f4d7e49109 Binary files /dev/null and b/doc/_static/blume_table_example.png differ diff --git a/doc/_static/geoplot_nyc_traffic_tickets.png b/doc/_static/geoplot_nyc_traffic_tickets.png new file mode 100644 index 000000000000..0ee9ba1a298b Binary files /dev/null and b/doc/_static/geoplot_nyc_traffic_tickets.png differ diff --git a/doc/_static/numpngw_animated_example.png b/doc/_static/numpngw_animated_example.png new file mode 100644 index 000000000000..e84388eb5e89 Binary files /dev/null and b/doc/_static/numpngw_animated_example.png differ diff --git a/doc/_static/ridge_map_white_mountains.png b/doc/_static/ridge_map_white_mountains.png new file mode 100644 index 000000000000..e64a764a83ff Binary files /dev/null and b/doc/_static/ridge_map_white_mountains.png differ diff --git a/doc/_static/yellowbrick.png b/doc/_static/yellowbrick.png new file mode 100644 index 000000000000..01013a1a03d2 Binary files /dev/null and b/doc/_static/yellowbrick.png differ diff --git a/doc/api/backend_template_api.rst b/doc/api/backend_template_api.rst new file mode 100644 index 000000000000..892f5b696d93 --- /dev/null +++ b/doc/api/backend_template_api.rst @@ -0,0 +1,8 @@ + +:mod:`matplotlib.backends.backend_template` +=========================================== + +.. automodule:: matplotlib.backends.backend_template + :members: + :undoc-members: + :show-inheritance: diff --git a/doc/api/next_api_changes/2018-09-18-AL.rst b/doc/api/next_api_changes/2018-09-18-AL.rst new file mode 100644 index 000000000000..c44f2bd56bd7 --- /dev/null +++ b/doc/api/next_api_changes/2018-09-18-AL.rst @@ -0,0 +1,5 @@ +Deprecations +```````````` + +``backend_wx.DEBUG_MSG`` is deprecated. The wx backends now use regular +logging. diff --git a/doc/api/next_api_changes/2019-01-09-deprecations.rst b/doc/api/next_api_changes/2019-01-09-deprecations.rst index b179dcd9f5cb..817493b2e436 100644 --- a/doc/api/next_api_changes/2019-01-09-deprecations.rst +++ b/doc/api/next_api_changes/2019-01-09-deprecations.rst @@ -1,8 +1,10 @@ Deprecations ```````````` -The ``matplotlib.sphinxext.plot_directive`` interface has changed from -the (Sphinx-)deprecated function-based interface to a class-based interface. -This should not affect end users, but the -``matplotlib.sphinxext.plot_directive.plot_directive`` function is now +The ``matplotlib.sphinxext.mathmpl`` and +``matplotlib.sphinxext.plot_directive`` interfaces have changed from the +(Sphinx-)deprecated function-based interface to a class-based interface. This +should not affect end users, but the +``matplotlib.sphinxext.mathmpl.math_directive`` and +``matplotlib.sphinxext.plot_directive.plot_directive`` functions are now deprecated. diff --git a/doc/api/next_api_changes/autoscale_for_arrow.rst b/doc/api/next_api_changes/autoscale_for_arrow.rst new file mode 100644 index 000000000000..29db9f5574d1 --- /dev/null +++ b/doc/api/next_api_changes/autoscale_for_arrow.rst @@ -0,0 +1,3 @@ +Autoscale for arrow +``````````````````````````````````` +Calling ax.arrow() will now autoscale the axes. diff --git a/doc/api/next_api_changes/deprecated_empty_add_axes.rst b/doc/api/next_api_changes/deprecated_empty_add_axes.rst new file mode 100644 index 000000000000..beefbf79ad02 --- /dev/null +++ b/doc/api/next_api_changes/deprecated_empty_add_axes.rst @@ -0,0 +1,5 @@ +Deprecations +```````````` + +Calling ``fig.add_axes()`` with no arguments currently return None, +will raise an error in the future diff --git a/doc/api/prev_api_changes/api_changes_3.0.0.rst b/doc/api/prev_api_changes/api_changes_3.0.0.rst new file mode 100644 index 000000000000..62cdca31152b --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.0.0.rst @@ -0,0 +1,560 @@ +API Changes for 3.0.0 +===================== + +Drop support for python 2 +------------------------- + +Matplotlib 3 only supports python 3.5 and higher. + + +Changes to backend loading +-------------------------- + +Failure to load backend modules (``macosx`` on non-framework builds and +``gtk3`` when running headless) now raises `ImportError` (instead of +`RuntimeError` and `TypeError`, respectively). + +Third-party backends that integrate with an interactive framework are now +encouraged to define the ``required_interactive_framework`` global value to one +of the following values: "qt5", "qt4", "gtk3", "wx", "tk", or "macosx". This +information will be used to determine whether it is possible to switch from a +backend to another (specifically, whether they use the same interactive +framework). + + + +`.Axes.hist2d` now uses `~.Axes.pcolormesh` instead of `~.Axes.pcolorfast` +-------------------------------------------------------------------------- + +`.Axes.hist2d` now uses `~.Axes.pcolormesh` instead of `~.Axes.pcolorfast`, +which will improve the handling of log-axes. Note that the +returned *image* now is of type `~.matplotlib.collections.QuadMesh` +instead of `~.matplotlib.image.AxesImage`. + +`.matplotlib.axes.Axes.get_tightbbox` now includes all artists +-------------------------------------------------------------- + +For Matplotlib 3.0, *all* artists are now included in the bounding box +returned by `.matplotlib.axes.Axes.get_tightbbox`. + +`.matplotlib.axes.Axes.get_tightbbox` adds a new kwarg ``bbox_extra_artists`` +to manually specify the list of artists on the axes to include in the +tight bounding box calculation. + +Layout tools like `.Figure.tight_layout`, ``constrained_layout``, +and ``fig.savefig('fname.png', bbox_inches="tight")`` use +`.matplotlib.axes.Axes.get_tightbbox` to determine the bounds of each axes on +a figure and adjust spacing between axes. + +In Matplotlib 2.2 ``get_tightbbox`` started to include legends made on the +axes, but still excluded some other artists, like text that may overspill an +axes. This has been expanded to include *all* artists. + +This new default may be overridden in either of three ways: + +1. Make the artist to be excluded a child of the figure, not the axes. E.g., + call ``fig.legend()`` instead of ``ax.legend()`` (perhaps using + `~.matplotlib.axes.Axes.get_legend_handles_labels` to gather handles and + labels from the parent axes). +2. If the artist is a child of the axes, set the artist property + ``artist.set_in_layout(False)``. +3. Manually specify a list of artists in the new kwarg ``bbox_extra_artists``. + + +`Text.set_text` with string argument ``None`` sets string to empty +------------------------------------------------------------------ + +`Text.set_text` when passed a string value of ``None`` would set the +string to ``"None"``, so subsequent calls to `Text.get_text` would return +the ambiguous ``"None"`` string. + +This change sets text objects passed ``None`` to have empty strings, so that +`Text.get_text` returns an empty string. + + + + +``Axes3D.get_xlim``, ``get_ylim`` and ``get_zlim`` now return a tuple +--------------------------------------------------------------------- + +They previously returned an array. Returning a tuple is consistent with the +behavior for 2D axes. + + + + +``font_manager.list_fonts`` now follows the platform's casefolding semantics +---------------------------------------------------------------------------- + +i.e., it behaves case-insensitively on Windows only. + + +``bar`` / ``barh`` no longer accepts ``left`` / ``bottom`` as first named argument +---------------------------------------------------------------------------------- + +These arguments were renamed in 2.0 to ``x`` / ``y`` following the change of the +default alignment from ``edge`` to ``center``. + + +Different exception types for undocumented options +-------------------------------------------------- + +- Passing ``style='comma'`` to :meth:`~matplotlib.axes.Axes.ticklabel_format` + was never supported. It now raises ``ValueError`` like all other + unsupported styles, rather than ``NotImplementedError``. + +- Passing the undocumented ``xmin`` or ``xmax`` arguments to + :meth:`~matplotlib.axes.Axes.set_xlim` would silently override the ``left`` + and ``right`` arguments. :meth:`~matplotlib.axes.Axes.set_ylim` and the + 3D equivalents (e.g. :meth:`~mpl_toolkits.axes.Axes3D.set_zlim3d`) had a + corresponding problem. + A ``TypeError`` will be raised if they would override the earlier + limit arguments. In 3.0 these were kwargs were deprecated, but in 3.1 + the deprecation was undone. + + +Improved call signature for ``Axes.margins`` +-------------------------------------------- + +:meth:`matplotlib.axes.Axes.margins` and :meth:`mpl_toolkits.mplot3d.Axes3D.margins` +no longer accept arbitrary keywords. ``TypeError`` will therefore be raised +if unknown kwargs are passed; previously they would be silently ignored. + +If too many positional arguments are passed, ``TypeError`` will be raised +instead of ``ValueError``, for consistency with other call-signature violations. + +``Axes3D.margins`` now raises ``TypeError`` instead of emitting a deprecation +warning if only two positional arguments are passed. To supply only ``x`` and +``y`` margins, use keyword arguments. + + + +Explicit arguments instead of \*args, \*\*kwargs +------------------------------------------------ + +:PEP:`3102` describes keyword-only arguments, which allow Matplotlib +to provide explicit call signatures - where we previously used +``*args, **kwargs`` and ``kwargs.pop``, we can now expose named +arguments. In some places, unknown kwargs were previously ignored but +now raise ``TypeError`` because ``**kwargs`` has been removed. + +- :meth:`matplotlib.axes.Axes.stem` no longer accepts unknown keywords, + and raises ``TypeError`` instead of emitting a deprecation. +- :meth:`matplotlib.axex.Axes.stem` now raises TypeError when passed + unhandled positional arguments. If two or more arguments are passed + (ie X, Y, [linefmt], ...) and Y cannot be cast to an array, an error + will be raised instead of treating X as Y and Y as linefmt. +- :meth:`mpl_toolkits.axes_grid1.axes_divider.SubPlotDivider` raises + ``TypeError`` instead of ``Exception`` when passed unknown kwargs. + + + +Cleanup decorators and test classes no longer destroy warnings filter on exit +----------------------------------------------------------------------------- + +The decorators and classes in matplotlib.testing.decorators no longer +destroy the warnings filter on exit. Instead, they restore the warnings +filter that existed before the test started using ``warnings.catch_warnings``. + + +Non-interactive FigureManager classes are now aliases of FigureManagerBase +-------------------------------------------------------------------------- + +The `FigureManagerPdf`, `FigureManagerPS`, and `FigureManagerSVG` classes, +which were previously empty subclasses of `FigureManagerBase` (i.e., not +adding or overriding any attribute or method), are now direct aliases for +`FigureManagerBase`. + + +Change to the output of `.image.thumbnail` +------------------------------------------ + +When called with ``preview=False``, `.image.thumbnail` previously returned an +figure whose canvas class was set according to the output file extension. It +now returns a figure whose canvas class is the base `FigureCanvasBase` (and +relies on `FigureCanvasBase.print_figure`) to handle the canvas switching +properly). + +As a side effect of this change, `.image.thumbnail` now also supports .ps, .eps, +and .svgz output. + + + +`.FuncAnimation` now draws artists according to their zorder when blitting +-------------------------------------------------------------------------- + +`.FuncAnimation` now draws artists returned by the user- +function according to their zorder when using blitting, +instead of using the order in which they are being passed. +However, note that only zorder of passed artists will be +respected, as they are drawn on top of any existing artists +(see `#11369 `_). + + +Contour color autoscaling improvements +-------------------------------------- + +Selection of contour levels is now the same for contour and +contourf; previously, for contour, levels outside the data range were +deleted. (Exception: if no contour levels are found within the +data range, the `levels` attribute is replaced with a list holding +only the minimum of the data range.) + +When contour is called with levels specified as a target number rather +than a list, and the 'extend' kwarg is used, the levels are now chosen +such that some data typically will fall in the extended range. + +When contour is called with a `LogNorm` or a `LogLocator`, it will now +select colors using the geometric mean rather than the arithmetic mean +of the contour levels. + + +Streamplot last row and column fixed +------------------------------------ + +A bug was fixed where the last row and column of data in +`~.Axes.axes.streamplot` were being dropped. + + +Changed default `AutoDateLocator` kwarg *interval_multiples* to ``True`` +------------------------------------------------------------------------ + +The default value of the tick locator for dates, `.dates.AutoDateLocator` +kwarg *interval_multiples* was set to ``False`` which leads to not-nice +looking automatic ticks in many instances. The much nicer +``interval_multiples=True`` is the new default. See below to get the +old behavior back: + + .. plot:: + + import matplotlib.pyplot as plt + import datetime + import matplotlib.dates as mdates + + t0 = datetime.datetime(2009, 8, 20, 1, 10, 12) + tf = datetime.datetime(2009, 8, 20, 1, 42, 11) + + + fig, axs = plt.subplots(1, 2, constrained_layout=True) + ax = axs[0] + ax.axhspan(t0, tf, facecolor="blue", alpha=0.25) + ax.set_ylim(t0 - datetime.timedelta(minutes=3), + tf + datetime.timedelta(minutes=3)) + ax.set_title('NEW DEFAULT') + + ax = axs[1] + ax.axhspan(t0, tf, facecolor="blue", alpha=0.25) + ax.set_ylim(t0 - datetime.timedelta(minutes=3), + tf + datetime.timedelta(minutes=3)) + # old behavior + locator = mdates.AutoDateLocator(interval_multiples=False, ) + ax.yaxis.set_major_locator(locator) + ax.yaxis.set_major_formatter(mdates.AutoDateFormatter(locator)) + + ax.set_title('OLD') + plt.show() + + +`.Axes.get_position` now returns actual position if aspect changed +------------------------------------------------------------------ + +`.Axes.get_position` used to return the original position unless a +draw had been triggered or `.Axes.apply_aspect` had been called, even +if the kwarg *original* was set to ``False``. Now `.Axes.apply_aspect` +is called so ``ax.get_position()`` will return the new modified position. +To get the old behavior use ``ax.get_position(original=True)``. + + +The ticks for colorbar now adjust for the size of the colorbar +-------------------------------------------------------------- + +Colorbar ticks now adjust for the size of the colorbar if the +colorbar is made from a mappable that is not a contour or +doesn't have a BoundaryNorm, or boundaries are not specified. +If boundaries, etc are specified, the colorbar maintains the +original behavior. + + +Colorbar for log-scaled hexbin +------------------------------ + +When using `hexbin` and plotting with a logarithmic color scale, the colorbar +ticks are now correctly log scaled. Previously the tick values were linear +scaled log(number of counts). + +PGF backend now explicitly makes black text black +------------------------------------------------- + +Previous behavior with the pgf backend was for text specified as black to +actually be the default color of whatever was rendering the pgf file (which was +of course usually black). The new behavior is that black text is black, +regardless of the default color. However, this means that there is no way to +fall back on the default color of the renderer. + + +Blacklisted rcparams no longer updated by `rcdefaults`, `rc_file_defaults`, `rc_file` +------------------------------------------------------------------------------------- + +The rc modifier functions `rcdefaults`, `rc_file_defaults` and `rc_file` +now ignore rcParams in the `matplotlib.style.core.STYLE_BLACKLIST` set. In +particular, this prevents the ``backend`` and ``interactive`` rcParams from +being incorrectly modified by these functions. + + + +`CallbackRegistry` now stores callbacks using stdlib's `WeakMethod`\s +--------------------------------------------------------------------- + +In particular, this implies that ``CallbackRegistry.callbacks[signal]`` is now +a mapping of callback ids to `WeakMethod`\s (i.e., they need to be first called +with no arguments to retrieve the method itself). + + +Changes regarding the text.latex.unicode rcParam +------------------------------------------------ + +The rcParam now defaults to True and is deprecated (i.e., in future versions +of Matplotlib, unicode input will always be supported). + +Moreover, the underlying implementation now uses ``\usepackage[utf8]{inputenc}`` +instead of ``\usepackage{ucs}\usepackage[utf8x]{inputenc}``. + + +Return type of ArtistInspector.get_aliases changed +-------------------------------------------------- + +`ArtistInspector.get_aliases` previously returned the set of aliases as +``{fullname: {alias1: None, alias2: None, ...}}``. The dict-to-None mapping +was used to simulate a set in earlier versions of Python. It has now been +replaced by a set, i.e. ``{fullname: {alias1, alias2, ...}}``. + +This value is also stored in `ArtistInspector.aliasd`, which has likewise +changed. + + +Removed ``pytz`` as a dependency +-------------------------------- + +Since ``dateutil`` and ``pytz`` both provide time zones, and +matplotlib already depends on ``dateutil``, matplotlib will now use +``dateutil`` time zones internally and drop the redundant dependency +on ``pytz``. While ``dateutil`` time zones are preferred (and +currently recommended in the Python documentation), the explicit use +of ``pytz`` zones is still supported. + +Deprecations +------------ + +Modules +``````` +The following modules are deprecated: + +- :mod:`matplotlib.compat.subprocess`. This was a python 2 workaround, but all + the functionality can now be found in the python 3 standard library + :mod:`subprocess`. +- :mod:`matplotlib.backends.wx_compat`. Python 3 is only compatible with + wxPython 4, so support for wxPython 3 or earlier can be dropped. + +Classes, methods, functions, and attributes +``````````````````````````````````````````` + +The following classes, methods, functions, and attributes are deprecated: + +- ``RcParams.msg_depr``, ``RcParams.msg_depr_ignore``, + ``RcParams.msg_depr_set``, ``RcParams.msg_obsolete``, + ``RcParams.msg_backend_obsolete`` +- ``afm.parse_afm`` +- ``backend_pdf.PdfFile.texFontMap`` +- ``backend_pgf.get_texcommand`` +- ``backend_ps.get_bbox`` +- ``backend_qt5.FigureCanvasQT.keyAutoRepeat`` (directly check + ``event.guiEvent.isAutoRepeat()`` in the event handler to decide whether to + handle autorepeated key presses). +- ``backend_qt5.error_msg_qt``, ``backend_qt5.exception_handler`` +- ``backend_wx.FigureCanvasWx.macros`` +- ``backends.pylab_setup`` +- ``cbook.GetRealpathAndStat``, ``cbook.Locked`` +- ``cbook.is_numlike`` (use ``isinstance(..., numbers.Number)`` instead), + ``cbook.listFiles``, ``cbook.unicode_safe`` +- ``container.Container.set_remove_method``, +- ``contour.ContourLabeler.cl``, ``.cl_xy``, and ``.cl_cvalues`` +- ``dates.DateFormatter.strftime_pre_1900``, ``dates.DateFormatter.strftime`` +- ``font_manager.TempCache`` +- ``image._ImageBase.iterpnames``, use the ``interpolation_names`` property + instead. (this affects classes that inherit from ``_ImageBase`` including + :class:`FigureImage`, :class:`BboxImage`, and :class:`AxesImage`) +- ``mathtext.unichr_safe`` (use ``chr`` instead) +- ``patches.Polygon.xy`` +- ``table.Table.get_child_artists`` (use ``get_children`` instead) +- ``testing.compare.ImageComparisonTest``, ``testing.compare.compare_float`` +- ``testing.decorators.CleanupTest``, + ``testing.decorators.skip_if_command_unavailable`` +- ``FigureCanvasQT.keyAutoRepeat`` (directly check + ``event.guiEvent.isAutoRepeat()`` in the event handler to decide whether to + handle autorepeated key presses) +- ``FigureCanvasWx.macros`` +- ``_ImageBase.iterpnames``, use the ``interpolation_names`` property instead. + (this affects classes that inherit from ``_ImageBase`` including + :class:`FigureImage`, :class:`BboxImage`, and :class:`AxesImage`) +- ``patches.Polygon.xy`` +- ``texmanager.dvipng_hack_alpha`` +- ``text.Annotation.arrow`` +- `.Legend.draggable()`, in favor of `.Legend.set_draggable()` + (``Legend.draggable`` may be reintroduced as a property in future releases) +- ``textpath.TextToPath.tex_font_map`` +- :class:`matplotlib.cbook.deprecation.mplDeprecation` will be removed + in future versions. It is just an alias for + :class:`matplotlib.cbook.deprecation.MatplotlibDeprecationWarning`. + Please use the + :class:`~matplotlib.cbook.MatplotlibDeprecationWarning` directly if + neccessary. +- The ``matplotlib.cbook.Bunch`` class has been deprecated. Instead, use + `types.SimpleNamespace` from the standard library which provides the same + functionality. +- ``Axes.mouseover_set`` is now a frozenset, and deprecated. Directly + manipulate the artist's ``.mouseover`` attribute to change their mouseover + status. + +The following keyword arguments are deprecated: + +- passing ``verts`` to ``Axes.scatter`` (use ``marker`` instead) +- passing ``obj_type`` to ``cbook.deprecated`` + +The following call signatures are deprecated: + +- passing a ``wx.EvtHandler`` as first argument to ``backend_wx.TimerWx`` + + +rcParams +```````` + +The following rcParams are deprecated: + +- ``examples.directory`` (use ``datapath`` instead) +- ``pgf.debug`` (the pgf backend relies on logging) +- ``text.latex.unicode`` (always True now) + + +marker styles +````````````` +- Using ``(n, 3)`` as marker style to specify a circle marker is deprecated. Use + ``"o"`` instead. +- Using ``([(x0, y0), (x1, y1), ...], 0)`` as marker style to specify a custom + marker path is deprecated. Use ``[(x0, y0), (x1, y1), ...]`` instead. + + +Deprecation of ``LocatableAxes`` in toolkits +```````````````````````````````````````````` + +The ``LocatableAxes`` classes in toolkits have been deprecated. The base `Axes` +classes provide the same functionality to all subclasses, thus these mixins are +no longer necessary. Related functions have also been deprecated. Specifically: + +* ``mpl_toolkits.axes_grid1.axes_divider.LocatableAxesBase``: no specific + replacement; use any other ``Axes``-derived class directly instead. +* ``mpl_toolkits.axes_grid1.axes_divider.locatable_axes_factory``: no specific + replacement; use any other ``Axes``-derived class directly instead. +* ``mpl_toolkits.axes_grid1.axes_divider.Axes``: use + `mpl_toolkits.axes_grid1.mpl_axes.Axes` directly. +* ``mpl_toolkits.axes_grid1.axes_divider.LocatableAxes``: use + `mpl_toolkits.axes_grid1.mpl_axes.Axes` directly. +* ``mpl_toolkits.axisartist.axes_divider.Axes``: use + `mpl_toolkits.axisartist.axislines.Axes` directly. +* ``mpl_toolkits.axisartist.axes_divider.LocatableAxes``: use + `mpl_toolkits.axisartist.axislines.Axes` directly. + +Removals +-------- + +Hold machinery +`````````````` + +Setting or unsetting ``hold`` (:ref:`deprecated in version 2.0`) has now +been completely removed. Matplotlib now always behaves as if ``hold=True``. +To clear an axes you can manually use :meth:`~.axes.Axes.cla()`, +or to clear an entire figure use :meth:`~.figure.Figure.clf()`. + + +Removal of deprecated backends +`````````````````````````````` + +Deprecated backends have been removed: + +- GTKAgg +- GTKCairo +- GTK +- GDK + + +Deprecated APIs +``````````````` + +The following deprecated API elements have been removed: + +- The deprecated methods ``knownfailureif`` and ``remove_text`` have been removed + from :mod:`matplotlib.testing.decorators`. +- The entire contents of ``testing.noseclasses`` have also been removed. +- ``matplotlib.checkdep_tex``, ``matplotlib.checkdep_xmllint`` +- ``backend_bases.IdleEvent`` +- ``cbook.converter``, ``cbook.tostr``, ``cbook.todatetime``, ``cbook.todate``, + ``cbook.tofloat``, ``cbook.toint``, ``cbook.unique``, + ``cbook.is_string_like``, ``cbook.is_sequence_of_strings``, + ``cbook.is_scalar``, ``cbook.soundex``, ``cbook.dict_delall``, + ``cbook.get_split_ind``, ``cbook.wrap``, ``cbook.get_recursive_filelist``, + ``cbook.pieces``, ``cbook.exception_to_str``, ``cbook.allequal``, + ``cbook.alltrue``, ``cbook.onetrue``, ``cbook.allpairs``, ``cbook.finddir``, + ``cbook.reverse_dict``, ``cbook.restrict_dict``, ``cbook.issubclass_safe``, + ``cbook.recursive_remove``, ``cbook.unmasked_index_ranges``, + ``cbook.Null``, ``cbook.RingBuffer``, ``cbook.Sorter``, ``cbook.Xlator``, +- ``font_manager.weight_as_number``, ``font_manager.ttfdict_to_fnames`` +- ``pyplot.colors``, ``pyplot.spectral`` +- ``rcsetup.validate_negative_linestyle``, + ``rcsetup.validate_negative_linestyle_legacy``, +- ``testing.compare.verifiers``, ``testing.compare.verify`` +- ``testing.decorators.knownfailureif``, + ``testing.decorators.ImageComparisonTest.remove_text`` +- ``tests.assert_str_equal``, ``tests.test_tinypages.file_same`` +- ``texmanager.dvipng_hack_alpha``, +- ``_AxesBase.axesPatch``, ``_AxesBase.set_color_cycle``, + ``_AxesBase.get_cursor_props``, ``_AxesBase.set_cursor_props`` +- ``_ImageBase.iterpnames`` +- ``FigureCanvasBase.start_event_loop_default``; +- ``FigureCanvasBase.stop_event_loop_default``; +- ``Figure.figurePatch``, +- ``FigureCanvasBase.dynamic_update``, ``FigureCanvasBase.idle_event``, + ``FigureCanvasBase.get_linestyle``, ``FigureCanvasBase.set_linestyle`` +- ``FigureCanvasQTAggBase`` +- ``FigureCanvasQTAgg.blitbox`` +- ``FigureCanvasTk.show`` (alternative: ``FigureCanvasTk.draw``) +- ``FigureManagerTkAgg`` (alternative: ``FigureManagerTk``) +- ``NavigationToolbar2TkAgg`` (alternative: ``NavigationToolbar2Tk``) +- ``backend_wxagg.Toolbar`` (alternative: ``backend_wxagg.NavigationToolbar2WxAgg``) +- ``RendererAgg.debug()`` +- passing non-numbers to ``EngFormatter.format_eng`` +- passing ``frac`` to ``PolarAxes.set_theta_grids`` +- any mention of idle events + +The following API elements have been removed: + +- ``backend_cairo.HAS_CAIRO_CFFI`` +- ``sphinxext.sphinx_version`` + + +Proprietary sphinx directives +````````````````````````````` + +The matplotlib documentation used the proprietary sphinx directives +`.. htmlonly::`, and `.. latexonly::`. These have been replaced with the +standard sphinx directives `.. only:: html` and `.. only:: latex`. This +change will not affect any users. Only downstream package maintainers, who +have used the proprietary directives in their docs, will have to switch to the +sphinx directives. + + +lib/mpl_examples symlink +```````````````````````` + +The symlink from lib/mpl_examples to ../examples has been removed. +This is not installed as an importable package and should not affect +end users, however this may require down-stream packagers to adjust. +The content is still available top-level examples directory. diff --git a/doc/api/prev_api_changes/api_changes_3.0.1.rst b/doc/api/prev_api_changes/api_changes_3.0.1.rst new file mode 100644 index 000000000000..d18a55f885dd --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.0.1.rst @@ -0,0 +1,21 @@ +API Changes for 3.0.1 +===================== + +`.tight_layout.auto_adjust_subplotpars` can return ``None`` now if the new +subplotparams will collapse axes to zero width or height. This prevents +``tight_layout`` from being executed. Similarly +`.tight_layout.get_tight_layout_figure` will return None. + +To improve import (startup) time, private modules are now imported lazily. +These modules are no longer available at these locations: + + - `matplotlib.backends.backend_agg._png` + - `matplotlib.contour._contour` + - `matplotlib.image._png` + - `matplotlib.mathtext._png` + - `matplotlib.testing.compare._png` + - `matplotlib.texmanager._png` + - `matplotlib.tri.triangulation._tri` + - `matplotlib.tri.triangulation._qhull` + - `matplotlib.tri.tricontour._tri` + - `matplotlib.tri.trifinder._tri` diff --git a/doc/api/prev_api_changes/api_changes_3.1.0.rst b/doc/api/prev_api_changes/api_changes_3.1.0.rst new file mode 100644 index 000000000000..353613662ce2 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.1.0.rst @@ -0,0 +1,1160 @@ +API Changes for 3.1.0 +===================== + +.. contents:: + :local: + :depth: 1 + + +Behavior changes +---------------- + + +Matplotlib.use +~~~~~~~~~~~~~~ +Switching backends via `matplotlib.use` is now allowed by default, +regardless of whether `matplotlib.pyplot` has been imported. If the user +tries to switch from an already-started interactive backend to a different +interactive backend, an `ImportError` will be raised. + +mplot3d auto-registration +~~~~~~~~~~~~~~~~~~~~~~~~~ + +`mpl_toolkits.mplot3d` is always registered by default now. It is no +longer necessary to import mplot3d to create 3d axes with :: + + ax = fig.add_subplot(111, projection="3d") + +Invalid points in PathCollections +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PathCollections created with `~.Axes.scatter` now keep track of invalid points. +Previously, points with nonfinite (infinite or nan) coordinates would not be +included in the offsets (as returned by `PathCollection.get_offsets`) of a +`PathCollection` created by `~.Axes.scatter`, and points with nonfinite values +(as specified by the *c* kwarg) would not be included in the array (as returned +by `PathCollection.get_array`) + +Such points are now included, but masked out by returning a masked array. + +If the *plotnonfinite* kwarg to `~.Axes.scatter` is set, then points +with nonfinite values are plotted using the bad color of the +`.collections.PathCollection`\ 's colormap (as set by +:meth:`.colors.Colormap.set_bad`). + +Alpha blending in imshow of RBGA input +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The alpha-channel of RBGA images is now re-sampled independently of +RGB channels. While this is a bug fix, it does change the output and +may result in some down-stream image comparison tests to fail. + +Autoscaling +~~~~~~~~~~~ +On log-axes where a single value is plotted at a "full" decade (1, 10, 100, +etc.), the autoscaling now expands the axis symmetrically around that point, +instead of adding a decade only to the right. + +Log-scaled axes +~~~~~~~~~~~~~~~ +When the default `LogLocator` would generate no ticks for an axis (e.g., an +axis with limits from 0.31 to 0.39) or only a single tick, it now instead falls +back on the linear `AutoLocator` to pick reasonable tick positions. + +`.Figure.add_subplot` with no arguments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Calling `.Figure.add_subplot()` with no positional arguments used to do +nothing; this now is equivalent to calling ``add_subplot(111)`` instead. + +`~.Axes.bxp` and rcparams +~~~~~~~~~~~~~~~~~~~~~~~~~ +`~.Axes.bxp` now respects :rc:`boxplot.boxprops.linewidth` even when +*patch_artist* is set. +Previously, when the *patch_artist* parameter was set, `~.Axes.bxp` would ignore +:rc:`boxplot.boxprops.linewidth`. This was an oversight -- in particular, +`~.Axes.boxplot` did not ignore it. + +Major/minor tick collisions +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Minor ticks that collide with major ticks are now hidden by default. +Previously, certain locator classes (`~.ticker.LogLocator`, +`~.ticker.AutoMinorLocator`) contained custom logic to avoid emitting +tick locations that collided with major ticks when they were used as +minor locators. This logic has now moved to the `~.axis.Axis` class, +and is used regardless of the locator class. You can control this +behavior via the `~.Axis.remove_overlaping_locs` attribute on +`~.axis.Axis`. + +If you were relying on both the major and minor tick labels to appear +on the same tick, you may need to update your code. For example, the +following snippet :: + + import numpy as np + import matplotlib.dates as mdates + import matplotlib.pyplot as plt + + t = np.arange("2018-11-03", "2018-11-06", dtype="datetime64") + x = np.random.rand(len(t)) + + fig, ax = plt.subplots() + ax.plot(t, x) + ax.xaxis.set( + major_locator=mdates.DayLocator(), + major_formatter=mdates.DateFormatter("\n%a"), + minor_locator=mdates.HourLocator((0, 6, 12, 18)), + minor_formatter=mdates.DateFormatter("%H:%M"), + ) + # disable removing overlapping locations + ax.xaxis.remove_overlapping_locs = False + plt.show() + +labeled days using major ticks, and hours and minutes using minor +ticks and added a newline to the major ticks labels to avoid them +crashing into the minor tick labels. Setting the +`~.Axis.remove_overlapping_locs` property (also accessible via +`~.Axis.set_remove_overlapping_locs` / +`~.Axis.get_remove_overlapping_locs` and `~.pyplot.setp`) disables +removing overlapping tick locations. + +The major tick labels could also be adjusted include hours and +minutes, as the minor ticks are gone, so the ``major_formatter`` +would be:: + + mdates.DateFormatter("%H:%M\n%a") + +usetex support +~~~~~~~~~~~~~~ +Previously, if :rc:`text.usetex` was True, then constructing a `TextPath` on +a non-mathtext string with ``usetex=False`` would rely on the mathtext parser +(but not on usetex support!) to parse the string. The mathtext parser is not +invoked anymore, which may cause slight changes in glyph positioning. + +get_window_extents +~~~~~~~~~~~~~~~~~~ + +`.matplotlib.axes.Axes.get_window_extent` used to return a bounding box +that was slightly larger than the axes, presumably to take into account +the ticks that may be on a spine. However, it was not scaling the tick sizes +according to the dpi of the canvas, and it did not check if the ticks were +visible, or on the spine. + +Now `.matplotlib.axes.Axes.get_window_extent` just returns the axes extent +with no padding for ticks. + +This affects `.matplotlib.axes.Axes.get_tightbbox` in cases where there are +outward ticks with no tick labels, and it also removes the (small) pad around +axes in that case. + +`.spines.Spine.get_window_extent` now takes into account ticks that are on the +spine. + +Sankey +~~~~~~ +Previously, `.Sankey.add` would only accept a single string as the *labels* +argument if its length is equal to the number of flows, in which case it would +use one character of the string for each flow. + +The behavior has been changed to match the documented one: when a single string +is passed, it is used to label all the flows. + +`~.font_manager.FontManager` scores +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.font_manager.FontManager.score_weight` is now more strict with its +inputs. Previously, when a weight string was passed to +`.font_manager.FontManager.score_weight`, + +- if the weight was the string representation of an integer, it would be + converted to that integer, +- otherwise, if the weight was not a standard weight name, it would be silently + replaced by a value of 500 ("normal" weight). + +`.font_manager.FontManager.score_weight` now raises an exception on such inputs. + +Text alignment +~~~~~~~~~~~~~~ + +Text alignment was previously incorrect, in particular for multiline text +objects with large descenders (i.e. subscripts) and rotated text. These have +been fixed and made more consistent, but could make old code that has +compensated for this no longer have the correct alignment. + +Upper case color strings +~~~~~~~~~~~~~~~~~~~~~~~~ + +Support for passing single-letter colors (one of "rgbcmykw") as UPPERCASE +characters is deprecated; these colors will become case-sensitive (lowercase) +after the deprecation period has passed. + +The goal is to decrease the number of ambiguous cases when using the ``data`` +keyword to plotting methods; e.g. ``plot("X", "Y", data={"X": ..., "Y": ...})`` +will not warn about "Y" possibly being a color anymore after the deprecation +period has passed. + +Degenerate limits +~~~~~~~~~~~~~~~~~ + +When bounds passed to `~.axes.Axes.set_xlim` are degenerate (i.e. the +lower and upper value are equal), the method used to "expand" the +bounds now matches the expansion behavior of autoscaling when the plot +contains a single x-value, and should in particular produce nicer +limits for non-linear scales. + +`~.Axes.plot` format string parsing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In certain cases, `~.Axes.plot` would previously accept format strings +specifying more than one linestyle (e.g. ``"---."`` which specifies both +``"--"`` and ``"-."``); only use one of them would be used. This now raises a +`ValueError` instead. + +HTMLWriter +~~~~~~~~~~ +The HTMLWriter constructor is more strict: it no longer normalizes unknown +values of *default_mode* to 'loop', but errors out instead. + +AFM parsing +~~~~~~~~~~~ +In accordance with the AFM spec, the AFM parser no longer truncates the +``UnderlinePosition`` and ``UnderlineThickness`` fields to integers. + +The ``Notice`` field (which can only be publicly accessed by the deprecated +``afm.parse_afm`` API) is no longer decoded to a `str`, but instead kept as +`bytes`, to support non-conformant AFM files that use non-ASCII characters in +that field. + +`.Artist.set` keyword normalisation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +`.Artist.set` now normalizes keywords before sorting them. Previously it sorted +its keyword arguments in reverse alphabetical order (with a special-case to +put ``color`` at the end) before applying them. + +It now normalizes aliases (and, as above, emits a warning on duplicate +properties) before doing the sorting (so ``c`` goes to the end too). + +`.Axes.tick_params` argument checking +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Previously `.Axes.tick_params` silently did nothing when an invalid *axis* +parameter was supplied. This behavior has been changed to raise a `ValueError` +instead. + +`.Axes.hist` output +~~~~~~~~~~~~~~~~~~~ + +Input that consists of multiple empty lists will now return a list of histogram +values for each one of the lists. For example, an input of ``[[],[]]`` will +return 2 lists of histogram values. Previously, a single list was returned. + +`.backend_bases.Timer.remove_callback` future signature change +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Currently, `.backend_bases.Timer.remove_callback(func, *args, +**kwargs)` removes a callback previously added by +`.backend_bases.Timer.add_callback(func, *args, **kwargs)`, but if +``*args, **kwargs`` is not passed in (ex, +``Timer.remove_callback(func)``), then the first callback with a +matching ``func`` is removed, regardless of whether it was added with +or without ``*args, **kwargs``. + +In a future version, ``Timer.remove_callback`` will always use the latter +behavior (not consider ``*args, **kwargs``); to specifically consider them, add +the callback as a `functools.partial` object :: + + cb = timer.add_callback(functools.partial(func, *args, **kwargs)) + # ... + # later + timer.remove_callback(cb) + +`.backend_bases.Timer.add_callback` was modified to return *func* to +simplify the above usage (previously it returned None); this also +allows using it as a decorator. + +The new API is modelled after `atexit.register` / `atexit.unregister`. + +`~.collections.StemContainer` performance increase +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`~.collections.StemContainer` objects can now store a +`~.collections.LineCollection` object instead of a list of +`~.lines.Line2D` objects for stem lines plotted using +`~.Axes.stem`. This gives a very large performance boost to displaying +and moving `~Axes.stem` plots. + +This will become the default behaviour in Matplotlib 3.3. To use it +now, the *use_line_collection* keyword argument to `~.Axes.stem` can +be set to `True` :: + + ax.stem(..., use_line_collection=True) + +Individual line segments can be extracted from the +`~.collections.LineCollection` using +`~.collections.LineCollection.get_segements()`. See the +`~.collections.LineCollection` documentation for other methods to +retrieve the collection properties. + + +`~matplotlib.colorbar.ColorbarBase` inheritance +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`matplotlib.colorbar.ColorbarBase` is no longer a subclass of +`.cm.ScalarMappable`. This inheritance lead to a confusing situation +where the `.cm.ScalarMappable` passed to `matplotlib.colorbar.Colorbar` +(`~.Figure.colorbar`) had a ``set_norm`` method, as did the colorbar. +The colorbar is now purely a follower to the `ScalarMappable` norm and +colormap, and the old inherited methods +`~matplotlib.colorbar.ColorbarBase.set_norm`, +`~matplotlib.colorbar.ColorbarBase.set_cmap`, +`~matplotlib.colorbar.ColorbarBase.set_clim` are deprecated, as are +the getter versions of those calls. To set the norm associated with a +colorbar do ``colorbar.mappable.set_norm()`` etc. + + +FreeType and libpng search paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The ``MPLBASEDIRLIST`` environment variables and ``basedirlist`` entry in +``setup.cfg`` have no effect anymore. Instead, if building in situations where +FreeType or libpng are not in the compiler or linker's default path, set the +standard environment variables ``CFLAGS``/``LDFLAGS`` on Linux or OSX, or +``CL``/``LINK`` on Windows, to indicate the relevant paths. + +See details in `Installing`. + +Setting artist properties twice or more in the same call +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Setting the same artist property multiple time via aliases is deprecated. +Previously, code such as :: + + plt.plot([0, 1], c="red", color="blue") + +would emit a warning indicating that ``c`` and ``color`` are aliases +of one another, and only keep the ``color`` kwarg. This behavior has +been deprecated; in a future version, this will raise a TypeError, +similar to Python's behavior when a keyword argument is passed twice :: + + plt.plot([0, 1], c="red", c="blue") + +This warning is raised by `~.cbook.normalize_kwargs`. + +Path code types +~~~~~~~~~~~~~~~ +Path code types like ``Path.MOVETO`` are now ``np.uint8`` instead of ``int`` +``Path.STOP``, ``Path.MOVETO``, ``Path.LINETO``, ``Path.CURVE3``, +``Path.CURVE4`` and ``Path.CLOSEPOLY`` are now of the type ``Path.code_type`` +(``np.uint8`` by default) instead of plain ``int``. This makes their type +match the array value type of the ``Path.codes`` array. + +LaTeX code in matplotlibrc file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Previously, the rc file keys ``pgf.preamble`` and ``text.latex.preamble`` were +parsed using commmas as separators. This would break valid LaTeX code, such as:: + + \usepackage[protrusion=true, expansion=false]{microtype} + +The parsing has been modified to pass the complete line to the LaTeX system, +keeping all commas. Passing a list of strings from within a Python script still +works as it used to. Passing a list containing non-strings now fails, instead +of coercing the results to strings. + +`.Axes.spy` +~~~~~~~~~~~ + +The method `.Axes.spy` now raises a `TypeError` for the keyword +arguments *interpolation* and *linestyle* instead of silently ignoring +them. + +Furthermore, `.Axes.spy` spy does now allow for an *extent* argument +(was silently ignored so far). + +A bug with `.Axes.spy(..., origin='lower')` is fixed. Previously this +flipped the data but not the y-axis resulting in a mismatch between +axes labels and actual data indices. Now, *origin='lower'* flips both +the data and the y-axis labels. + +Boxplot tick methods +~~~~~~~~~~~~~~~~~~~~ + +The *manage_xticks* parameter of `~.Axes.boxplot` and `~.Axes.bxp` has +been renamed (with a deprecation period) to *manage_ticks*, to take +into account the fact that it manages either x or y ticks depending on +the *vert* parameter. + +When ``manage_ticks=True`` (the default), these methods now attempt to +take previously drawn boxplots into account when setting the axis +limits, ticks, and tick labels. + +MouseEvents +~~~~~~~~~~~ +MouseEvents now include the event name in their `str()`. +Previously they contained the prefix "MPL MouseEvent". + +RGBA buffer return type +~~~~~~~~~~~~~~~~~~~~~~~ + +`.FigureCanvasAgg.buffer_rgba` and `.RendererAgg.buffer_rgba` now +return a memoryview The ``buffer_rgba`` method now allows direct +access to the renderer's underlying buffer (as a ``(m, n, 4)``-shape +memoryview) rather than copying the data to a new bytestring. This is +consistent with the behavior on Py2, where a buffer object was +returned. + + +`matplotlib.font_manager.win32InstalledFonts` return type +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +`matplotlib.font_manager.win32InstalledFonts` returns an empty list instead +of None if no fonts are found. + +`.Axes.fmt_xdata` and `.Axes.fmt_ydata` error handling +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Previously, if the user provided a `.Axes.fmt_xdata` or +`.Axes.fmt_ydata` function that raised a `TypeError` (or set them to a +non-callable), the exception would be silently ignored and the default +formatter be used instead. This is no longer the case; the exception +is now propagated out. + +Deprecation of redundant `Tick` attributes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``gridOn``, ``tick1On``, ``tick2On``, ``label1On``, and ``label2On`` +`~.Tick` attributes have been deprecated. Directly get and set the visibility +on the underlying artists, available as the ``gridline``, ``tick1line``, +``tick2line``, ``label1``, and ``label2`` attributes. + +The ``label`` attribute, which was an alias for ``label1``, has been +deprecated. + +Subclasses that relied on setting the above visibility attributes needs to be +updated; see e.g. :file:`examples/api/skewt.py`. + +Passing a Line2D's drawstyle together with the linestyle is deprecated +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Instead of ``plt.plot(..., linestyle="steps--")``, use ``plt.plot(..., +linestyle="--", drawstyle="steps")``. ``ds`` is now an alias for ``drawstyle``. + + +``pgi`` support dropped +----------------------- + +Support for ``pgi`` in the GTK3 backends has been dropped. ``pgi`` is +an alternative implementation to ``PyGObject``. ``PyGObject`` should +be used instead. + +rcParam changes +--------------- + +Removed +~~~~~~~ +The following deprecated rcParams have been removed: + +- ``text.dvipnghack`` +- ``nbagg.transparent`` (use :rc:`figure.facecolor` instead) +- ``plugins.directory`` +- ``axes.hold`` +- ``backend.qt4`` and ``backend.qt5`` (set the :envvar:`QT_API` environment + variable instead) + +Deprecated +~~~~~~~~~~ +The associated validator functions ``rcsetup.validate_qt4`` and +``validate_qt5`` are deprecated. + +The ``verbose.fileo`` and ``verbose.level`` rcParams have been deprecated. +These have had no effect since the switch from Matplotlib's old custom Verbose +logging to the stdlib's `logging` module. In addition the +``rcsetup.validate_verbose`` function is deprecated. + +The ``text.latex.unicode`` rcParam now defaults to ``True`` and is +deprecated (i.e., in future versions +of Matplotlib, unicode input will always be supported). +Moreover, the underlying implementation now uses ``\usepackage[utf8]{inputenc}`` +instead of ``\usepackage{ucs}\usepackage[utf8x]{inputenc}``. + +Exception changes +----------------- +- `mpl_toolkits.axes_grid1.axes_size.GetExtentHelper` now raises `ValueError` + for invalid directions instead of `KeyError`. +- Previously, subprocess failures in the animation framework would raise either + in a `RuntimeError` or a `ValueError` depending on when the error occurred. + They now raise a `subprocess.CalledProcessError` with attributes set as + documented by the exception class. +- In certain cases, Axes methods (and pyplot functions) used to raise + a `RuntimeError` if they were called with a ``data`` kwarg and + otherwise mismatched arguments. They now raise a `TypeError` + instead. +- `.Axes.streamplot` does not support irregularly gridded ``x`` and ``y`` values. + So far, it used to silently plot an incorrect result. This has been changed to + raise a `ValueError` instead. +- The `.streamplot.Grid` class, which is internally used by streamplot + code, also throws a `ValueError` when irregularly gridded values are + passed in. + +Removals +-------- +The following deprecated APIs have been removed: + +Classes and methods +~~~~~~~~~~~~~~~~~~~ +- ``Verbose`` (replaced by python logging library) +- ``artist.Artist.hitlist`` (no replacement) +- ``artist.Artist.is_figure_set`` (use ``artist.figure is not None`` instead) +- ``axis.Axis.unit_data`` (use ``axis.Axis.units`` instead) +- ``backend_bases.FigureCanvasBase.onRemove`` (no replacement) + ``backend_bases.FigureManagerBase.show_popup`` (this never did anything) +- ``backend_wx.SubplotToolWx`` (no replacement) +- ``backend_wx.Toolbar`` (use ``backend_wx.NavigationToolbar2Wx`` instead) +- ``cbook.align_iterators`` (no replacment) +- ``contour.ContourLabeler.get_real_label_width`` (no replacement) +- ``legend.Legend.draggable`` (use `legend.Legend.set_draggable()` instead) +- ``texmanager.TexManager.postscriptd``, ``texmanager.TexManager.pscnt``, + ``texmanager.TexManager.make_ps``, ``texmanager.TexManager.get_ps_bbox`` + (no replacements) + +Arguments +~~~~~~~~~ +- The *fig* kwarg to `.GridSpec.get_subplot_params` and + `.GridSpecFromSubplotSpec.get_subplot_params` (use the argument + *figure* instead) +- Passing 'box-forced' to `.Axes.set_adjustable` (use 'box' instead) +- Support for the strings 'on'/'true'/'off'/'false' to mean + `True` / `False` (directly use `True` / `False` instead). + The following functions are affected: + + - `.axes.Axes.grid` + - `.Axes3D.grid` + - `.Axis.set_tick_params` + - `.pyplot.box` +- Using `.pyplot.axes` with an `.axes.Axes` type argument + (use `.pyplot.sca` instead) + +Other +~~~~~ +The following miscellaneous API elements have been removed + +- svgfont support (in :rc:`svg.fonttype`) +- Logging is now done with the standard python ``logging`` library. + ``matplotlib.verbose`` and the command line switches ``--verbose-LEVEL`` have + been removed. + + To control the logging output use:: + + import logging + logger = logging.getLogger('matplotlib') + logger.set_level(logging.INFO) + +- ``__version__numpy__`` +- ``collections.CIRCLE_AREA_FACTOR`` +- ``font_manager.USE_FONTCONFIG`` +- ``font_manager.cachedir`` + +:mod:`matplotlib.mlab` removals +------------------------------- +Lots of code inside the :mod:`matplotlib.mlab` module which was deprecated +in Matplotlib 2.2 has been removed. See below for a list: + +- ``mlab.exp_safe`` (use `numpy.exp` instead) +- ``mlab.amap`` +- ``mlab.logspace`` (use `numpy.logspace` instead) +- ``mlab.rms_flat`` +- ``mlab.l1norm`` (use ``numpy.linalg.norm(a, ord=1)`` instead) +- ``mlab.l2norm`` (use ``numpy.linalg.norm(a, ord=2)`` instead) +- ``mlab.norm_flat`` (use ``numpy.linalg.norm(a.flat, ord=2)`` instead) +- ``mlab.frange`` (use `numpy.arange` instead) +- ``mlab.identity`` (use `numpy.identity` instead) +- ``mlab.base_repr`` +- ``mlab.binary_repr`` +- ``mlab.ispower2`` +- ``mlab.log2`` (use `numpy.log2` instead) +- ``mlab.isvector`` +- ``mlab.movavg`` +- ``mlab.safe_isinf`` (use `numpy.isinf` instead) +- ``mlab.safe_isnan`` (use `numpy.isnan` instead) +- ``mlab.cohere_pairs`` (use `scipy.signal.coherence` instead) +- ``mlab.entropy`` (use `scipy.stats.entropy` instead) +- ``mlab.normpdf`` (use `scipy.stats.norm.pdf` instead) +- ``mlab.find`` (use ``np.nonzero(np.ravel(condition))`` instead) +- ``mlab.longest_contiguous_ones`` +- ``mlab.longest_ones`` +- ``mlab.PCA`` +- ``mlab.prctile`` (use `numpy.percentile` instead) +- ``mlab.prctile_rank`` +- ``mlab.center_matrix`` +- ``mlab.rk4`` (use `scipy.integrate.ode` instead) +- ``mlab.bivariate_normal`` +- ``mlab.get_xyz_where`` +- ``mlab.get_sparse_matrix`` +- ``mlab.dist`` (use `numpy.hypot` instead) +- ``mlab.dist_point_to_segment`` +- ``mlab.griddata`` (use `scipy.interpolate.griddata`) +- ``mlab.less_simple_linear_interpolation`` (use `numpy.interp`) +- ``mlab.slopes`` +- ``mlab.stineman_interp`` +- ``mlab.segments_intersect`` +- ``mlab.fftsurr`` +- ``mlab.offset_line`` +- ``mlab.quad2cubic`` +- ``mlab.vector_lengths`` +- ``mlab.distances_along_curve`` +- ``mlab.path_length`` +- ``mlab.cross_from_above`` +- ``mlab.cross_from_below`` +- ``mlab.contiguous_regions`` (use `.cbook.contiguous_regions` instead) +- ``mlab.is_closed_polygon`` +- ``mlab.poly_between`` +- ``mlab.poly_below`` +- ``mlab.inside_poly`` +- ``mlab.csv2rec`` +- ``mlab.rec2csv`` (use `numpy.recarray.tofile` instead) +- ``mlab.rec2text`` (use `numpy.recarray.tofile` instead) +- ``mlab.rec_summarize`` +- ``mlab.rec_join`` +- ``mlab.recs_join`` +- ``mlab.rec_groupby`` +- ``mlab.rec_keep_fields`` +- ``mlab.rec_drop_fields`` +- ``mlab.rec_append_fields`` +- ``mlab.csvformat_factory`` +- ``mlab.get_formatd`` +- ``mlab.FormatDatetime`` (use `datetime.datetime.strftime` instead) +- ``mlab.FormatDate`` (use `datetime.date.strftime` instead) +- ``mlab.FormatMillions``, ``mlab.FormatThousands``, ``mlab.FormatPercent``, + ``mlab.FormatBool``, ``mlab.FormatInt``, ``mlab.FormatFloat``, + ``mlab.FormatFormatStr``, ``mlab.FormatString``, ``mlab.FormatObj`` +- ``mlab.donothing_callback`` + +:mod:`matplotlib.pylab` removals +-------------------------------- +Lots of code inside the :mod:`matplotlib.mlab` module which was deprecated +in Matplotlib 2.2 has been removed. This means the following functions are +no longer available in the `matplotlib.pylab` module: + +- ``amap`` +- ``base_repr`` +- ``binary_repr`` +- ``bivariate_normal`` +- ``center_matrix`` +- ``csv2rec`` (use `numpy.recarray.tofile` instead) +- ``dist`` (use `numpy.hypot` instead) +- ``dist_point_to_segment`` +- ``distances_along_curve`` +- ``entropy`` (use `scipy.stats.entropy` instead) +- ``exp_safe`` (use `numpy.exp` instead) +- ``fftsurr`` +- ``find`` (use ``np.nonzero(np.ravel(condition))`` instead) +- ``frange`` (use `numpy.arange` instead) +- ``get_sparse_matrix`` +- ``get_xyz_where`` +- ``griddata`` (use `scipy.interpolate.griddata` instead) +- ``identity`` (use `numpy.identity` instead) +- ``inside_poly`` +- ``is_closed_polygon`` +- ``ispower2`` +- ``isvector`` +- ``l1norm`` (use ``numpy.linalg.norm(a, ord=1)`` instead) +- ``l2norm`` (use ``numpy.linalg.norm(a, ord=2)`` instead) +- ``log2`` (use `numpy.log2` instead) +- ``longest_contiguous_ones`` +- ``longest_ones`` +- ``movavg`` +- ``norm_flat`` (use ``numpy.linalg.norm(a.flat, ord=2)`` instead) +- ``normpdf`` (use `scipy.stats.norm.pdf` instead) +- ``path_length`` +- ``poly_below`` +- ``poly_between`` +- ``prctile`` (use `numpy.percentile` instead) +- ``prctile_rank`` +- ``rec2csv`` (use `numpy.recarray.tofile` instead) +- ``rec_append_fields`` +- ``rec_drop_fields`` +- ``rec_join`` +- ``rk4`` (use `scipy.integrate.ode` instead) +- ``rms_flat`` +- ``segments_intersect`` +- ``slopes`` +- ``stineman_interp`` +- ``vector_lengths`` + +mplot3d changes +--------------- + +Voxel shading +~~~~~~~~~~~~~ +`.Axes3D.voxels` now shades the resulting voxels; for more details see +What's new. The previous behavior can be achieved by passing :: + + ax.voxels(.., shade=False) + + + +Equal aspect axes disabled +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Setting the aspect on 3D axes previously returned non-sensical results +(e.g. see :ghissue:`1077`). Calling ``ax.set_aspect('equal')`` or +``ax.set_aspect(num)`` on a 3D axes now raises a +`NotImplementedError`. + +`.Poly3DCollection.set_zsort` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.Poly3DCollection.set_zsort` no longer silently ignores invalid +inputs, or `False` (which was always broken). Passing `True` to mean +``"average"`` is deprecated. + +Testing +------- +The ``--no-network`` flag to ``tests.py`` has been removed (no test requires +internet access anymore). If it is desired to disable internet access both for +old and new versions of Matplotlib, use ``tests.py -m 'not network'`` (which is +now a no-op). + +The image comparison test decorators now skip (rather than xfail) the test for +uncomparable formats. The affected decorators are `~.image_comparison` and +`~.check_figures_equal`. The deprecated `~.ImageComparisonTest` class is +likewise changed. + +Dependency changes +------------------ + +numpy +~~~~~ +Matplotlib 3.1 now requires numpy>=1.11. + +ghostscript +~~~~~~~~~~~ +Support for ghostscript 8.60 (released in 2007) has been removed. The oldest +supported version of ghostscript is now 9.0 (released in 2010). + +Mathtext changes +---------------- +- In constructs such as ``"$1~2$"``, mathtext now interprets the tilde as a + space, consistently with TeX (this was previously a parse error). + +Deprecations +~~~~~~~~~~~~ +- The ``\stackrel`` mathtext command hsa been deprecated (it behaved differently + from LaTeX's ``\stackrel``. To stack two mathtext expressions, use + ``\genfrac{left-delim}{right-delim}{fraction-bar-thickness}{}{top}{bottom}``. +- The `\mathcircled` mathtext command (which is not a real TeX command) + is deprecated. Directly use unicode characters (e.g. + ``"\N{CIRCLED LATIN CAPITAL LETTER A}"`` or ``"\u24b6"``) instead. +- Support for setting :rc:`mathtext.default` to circled is deprecated. + +Signature deprecations +---------------------- +The following signature related behaviours are deprecated: + +- The *withdash* keyword argument to `.Axes.text()`. Consider using + `.Axes.annotate()` instead. +- Passing (n, 1)-shaped error arrays to `.Axes.errorbar()`, which was not + documented and did not work for ``n = 2``. Pass a 1D array instead. +- The *frameon* kwarg to `~.Figure.savefig` and the :rc:`savefig.frameon` rcParam. + To emulate ``frameon = False``, set *facecolor* to fully + transparent (``"none"``, or ``(0, 0, 0, 0)``). +- Passing a non-1D (typically, (n, 1)-shaped) input to `.Axes.pie`. + Pass a 1D array instead. +- The `.TextPath` constructor used to silently drop ignored arguments; this + behavior is deprecated. +- The *usetex* parameter of `.TextToPath.get_text_path` is deprecated and + folded into the *ismath* parameter, which can now take the values + `False`, `True`, and ``"TeX"``, consistently with other low-level + text processing functions. +- Passing ``'normal'`` to `.axes.Axes.axis()` is deprecated, use + ``ax.axis('auto')`` instead. +- Passing the *block* argument of `.pyplot.show` positionally is deprecated; it + should be passed by keyword. +- When using the nbagg backend, `.pyplot.show` used to silently accept and ignore + all combinations of positional and keyword arguments. This behavior is + deprecated. +- The unused *shape* and *imlim* parameters to `.Axes.imshow` are + deprecated. To avoid triggering the deprecation warning, the *filternorm*, + *filterrad*, *resample*, and *url* arguments should be passed by + keyword. +- The *interp_at_native* parameter to `.BboxImage`, which has had no effect + since Matplotlib 2.0, is deprecated. +- All arguments to the `.cbook.deprecated` decorator and `.cbook.warn_deprecated` + function, except the first one (the version where the deprecation occurred), + are now keyword-only. The goal is to avoid accidentally setting the "message" + argument when the "name" (or "alternative") argument was intended, as this has + repeatedly occurred in the past. +- The arguments of `matplotlib.testing.compare.calculate_rms` have been renamed + from ``expectedImage, actualImage``, to ``expected_image, actual_image``. +- Passing positional arguments to `.Axis.set_ticklabels` beyond *ticklabels* + itself has no effect, and support for them is deprecated. +- Passing ``shade=None`` to `~.axes3d.Axes3D.plot_surface` is deprecated. This + was an unintended implementation detail with the same semantics as + ``shade=False``. Please use the latter code instead. +- `matplotlib.ticker.MaxNLocator` and its *set_params* method will issue + a warning on unknown keyword arguments instead of silently ignoring them. + Future versions will raise an error. + +Changes in parameter names +-------------------------- + +- The *arg* parameter to `matplotlib.use` has been renamed to *backend*. + + This will only affect cases where that parameter has been set + as a keyword argument. The common usage pattern as a positional argument + ``matplotlib.use('Qt5Agg')`` is not affected. +- The *normed* parameter to `Axes.hist2d` has been renamed to *density*. +- The *s* parameter to `Annotation` (and indirectly `Axes.annotation`) has + been renamed to *text*. +- The *tolerence* parameter to + `bezier.find_bezier_t_intersecting_with_closedpath`, + `bezier.split_bezier_intersecting_with_closedpath`, + `bezier.find_r_to_boundary_of_closedpath`, + `bezier.split_path_inout` and `bezier.check_if_parallel` has been renamed to + *tolerance*. + +In each case, the old parameter name remains supported (it cannot be used +simultaneously with the new name), but support for it will be dropped in +Matplotlib 3.3. + +Class/method/attribute deprecations +----------------------------------- + + + +Support for custom backends that do not provide a +`.GraphicsContextBase.set_hatch_color` method is deprecated. We +suggest that custom backends let their ``GraphicsContext`` class +inherit from `.GraphicsContextBase`, to at least provide stubs for all +required methods. + +- `.spine.Spine.is_frame_like` + +This has not been used in the codebase since its addition in 2009. + +- `.axis3d.Axis.get_tick_positions` + + This has never been used internally, there is no equivalent method exists on + the 2D Axis classes, and despite the similar name, it has a completely + different behavior from the 2D Axis' `axis.Axis.get_ticks_position` method. +- `.backend_pgf.LatexManagerFactory` + +- `.mpl_toolkits.axisartist.axislines.SimpleChainedObjects` +- `.mpl_toolkits.Axes.AxisDict` + +Internal Helper Functions +~~~~~~~~~~~~~~~~~~~~~~~~~ + +- `.checkdep_dvipng` +- `.checkdep_ghostscript` +- `.checkdep_pdftops` +- `.checkdep_inkscape` + + +- `.ticker.decade_up` +- `.ticker.decade_down` + + +- `.cbook.dedent` +- `.docstring.Appender` +- `.docstring.dedent` +- `.docstring.copy_dedent` + +Use the standard library's docstring manipulation tools instead, such as +`inspect.cleandoc` and `inspect.getdoc`. + + + +- `matplotlib.scale.get_scale_docs()` +- `matplotlib.pyplot.get_scale_docs()` + +These are considered internal and will be removed from the public API in a +future version. + +- `.projections.process_projection_requirements` + +- ``backend_ps.PsBackendHelper`` +- ``backend_ps.ps_backend_helper``, + +- `.cbook.iterable` +- `.cbook.get_label` +- `.cbook.safezip` + Manually check the lengths of the inputs instead, or rely on numpy to do it. +- `.cbook.is_hashable` + Use ``isinstance(..., collections.abc.Hashable)`` instead. + +- The `.backend_bases.RendererBase.strip_math`. Use + `.cbook.strip_math` instead. + +Multiple internal functions that were exposed as part of the public API +of `.mpl_toolkits.mplot3d` are deprecated, + +**mpl_toolkits.mplot3d.art3d** + +- :func:`mpl_toolkits.mplot3d.art3d.norm_angle` +- :func:`mpl_toolkits.mplot3d.art3d.norm_text_angle` +- :func:`mpl_toolkits.mplot3d.art3d.path_to_3d_segment` +- :func:`mpl_toolkits.mplot3d.art3d.paths_to_3d_segments` +- :func:`mpl_toolkits.mplot3d.art3d.path_to_3d_segment_with_codes` +- :func:`mpl_toolkits.mplot3d.art3d.paths_to_3d_segments_with_codes` +- :func:`mpl_toolkits.mplot3d.art3d.get_patch_verts` +- :func:`mpl_toolkits.mplot3d.art3d.get_colors` +- :func:`mpl_toolkits.mplot3d.art3d.zalpha` + +**mpl_toolkits.mplot3d.proj3d** + +- :func:`mpl_toolkits.mplot3d.proj3d.line2d` +- :func:`mpl_toolkits.mplot3d.proj3d.line2d_dist` +- :func:`mpl_toolkits.mplot3d.proj3d.line2d_seg_dist` +- :func:`mpl_toolkits.mplot3d.proj3d.mod` +- :func:`mpl_toolkits.mplot3d.proj3d.proj_transform_vec` +- :func:`mpl_toolkits.mplot3d.proj3d.proj_transform_vec_clip` +- :func:`mpl_toolkits.mplot3d.proj3d.vec_pad_ones` +- :func:`mpl_toolkits.mplot3d.proj3d.proj_trans_clip_points` + +If your project relies on these functions, consider vendoring them. + + +Font Handling +~~~~~~~~~~~~~ + +- `.backend_pdf.RendererPdf.afm_font_cache` +- `.backend_ps.RendererPS.afmfontd` +- `.font_manager.OSXInstalledFonts` +- `.TextToPath.glyph_to_path` (Instead call ``font.get_path()`` and manually transform the path.) + + +Date related functions +~~~~~~~~~~~~~~~~~~~~~~ + +- `.dates.seconds()` +- `.dates.minutes()` +- `.dates.hours()` +- `.dates.weeks()` +- `.dates.strpdate2num` +- `.dates.bytespdate2num` + +These are brittle in the presence of locale changes. Use standard datetime +parsers such as `time.strptime` or `dateutil.parser.parse`, and additionally +call `matplotlib.dates.date2num` if you need to convert to Matplotlib's +internal datetime representation; or use ``dates.datestr2num``. + +Axes3D +~~~~~~ + +- `.axes3d.Axes3D.w_xaxis` +- `.axes3d.Axes3D.w_yaxis` +- `.axes3d.Axes3D.w_zaxis` + +Use `.axes3d.Axes3D.xaxis`, `.axes3d.Axes3D.yaxis` and `.axes3d.Axes3D.zaxis` +instead. + +Testing +~~~~~~~ + +- `matplotlib.testing.decorators.switch_backend` decorator + +Test functions should use `pytest.mark.backend(...)`, and the mark will be +picked up by the `matplotlib.testing.conftest.mpl_test_settings` fixture. + +Quiver +~~~~~~ + +- ``.color`` attribute of `Quiver` objects + +Instead, use (as for any `Collection`) the ``get_facecolor`` method. +Note that setting to the ``.color`` attribute did not update the quiver artist, +whereas calling ``set_facecolor`` does. + +GUI / backend details +~~~~~~~~~~~~~~~~~~~~~ + +- ``.get_py2exe_datafiles`` +- ``.tk_window_focus`` +- `.backend_gtk3.FileChooserDialog` +- `.backend_gtk3.NavigationToolbar2GTK3.get_filechooser` +- `.backend_gtk3.SaveFigureGTK3.get_filechooser` +- `.NavigationToolbar2QT.adj_window` attribute. This is unused and always ``None``. +- `.backend_wx.IDLE_DELAY` global variable + This is unused and only relevant to the now removed wx "idling" code (note that + as it is a module-level global, no deprecation warning is emitted when + accessing it). +- `.mlab.demean` +- ``backend_gtk3cairo.FigureCanvasGTK3Cairo``, +- ``backend_wx.debug_on_error``, ``backend_wx.fake_stderr``, + ``backend_wx.raise_msg_to_str``, ``backend_wx.MenuButtonWx``, + ``backend_wx.PrintoutWx``, +- ``matplotlib.backends.qt_editor.formlayout`` module + +This module is a vendored, modified version of the official formlayout_ module +available on PyPI. Install that module separately if you need it. + +.. _formlayout: https://pypi.org/project/formlayout/ + +- `.GraphicsContextPS.shouldstroke` + + +Transforms / scales +~~~~~~~~~~~~~~~~~~~ + +- ``LogTransformBase`` +- ``Log10Transform`` +- ``Log2Transform``, +- ``NaturalLogTransformLog`` +- ``InvertedLogTransformBase`` +- ``InvertedLog10Transform`` +- ``InvertedLog2Transform`` +- ``InvertedNaturalLogTransform`` + +These classes defined in :mod:`matplotlib.scales` are deprecated. +As a replacement, use the general `LogTransform` and `InvertedLogTransform` +classes, whose constructors take a *base* argument. + +Locators / Formatters +~~~~~~~~~~~~~~~~~~~~~ + +- ``OldScalarFormatter.pprint_val`` +- ``ScalarFormatter.pprint_val`` +- ``LogFormatter.pprint_val`` + +These are helper methods that do not have a consistent signature across +formatter classes. + +Path tools +~~~~~~~~~~ + +- `.path.get_paths_extents` + +Use `~.path.get_path_collection_extents` instead. + +- `.Path.has_nonfinite` attribute + +Use ``not np.isfinite(path.vertices).all()`` instead. + +- `.bezier.find_r_to_boundary_of_closedpath` function is deprecated + +This has always returned None instead of the requested radius. + +Text +~~~~ + +- `.text.TextWithDash` +- `.Text.is_math_text` +- `.TextPath.is_math_text` +- `.TextPath.text_get_vertices_codes` (As an alternative, construct a new ``TextPath`` object.) + +Unused attributes +~~~~~~~~~~~~~~~~~ + +- `.NavigationToolbar2QT.buttons` +- `.Line2D.verticalOffset` +- `.Quiver.keytext` +- `.Quiver.keyvec` +- `.SpanSelector.buttonDown` + +These are unused and never updated. + + +Sphinx extensions +~~~~~~~~~~~~~~~~~ + +- ``matplotlib.sphinxext.mathmpl.math_directive`` +- ``matplotlib.sphinxext.plot_directive.plot_directive`` + +This is because the ``matplotlib.sphinxext.mathmpl`` and +``matplotlib.sphinxext.plot_directive`` interfaces have changed from the +(Sphinx-)deprecated function-based interface to a class-based interface; this +should not affect end users. + +- ``mpl_toolkits.axisartist.axis_artist.UnimplementedException`` + +Environmental Variables +~~~~~~~~~~~~~~~~~~~~~~~ + +- The ``MATPLOTLIBDATA`` environment variable + + +Axis +~~~~ + +- `.Axis.iter_ticks` + +This only served as a helper to the private `.Axis._update_ticks` + + +Undeprecations +-------------- +The following API elements have bee un-deprecated: + +- The *obj_type* kwarg to the `.cbook.deprecated` decorator. +- *xmin*, *xmax* kwargs to `.Axes.set_xlim` and *ymin*, *ymax* kwargs + to `.Axes.set_ylim` + + +New features +------------ + +`Text` now has a ``c`` alias for the ``color`` property +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +For consistency with `.Line2D`, the `~.text.Text` class has gained the ``c`` +alias for the ``color`` property. For example, one can now write :: + + ax.text(.5, .5, "foo", c="red") + + +``Cn`` colors now support ``n>=10`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +It is now possible to go beyond the tenth color in the property cycle using +``Cn`` syntax, e.g. :: + + plt.plot([1, 2], color="C11") + +now uses the 12th color in the cycle. + +Note that previously, a construct such as:: + + plt.plot([1, 2], "C11") + +would be interpreted as a request to use color ``C1`` and marker ``1`` +(an "inverted Y"). To obtain such a plot, one should now use :: + + plt.plot([1, 2], "1C1") + +(so that the first "1" gets correctly interpreted as a marker +specification), or, more explicitly:: + + plt.plot([1, 2], marker="1", color="C1") + + +New `.Formatter.format_ticks` method +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The `.Formatter` class gained a new `~.Formatter.format_ticks` method, which +takes the list of all tick locations as a single argument and returns the list +of all formatted values. It is called by the axis tick handling code and, by +default, first calls `~.Formatter.set_locs` with all locations, then repeatedly +calls `~.Formatter.__call__` for each location. + +Tick-handling code in the codebase that previously performed this sequence +(`~.Formatter.set_locs` followed by repeated `~.Formatter.__call__`) have been +updated to use `~.Formatter.format_ticks`. + +`~.Formatter.format_ticks` is intended to be overridden by `.Formatter` +subclasses for which the formatting of a tick value depends on other tick +values, such as `.ConciseDateFormatter`. + +Added support for RGB(A) images in pcolorfast +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +pcolorfast now accepts 3D images (RGB or RGBA) arrays if the X and Y +specifications allow image or pcolorimage rendering; they remain unsupported by +the more general quadmesh rendering + + +Invalid inputs +-------------- + +Passing invalid locations to `~.Axes.legend` and `~.Axes.table` used +to fallback on a default location. This behavior is deprecated and +will throw an exception in a future version. + +`.offsetbox.AnchoredText` is unable to handle the *horizontalalignment* or +*verticalalignment* kwargs, and used to ignore them with a warning. This +behavior is deprecated and will throw an exception in a future version. + +Passing steps less than 1 or greater than 10 to `~ticker..MaxNLocator` used to +result in undefined behavior. It now throws a `ValueError`. + +The signature of the (private) ``Axis._update_ticks`` has been changed to not +take the renderer as argument anymore (that argument is unused). diff --git a/doc/api/prev_api_changes/api_changes_3.1.1.rst b/doc/api/prev_api_changes/api_changes_3.1.1.rst new file mode 100644 index 000000000000..8df0b845f87d --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.1.1.rst @@ -0,0 +1,16 @@ +API Changes for 3.1.1 +===================== + +.. contents:: + :local: + :depth: 1 + +Behavior changes +---------------- + +Locator.nonsingular return order +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`Locator.nonsingular` (introduced in mpl 3.1) now returns a range ``v0, v1`` +with ``v0 <= v1``. This behavior is consistent with the implementation of +``nonsingular`` by the `LogLocator` and `LogitLocator` subclasses. diff --git a/doc/api/prev_api_changes/api_changes_3.2.0.rst b/doc/api/prev_api_changes/api_changes_3.2.0.rst new file mode 100644 index 000000000000..e6d79890e2cc --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.2.0.rst @@ -0,0 +1,14 @@ +API Changes for 3.2.0 +===================== + +.. contents:: + :local: + :depth: 1 + +.. include:: /api/prev_api_changes/api_changes_3.2.0/behavior.rst + +.. include:: /api/prev_api_changes/api_changes_3.2.0/deprecations.rst + +.. include:: /api/prev_api_changes/api_changes_3.2.0/removals.rst + +.. include:: /api/prev_api_changes/api_changes_3.2.0/development.rst diff --git a/doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst b/doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst new file mode 100644 index 000000000000..f50fbe4ac15e --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst @@ -0,0 +1,301 @@ + +Behavior changes +---------------- + +Reduced default value of :rc:`axes.formatter.limits` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Changed the default value of :rc:`axes.formatter.limits` from -7, 7 to +-5, 6 for better readability. + +.. plot:: + + import matplotlib.pyplot as plt + import numpy as np + + fig, (ax_old, ax_new) = plt.subplots(1, 2, constrained_layout=True) + + ax_new.set_title('new values (-5, 6)') + ax_old.set_title('old values (-7, 7)') + + x = np.logspace(-8, 8, 1024) + y = 1e-5 * np.exp(-x / 1e5) + 1e-6 + + ax_old.xaxis.get_major_formatter().set_powerlimits((-7, 7)) + ax_old.yaxis.get_major_formatter().set_powerlimits((-7, 7)) + + for ax in [ax_new, ax_old]: + ax.plot(x, y) + ax.set_xlim(0, 1e6) + ax.set_ylim(1e-6, 1e-5) + + +`matplotlib.colorbar.Colorbar` uses un-normalized axes for all mappables +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Before 3.0, `matplotlib.colorbar.Colorbar` (`~.Figure.colorbar`) normalized +all axes limits between 0 and 1 and had custom tickers to handle the +labelling of the colorbar ticks. After 3.0, colorbars constructed from +mappables that were *not* contours were constructed with axes that had +limits between ``vmin`` and ``vmax`` of the mappable's norm, and the tickers +were made children of the normal axes tickers. + +This version of Matplotlib extends that to mappables made by contours, and +allows the axes to run between the lowest boundary in the contour and the +highest. + +Code that worked around the normalization between 0 and 1 will need to be +modified. + +`MovieWriterRegistry` +~~~~~~~~~~~~~~~~~~~~~ +`MovieWriterRegistry` now always checks the availability of the writer classes +before returning them. If one wishes, for example, to get the first available +writer, without performing the availability check on subsequent writers, it is +now possible to iterate over the registry, which will yield the names of the +available classes. + +Autoscaling +~~~~~~~~~~~ + +Matplotlib used to recompute autoscaled limits after every plotting +(``plot()``, ``bar()``, etc.) call. It now only does so when actually +rendering the canvas, or when the user queries the Axes limits. This is a +major performance improvement for plots with a large number of artists. + +In particular, this means that artists added manually with `Axes.add_line`, +`Axes.add_patch`, etc. will be taken into account by the autoscale, even +without an explicit call to `Axes.autoscale_view`. + +In some cases, this can result in different limits being reported. If this is +an issue, consider triggering a draw with `fig.canvas.draw`. + +Autoscaling has also changed for artists that are based on the `.Collection` +class. Previously, the method that calculates the automatic limits +`.Collection.get_datalim` tried to take into account the size of objects +in the collection and make the limits large enough to not clip any of the +object, i.e., for `.Axes.scatter` it would make the limits large enough to not +clip any markers in the scatter. This is problematic when the object size is +specified in physical space, or figure-relative space, because the transform +from physical units to data limits requires knowing the data limits, and +becomes invalid when the new limits are applied. This is an inverse +problem that is theoretically solvable (if the object is physically smaller +than the axes), but the extra complexity was not deemed worth it, particularly +as the most common use case is for markers in scatter that are usually small +enough to be accommodated by the default data limit margins. + +While the new behavior is algorithmically simpler, it is conditional on +properties of the `.Collection` object: + + 1. ``offsets = None``, ``transform`` is a child of `.Axes.transData`: use the paths + for the automatic limits (i.e. for `.LineCollection` in `.Axes.streamplot`). + 2. ``offsets != None``, and ``offset_transform`` is child of `.Axes.transData`: + + a) ``transform`` is child of `.Axes.transData`: use the ``path + offset`` for + limits (i.e., for `.Axes.bar`). + b) ``transform`` is not a child of `.Axes.transData`: just use the offsets + for the limits (i.e. for scatter) + + 3. otherwise return a null `.Bbox`. + +While this seems complicated, the logic is simply to use the information from +the object that are in data space for the limits, but not information that is +in physical units. + +log-scale bar() / hist() autolimits +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The autolimits computation in `~.Axes.bar` and `~.Axes.hist` when the axes +already uses log-scale has changed to match the computation when the axes is +switched to log-scale after the call to `~.Axes.bar` and `~.Axes.hist`, and +when calling ``bar(..., log=True)`` / ``hist(..., log=True)``: if there are +at least two different bar heights, add the normal axes margins to them (in +log-scale); if there is only a single bar height, expand the axes limits by one +order of magnitude around it and then apply axes margins. + + +Axes labels spanning multiple rows/columns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``Axes.label_outer`` now correctly keep the x labels and tick labels visible +for Axes spanning multiple rows, as long as they cover the last row of the Axes +grid. (This is consistent with keeping the y labels and tick labels visible +for Axes spanning multiple columns as long as they cover the first column of +the Axes grid.) + +The ``Axes.is_last_row`` and ``Axes.is_last_col`` methods now correctly return +True for Axes spanning multiple rows, as long as they cover the last row or +column respectively. Again this is consistent with the behavior for axes +covering the first row or column. + +The ``Axes.rowNum`` and ``Axes.colNum`` attributes are deprecated, as they only +refer to the first grid cell covered by the Axes. Instead, use the new +``ax.get_subplotspec().rowspan`` and ``ax.get_subplotspec().colspan`` +properties, which are `range` objects indicating the whole span of rows and +columns covered by the subplot. + +(Note that all methods and attributes mentioned here actually only exist on +the ``Subplot`` subclass of `Axes`, which is used for grid-positioned Axes but +not for Axes positioned directly in absolute coordinates.) + +The `.GridSpec` class gained the ``nrows`` and ``ncols`` properties as more +explicit synonyms for the parameters returned by ``GridSpec.get_geometry``. + + +Locators +~~~~~~~~ +When more than `.Locator.MAXTICKS` ticks are generated, the behavior of +`.Locator.raise_if_exceeds` changed from raising a RuntimeError to emitting a +log at WARNING level. + +nonsingular Locators +~~~~~~~~~~~~~~~~~~~~ +``Locator.nonsingular`` (introduced in mpl 3.1), ``DateLocator.nonsingular``, and +``AutoDateLocator.nonsingular`` now returns a range ``v0, v1`` with ``v0 <= v1``. +This behavior is consistent with the implementation of ``nonsingular`` by the +``LogLocator`` and ``LogitLocator`` subclasses. + +``get_data_ratio`` +~~~~~~~~~~~~~~~~~~ +``Axes.get_data_ratio`` now takes the axes scale into account (linear, log, +logit, etc.) before computing the y-to-x ratio. This change allows fixed +aspects to be applied to any combination of x and y scales. + +Artist sticky edges +~~~~~~~~~~~~~~~~~~~ +Previously, the ``sticky_edges`` attribute of artists was a list of values such +that if an axis limit coincides with a sticky edge, it would not be expanded by +the axes margins (this is the mechanism that e.g. prevents margins from being +added around images). + +``sticky_edges`` now have an additional effect on margins application: even if +an axis limit did not coincide with a sticky edge, it cannot *cross* a sticky +edge through margin application -- instead, the margins will only expand the +axis limit until it bumps against the sticky edge. + +This change improves the margins of axes displaying a `~Axes.streamplot`: + +- if the streamplot goes all the way to the edges of the vector field, then the + axis limits are set to match exactly the vector field limits (whereas they + would sometimes be off by a small floating point error previously). +- if the streamplot does not reach the edges of the vector field (e.g., due to + the use of ``start_points`` and ``maxlength``), then margins expansion will + not cross the vector field limits anymore. + +This change is also used internally to ensure that polar plots don't display +negative *r* values unless the user really passes in a negative value. + +``gid`` in svg output +~~~~~~~~~~~~~~~~~~~~~ +Previously, if a figure, axis, legend or some other artists had a custom +``gid`` set (e.g. via ``.set_gid()``), this would not be reflected in +the svg output. Instead a default gid, like ``figure_1`` would be shown. +This is now fixed, such that e.g. ``fig.set_gid("myfigure")`` correctly +shows up as ```` in the svg file. If you relied on the +gid having the default format, you now need to make sure not to set the +``gid`` parameter of the artists. + +Fonts +~~~~~ +Font weight guessing now first checks for the presence of the FT_STYLE_BOLD_FLAG +before trying to match substrings in the font name. In particular, this means +that Times New Roman Bold is now correctly detected as bold, not normal weight. + +Color-like checking +~~~~~~~~~~~~~~~~~~~ +`matplotlib.color.is_colorlike()` used to return True for all string +representations of floats. However, only those with values in 0-1 are valid +colors (representing grayscale values). ``is_colorlike()`` now returns False +for string representations of floats outside 0-1. + +Default image interpolation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Images displayed in Matplotlib previously used nearest-neighbor +interpolation, leading to aliasing effects for downscaling and non-integer +upscaling. + +New default for :rc:`image.interpolation` is the new option "antialiased". +`imshow(A, interpolation='antialiased')` will apply a Hanning filter when +resampling the data in A for display (or saving to file) *if* the upsample +rate is less than a factor of three, and not an integer; downsampled data is +always smoothed at resampling. + +To get the old behavior, set :rc:`interpolation` to the old default "nearest" +(or specify the ``interpolation`` kwarg of `.Axes.imshow`) + +To always get the anti-aliasing behavior, no matter what the up/down sample +rate, set :rc:`interpolation` to "hanning" (or one of the other filters +available). + +Note that the "hanning" filter was chosen because it has only a modest +performance penalty. Anti-aliasing can be improved with other filters. + +rcParams +~~~~~~~~ +When using `RendererSVG` with ``rcParams["svg.image_inline"] == +True``, externally written images now use a single counter even if the +``renderer.basename`` attribute is overwritten, rather than a counter per +basename. + +This change will only affect you if you used ``rcParams["svg.image_inline"] = True`` +(the default is False) *and* manually modified ``renderer.basename``. + +Changed the default value of :rc:`axes.formatter.limits` from -7, 7 to -5, 6 +for better readability. + +``add_subplot()`` +~~~~~~~~~~~~~~~~~ +`.Figure.add_subplot()` and `.pyplot.subplot()` do not accept a `figure` +keyword argument anymore. It only used to work anyway if the passed figure +was ``self`` or the current figure, respectively. + +``indicate_inset()`` +~~~~~~~~~~~~~~~~~~~~ +In <= 3.1.0, `~matplotlib.axes.Axes.indicate_inset` and +`~matplotlib.axes.Axes.indicate_inset_zoom` were documented as returning +a 4-tuple of `~matplotlib.patches.ConnectionPatch`, where in fact they +returned a 4-length list. + +They now correctly return a 4-tuple. +`~matplotlib.axes.Axes.indicate_inset` would previously raise an error if +the optional *inset_ax* was not supplied; it now completes successfully, +and returns *None* instead of the tuple of ``ConnectionPatch``. + +PGF backend +~~~~~~~~~~~ +The pgf backend's get_canvas_width_height now returns the canvas size in +display units rather than in inches, which it previously did. +The new behavior is the correct one given the uses of ``get_canvas_width_height`` +in the rest of the codebase. + +The pgf backend now includes images using ``\includegraphics`` instead of +``\pgfimage`` if the version of ``graphicx`` is recent enough to support the +``interpolate`` option (this is detected automatically). + +`~matplotlib.cbook` +~~~~~~~~~~~~~~~~~~~ +The default value of the "obj_type" parameter to ``cbook.warn_deprecated`` has +been changed from "attribute" (a default that was never used internally) to the +empty string. + +Testing +~~~~~~~ +The test suite no longer turns on the Python fault handler by default. +Set the standard ``PYTHONFAULTHANDLER`` environment variable to do so. + +Backend ``supports_blit`` +~~~~~~~~~~~~~~~~~~~~~~~~~ +Backends do not need to explicitly define the flag ``supports_blit`` anymore. +This is only relevant for backend developers. Backends had to define the flag +``supports_blit``. This is not needed anymore because the blitting capability +is now automatically detected. + +Exception changes +~~~~~~~~~~~~~~~~~ +Various APIs that raised a `ValueError` for incorrectly typed inputs now raise +`TypeError` instead: `backend_bases.GraphicsContextBase.set_clip_path`, +`blocking_input.BlockingInput.__call__`, `cm.register_cmap`, `dviread.DviFont`, +`rcsetup.validate_hatch`, `rcsetup.validate_animation_writer_path`, `spines.Spine`, +many classes in the :mod:`matplotlib.transforms` module and :mod:`matplotlib.tri` +package, and Axes methods that take a ``norm`` parameter. + +If extra kwargs are passed to `.LogScale`, `TypeError` will now be +raised instead of `ValueError`. diff --git a/doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst b/doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst new file mode 100644 index 000000000000..4774515da565 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst @@ -0,0 +1,282 @@ + +Deprecations +------------ + +`matplotlib.use` +~~~~~~~~~~~~~~~~ +The ``warn`` parameter to `matplotlib.use()` is deprecated (catch the +`ImportError` emitted on backend switch failure and reemit a warning yourself +if so desired). + +plotfile +~~~~~~~~ +`.pyplot.plotfile` is deprecated in favor of separately loading and plotting +the data. See :doc:`/gallery/misc/plotfile_demo_sgskip` for various ways to +use pandas or numpy to load data, and pandas or matplotlib to plot the +resulting data. + +axes and axis +~~~~~~~~~~~~~ +Setting ``Axis.major.locator``, ``Axis.minor.locator``, ``Axis.major.formatter`` +or ``Axis.minor.formatter`` to an object that is not a subclass of `Locator` or +`Formatter` (respectively) is deprecated. Note that these attributes should +usually be set using `Axis.set_major_locator`, `Axis.set_minor_locator`, etc. +which already raise an exception when an object of the wrong class is passed. + +Passing more than one positional argument or unsupported keyword arguments to +`~matplotlib.axes.Axes.axis()` is deprecated (such arguments used to be +silently ignored). + +``minor`` argument will become keyword-only +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Using the parameter ``minor`` to ``get_*ticks()`` / ``set_*ticks()`` as a +positional parameter is deprecated. It will become keyword-only in future +versions. + +``axes_grid1`` +~~~~~~~~~~~~~~ +The ``mpl_toolkits.axes_grid1.colorbar`` module and its colorbar implementation +are deprecated in favor of :mod:`matplotlib.colorbar`, as the former is +essentially abandoned and the latter is a more featureful replacement with a +nearly compatible API (for example, the following additional keywords are +supported: ``panchor``, ``extendfrac``, ``extendrect``). + +The main differences are: + +- Setting the ticks on the colorbar is done by calling ``colorbar.set_ticks`` + rather than ``colorbar.cbar_axis.set_xticks`` or + ``colorbar.cbar_axis.set_yticks``; the ``locator`` parameter to ``colorbar()`` + is deprecated in favor of its synonym ``ticks`` (which already existed + previously, and is consistent with :mod:`matplotlib.colorbar`). +- The colorbar's long axis is accessed with ``colorbar.xaxis`` or + ``colorbar.yaxis`` depending on the orientation, rather than + ``colorbar.cbar_axis``. +- The default ticker is no longer ``MaxNLocator(5)``, but a + ``_ColorbarAutoLocator``. +- Overdrawing multiple colorbars on top of one another in a single Axes (e.g. + when using the ``cax`` attribute of `~.axes_grid1.axes_grid.ImageGrid` + elements) is not supported; if you previously relied on the second colorbar + being drawn over the first, you can call ``cax.cla()`` to clear the axes + before drawing the second colorbar. + +During the deprecation period, the ``mpl_toolkits.legacy_colorbar`` +rcParam can be set to True to use ``mpl_toolkits.axes_grid1.colorbar`` in +:mod:`mpl_toolkits.axes_grid1` code with a deprecation warning (the default), +or to False to use ``matplotlib.colorbar``. + +Passing a ``pad`` size of ``None`` (the default) as a synonym for zero to +the ``append_axes``, ``new_horizontal`` and ``new_vertical`` methods of +`.axes_grid1.axes_divider.AxesDivider` is deprecated. In a future release, the +default value of ``None`` will mean "use :rc:`figure.subplot.wspace` or +:rc:`figure.subplot.hspace`" (depending on the orientation). Explicitly pass +``pad=0`` to keep the old behavior. + +Axes3D +~~~~~~ +``mplot3d.axis3d.get_flip_min_max`` is deprecated. + +``axes3d.unit_bbox`` is deprecated (use ``Bbox.unit`` instead). + +``axes3d.Axes3D.w_xaxis``, ``.w_yaxis``, and ``.w_zaxis`` are deprecated (use +``.xaxis``, ``.yaxis``, and ``.zaxis`` instead). + +`matplotlib.cm` +~~~~~~~~~~~~~~~ +``cm.revcmap`` is deprecated. Use `.Colormap.reversed` to reverse a colormap. + +``cm.datad`` no longer contains entries for reversed colormaps in their +"unconverted" form. + +axisartist +~~~~~~~~~~ +``mpl_toolkits.axisartist.grid_finder.GridFinderBase`` is deprecated (its +only use is to be inherited by the `GridFinder` class which just provides +more defaults in the constructor and directly sets the transforms, so +``GridFinderBase``'s methods were just moved to `GridFinder`). + +``axisartist.axis_artist.BezierPath`` is deprecated (use `.patches.PathPatch` +to draw arbitrary Paths). + +``AxisArtist.line`` is now a `.patches.PathPatch` instance instead of a +``BezierPath`` instance. + +Returning a factor equal to None from axisartist Locators (which are **not** +the same as "standard" tick Locators), or passing a factor equal to None +to axisartist Formatters (which are **not** the same as "standard" tick +Formatters) is deprecated. Pass a factor equal to 1 instead. + +For the `mpl_toolkits.axisartist.axis_artist.AttributeCopier` class, the +constructor and the ``set_ref_artist`` method, and the *default_value* +parameter of ``get_attribute_from_ref_artist``, are deprecated. + +Deprecation of the constructor means that classes inheriting from +`.AttributeCopier` should no longer call its constructor. + +Locators +~~~~~~~~ +The unused `Locator.autoscale()` method is deprecated (pass the axis limits to +`Locator.view_limits()` instead). + +Animation +~~~~~~~~~ +The following methods and attributes of the `MovieWriterRegistry` class are +deprecated: ``set_dirty``, ``ensure_not_dirty``, ``reset_available_writers``, +``avail``. + +``smart_bounds()`` +~~~~~~~~~~~~~~~~~~ +The "smart_bounds" functionality is deprecated. This includes +``Axis.set_smart_bounds()``, ``Axis.get_smart_bounds()``, +``Spine.set_smart_bounds()``, and ``Spine.get_smart_bounds()``. + +``boxplot()`` +~~~~~~~~~~~~~ +Setting the ``whis`` parameter of `.Axes.boxplot` and `.cbook.boxplot_stats` to +"range" to mean "the whole data range" is deprecated; set it to (0, 100) (which +gets interpreted as percentiles) to achieve the same effect. + +``fill_between()`` +~~~~~~~~~~~~~~~~~~ +Passing scalars to parameter *where* in ``fill_between()`` and +``fill_betweenx()`` is deprecated. While the documentation already states that +*where* must be of the same size as *x* (or *y*), scalars were accepted and +broadcasted to the size of *x*. Non-matching sizes will raise a ``ValueError`` +in the future. + +``tight_layout()`` +~~~~~~~~~~~~~~~~~~ +The ``renderer`` parameter to `.Figure.tight_layout` is deprecated; this method +now always uses the renderer instance cached on the `.Figure`. + +rcParams +~~~~~~~~ +The ``rcsetup.validate_animation_writer_path`` function is deprecated. + +Setting :rc:`savefig.format` to "auto" is deprecated; use its synonym "png" instead. + +Setting :rc:`text.hinting` to True or False is deprecated; use their synonyms +"auto" or "none" instead. + +``rcsetup.update_savefig_format`` is deprecated. + +``rcsetup.validate_path_exists`` is deprecated (use ``os.path.exists`` to check +whether a path exists). + +``rcsetup.ValidateInterval`` is deprecated. + +Dates +~~~~~ +``dates.mx2num`` is deprecated. + +TK +~~ +``NavigationToolbar2Tk.set_active`` is deprecated, as it has no (observable) +effect. + +WX +~~ +``FigureFrameWx.statusbar`` and ``NavigationToolbar2Wx.statbar`` are deprecated. +The status bar can be retrieved by calling standard wx methods +(``frame.GetStatusBar()`` and ``toolbar.GetTopLevelParent().GetStatusBar()``). + +``backend_wx.ConfigureSubplotsWx.configure_subplots`` and +``backend_wx.ConfigureSubplotsWx.get_canvas`` are deprecated. + +PGF +~~~ +``backend_pgf.repl_escapetext`` and ``backend_pgf.repl_mathdefault`` are +deprecated. + +``RendererPgf.latexManager`` is deprecated. + +FigureCanvas +~~~~~~~~~~~~ +``FigureCanvasBase.draw_cursor`` (which has never done anything and has never +been overridden in any backend) is deprecated. + +``FigureCanvasMac.invalidate`` is deprecated in favor of its synonym, +``FigureCanvasMac.draw_idle``. + +The ``dryrun`` parameter to the various ``FigureCanvasFoo.print_foo`` methods +is deprecated. + + +QuiverKey doc +~~~~~~~~~~~~~ +``quiver.QuiverKey.quiverkey_doc`` is deprecated; use +``quiver.QuiverKey.__init__.__doc__`` instead. + +`matplotlib.mlab` +~~~~~~~~~~~~~~~~~ +``mlab.apply_window`` and ``mlab.stride_repeat`` are deprecated. + +Fonts +~~~~~ +``font_manager.JSONEncoder`` is deprecated. Use `.font_manager.json_dump` to +dump a `.FontManager` instance. + +``font_manager.createFontList`` is deprecated. `.font_manager.FontManager.addfont` +is now available to register a font at a given path. + +The ``as_str``, ``as_rgba_str``, ``as_array``, ``get_width`` and ``get_height`` +methods of ``matplotlib.ft2font.FT2Image`` are deprecated. Convert the ``FT2Image`` +to a numpy array with ``np.asarray`` before processing it. + +Colors +~~~~~~ +The function `matplotlib.colors.makeMappingArray` is not considered part of +the public API any longer. Thus, it's deprecated. + +Using a string of single-character colors as a color sequence (e.g. "rgb") is +deprecated. Use an explicit list instead. + +Scales +~~~~~~ +Passing unsupported keyword arguments to `.ScaleBase` and its subclasses +`.LinearScale`, and `.SymLogScale` is deprecated and will raise a `TypeError` in 3.3. + +If extra kwargs are passed to `.LogScale`, `TypeError` will now be +raised instead of `ValueError`. + +Testing +~~~~~~~ +The ``matplotlib.testing.disable_internet`` module is deprecated. Use (for +example) pytest-remotedata_ instead. + +.. _pytest-remotedata: https://pypi.org/project/pytest-remotedata/ + +Support in `matplotlib.testing` for nose-based tests is deprecated (a +deprecation is emitted if using e.g. the decorators from that module while +both 1) matplotlib's conftests have not been called and 2) nose is in +``sys.modules``). + +``testing.is_called_from_pytest`` is deprecated. + +During the deprecation period, to force the generation of nose base tests, +import nose first. + +The ``switch_backend_warn`` parameter to ``matplotlib.test`` has no effect and +is deprecated. + +``testing.jpl_units.UnitDbl.UnitDbl.checkUnits`` is deprecated. + +Misc +~~~~ +``matplotlib.get_home`` is deprecated (use e.g. ``os.path.expanduser("~")``) +instead. + +``matplotlib.compare_versions`` is deprecated (use comparison of +``distutils.version.LooseVersion``\s instead). + +``matplotlib.checkdep_ps_distiller`` is deprecated. + +``matplotlib.figure.AxesStack`` is considered private API and will be removed +from the public API in future versions. + +``BboxBase.is_unit`` is deprecated (check the Bbox extents if needed). + +``Affine2DBase.matrix_from_values(...)`` is deprecated. Use (for example) +``Affine2D.from_values(...).get_matrix()`` instead. + +``style.core.is_style_file`` and ``style.core.iter_style_files`` +are deprecated. diff --git a/doc/api/prev_api_changes/api_changes_3.2.0/development.rst b/doc/api/prev_api_changes/api_changes_3.2.0/development.rst new file mode 100644 index 000000000000..1322051f4618 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.2.0/development.rst @@ -0,0 +1,31 @@ +Development changes +------------------- + +Windows build +~~~~~~~~~~~~~ +Previously, when building the :mod:`matplotlib._png` extension, the build +script would add "png" and "z" to the extensions ``.libraries`` attribute (if +pkg-config information is not available, which is in particular the case on +Windows). + +In particular, this implies that the Windows build would look up files named +``png.lib`` and ``z.lib``; but neither libpng upstream nor zlib upstream +provides these files by default. (On Linux, this would look up ``libpng.so`` +and ``libz.so``, which are indeed standard names.) + +Instead, on Windows, we now look up ``libpng16.lib`` and ``zlib.lib``, which +*are* the upstream names for the shared libraries (as of libpng 1.6.x). + +For a statically-linked build, the upstream names are ``libpng16_static.lib`` +and ``zlibstatic.lib``; one still needs to manually rename them if such a build +is desired. + +Packaging DLLs +~~~~~~~~~~~~~~ +Previously, it was possible to package Windows DLLs into the Maptlotlib +wheel (or sdist) by copying them into the source tree and setting the +``package_data.dlls`` entry in ``setup.cfg``. + +DLLs copied in the source tree are now always packaged; the +``package_data.dlls`` entry has no effect anymore. If you do not want to +include the DLLs, don't copy them into the source tree. diff --git a/doc/api/prev_api_changes/api_changes_3.2.0/removals.rst b/doc/api/prev_api_changes/api_changes_3.2.0/removals.rst new file mode 100644 index 000000000000..850024c03f31 --- /dev/null +++ b/doc/api/prev_api_changes/api_changes_3.2.0/removals.rst @@ -0,0 +1,84 @@ +Removals +-------- +The ``matplotlib.testing.determinism`` module, which exposes no public API, has +been deleted. + +The following API elements have been removed: + +- ``backend_gtk3.PIXELS_PER_INCH`` +- ``backend_pgf.re_escapetext``, ``backend_pgf.re_mathdefault``. +- the ``matplotlib.backends.tkagg``, ``matplotlib.backends.windowing``, + ``matplotlib.backends.wx_compat``, and ``matplotlib.compat.subprocess`` + modules +- ``RcParams.msg_depr``, ``RcParams.msg_depr_ignore``, + ``RcParams.msg_depr_set``, ``RcParams.msg_obsolete``, + ``RcParams.msg_backend_obsolete`` +- ``afm.parse_afm`` (use ``afm.AFM instead``) +- ``axes.Axes.mouseover_set`` +- ``backend_cairo.ArrayWrapper``, ``backend_cairo.RendererCairo.convert_path`` +- ``backend_gtk3.FileChooserDialog.sorted_filetypes`` (use + ``sorted(self.filetypes.items())`` instead) +- ``backend_pgf.get_texcommand`` +- ``backend_pdf.PdfFile.texFontMap`` +- ``backend_ps.get_bbox`` +- ``backend_qt.FigureCanvasQt.keyAutoRepeat`` (use + ``event.guiEvent.isAutoRepeat`` instead), ``backend_qt.error_msg_qt``, + ``backend_qt.exception_handler`` +- ``backend_wx.FigureCanvasWx.macros`` +- ``backends.pylab_setup`` +- ``cbook.Bunch`` (use ``types.SimpleNamespace`` instead), ``cbook.Locked``, + ``cbook.unicode_safe``, ``cbook.is_numlike`` (use + ``isinstance(..., numbers.Number)`` instead), ``cbook.mkdirs`` (use + ``os.makedirs(..., exist_ok=True)`` instead), ``cbook.GetRealpathAndStat`` + (use ``cbook.get_realpath_and_stat`` instead), + ``cbook.listFiles`` +- ``container.Container.set_remove_method`` +- ``contour.ContourLabeler.cl``, ``contour.ContourLabeler.cl_xy``, + ``contour.ContourLabeler.cl_cvalues`` (use ``labelTexts``, ``labelXYs``, + ``labelCValues`` instead) +- ``dates.DateFormatter.strftime``, ``dates.DateFormatter.strftime_pre_1900`` +- ``font_manager.TempCache``, ``font_manager.FontManager.ttffiles``, + ``font_manager.FontManager.afmfiles`` +- ``mathtext.unichr_safe`` (use ``chr`` instead) +- ``patches.YAArrow`` (use ``patches.FancyArrowPatch`` instead) +- ``sphinxext.plot_directive.remove_coding`` +- ``table.Table.get_child_artists`` +- ``testing.compare.compare_float``, ``testing.decorators.CleanupTest``, + ``testing.decorators.ImageComparisonTest``, + ``testing.decorators.skip_if_command_unavailable``, + support for nose-based tests +- ``text.Annotation.arrow`` (use ``text.Annotation.arrow_patch`` instead) +- ``textpath.TextToPath.tex_font_map`` +- ``ticker.Base``, ``ticker.closeto``, ``ticker.nearest_long`` +- ``axes_grid1.axes_divider.LocatableAxesBase``, + ``axes_grid1.axes_divider.locatable_axes_factory``, + ``axes_grid1.axes_divider.Axes`` (use ``axes_grid1.mpl_axes.Axes`` instead), + ``axes_grid1.axes_divider.LocatableAxes`` (use ``axes_grid1.mpl_axes.Axes`` + instead) +- ``axisartist.axes_divider.Axes``, ``axisartist.axes_divider.LocatableAxes`` + (use ``axisartist.axislines.Axes`` instead) +- the ``normed`` kwarg to ``hist`` (use ``density`` instead) +- the ``verts`` parameter to ``scatter`` (use ``marker`` instead) +- passing ``(verts, 0)`` or ``(..., 3)`` when specifying a marker to specify a + path or a circle, respectively (instead, use ``verts`` or ``"o"``, + respectively) +- :rc:`examples.directory` + +The following members of ``matplotlib.backends.backend_pdf.PdfFile`` were removed: + +- ``nextObject`` +- ``nextFont`` +- ``nextAlphaState`` +- ``nextHatch`` +- ``nextImage`` +- ``alphaStateObject`` + +The ``required_interactive_framework`` attribute of backend modules introduced +in Matplotlib 3.0 has been moved to the ``FigureCanvas`` class, in order to +let it be inherited by third-party canvas subclasses and to make it easier to +know what interactive framework is required by a canvas class. + +``backend_qt4.FigureCanvasQT5``, which is an alias for +``backend_qt5.FigureCanvasQT`` (but only exists under that name in +``backend_qt4``), has been removed. + diff --git a/doc/api/quiver_api.rst b/doc/api/quiver_api.rst new file mode 100644 index 000000000000..8dbcce61beb5 --- /dev/null +++ b/doc/api/quiver_api.rst @@ -0,0 +1,20 @@ +********************* +``matplotlib.quiver`` +********************* + +.. currentmodule:: matplotlib.quiver + +.. automodule:: matplotlib.quiver + :no-members: + :no-inherited-members: + +Classes +------- + +.. autosummary:: + :toctree: _as_gen/ + :template: autosummary.rst + + Quiver + QuiverKey + Barbs diff --git a/doc/api/sphinxext_plot_directive_api.rst b/doc/api/sphinxext_plot_directive_api.rst new file mode 100644 index 000000000000..a3b75c09bdd8 --- /dev/null +++ b/doc/api/sphinxext_plot_directive_api.rst @@ -0,0 +1,6 @@ +======================================= +``matplotlib.sphinxext.plot_directive`` +======================================= + +.. automodule:: matplotlib.sphinxext.plot_directive + :no-undoc-members: diff --git a/doc/missing-references.json b/doc/missing-references.json new file mode 100644 index 000000000000..61edfeb19f7b --- /dev/null +++ b/doc/missing-references.json @@ -0,0 +1,3833 @@ +{ + "py:attr": { + "ax": [ + "lib/mpl_toolkits/axes_grid1/colorbar.py:docstring of mpl_toolkits.axes_grid1.colorbar.ColorbarBase:23" + ], + "axis": [ + "lib/matplotlib/category.py:docstring of matplotlib.category.StrCategoryLocator.tick_values:5", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.AutoDateLocator.tick_values:5", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.MicrosecondLocator.tick_values:5", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.RRuleLocator.tick_values:5", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.YearLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.AutoMinorLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.IndexLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.LinearLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.Locator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.LogLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.LogitLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.MaxNLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.MultipleLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.OldAutoLocator.tick_values:5", + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.SymmetricalLogLocator.tick_values:5" + ], + "button": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:338" + ], + "dividers": [ + "lib/mpl_toolkits/axes_grid1/colorbar.py:docstring of mpl_toolkits.axes_grid1.colorbar.ColorbarBase:29" + ], + "eventson": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.CheckButtons.set_active:8", + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.RadioButtons.set_active:4" + ], + "fmt_zdata": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.format_zdata:2" + ], + "height": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.bounds:2" + ], + "input_dims": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform:4", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform:7", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform_affine:15", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform_affine:21", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform_non_affine:14", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform_non_affine:20", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.CompositeGenericTransform.transform_affine:15", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.CompositeGenericTransform.transform_affine:21", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.CompositeGenericTransform.transform_non_affine:14", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.CompositeGenericTransform.transform_non_affine:20", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform:4", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform:7", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform_affine:15", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform_affine:21", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform_non_affine:14", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform_non_affine:20" + ], + "lines": [ + "lib/mpl_toolkits/axes_grid1/colorbar.py:docstring of mpl_toolkits.axes_grid1.colorbar.ColorbarBase:26" + ], + "matplotlib.axes.Axes.dataLim": [ + "doc/api/prev_api_changes/api_changes_0.99.x.rst:23" + ], + "matplotlib.axes.Axes.frame": [ + "doc/api/prev_api_changes/api_changes_0.98.x.rst:89" + ], + "matplotlib.axes.Axes.lines": [ + "doc/tutorials/intermediate/artists.rst:398", + "doc/tutorials/intermediate/artists.rst:90" + ], + "matplotlib.axes.Axes.patch": [ + "doc/api/prev_api_changes/api_changes_0.98.x.rst:89", + "doc/tutorials/intermediate/artists.rst:171", + "doc/tutorials/intermediate/artists.rst:382" + ], + "matplotlib.axes.Axes.patches": [ + "doc/tutorials/intermediate/artists.rst:421" + ], + "matplotlib.axes.Axes.transAxes": [ + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredDirectionArrows:8" + ], + "matplotlib.axes.Axes.transData": [ + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredAuxTransformBox:11", + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredEllipse:8", + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredSizeBar:8" + ], + "matplotlib.axes.Axes.viewLim": [ + "doc/api/prev_api_changes/api_changes_0.99.x.rst:23" + ], + "matplotlib.axes.Axes.xaxis": [ + "doc/tutorials/intermediate/artists.rst:520" + ], + "matplotlib.axes.Axes.yaxis": [ + "doc/tutorials/intermediate/artists.rst:520" + ], + "matplotlib.axis.Axis.label": [ + "doc/tutorials/intermediate/artists.rst:567" + ], + "matplotlib.cm.ScalarMappable._A": [ + "lib/matplotlib/collections.py:docstring of matplotlib.collections.LineCollection:101", + "lib/mpl_toolkits/mplot3d/art3d.py:docstring of mpl_toolkits.mplot3d.art3d.Line3DCollection:95" + ], + "matplotlib.cm.ScalarMappable.callbacksSM": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:10" + ], + "matplotlib.colorbar.ColorbarBase.ax": [ + "doc/api/prev_api_changes/api_changes_1.3.x.rst:100" + ], + "matplotlib.colors.Colormap.name": [ + "lib/matplotlib/cm.py:docstring of matplotlib.cm.register_cmap:10" + ], + "matplotlib.figure.Figure.patch": [ + "doc/api/prev_api_changes/api_changes_0.98.x.rst:89", + "doc/tutorials/intermediate/artists.rst:171", + "doc/tutorials/intermediate/artists.rst:284" + ], + "matplotlib.figure.Figure.transFigure": [ + "doc/tutorials/intermediate/artists.rst:333" + ], + "max": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.p1:4" + ], + "min": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.p0:4" + ], + "mpl_toolkits.mplot3d.axis3d._axinfo": [ + "doc/api/toolkits/mplot3d.rst:41" + ], + "name": [ + "lib/matplotlib/scale.py:docstring of matplotlib.scale.ScaleBase:8" + ], + "output_dims": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform:4", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform:7", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform_affine:21", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.AffineBase.transform_non_affine:20", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.CompositeGenericTransform.transform_affine:21", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.CompositeGenericTransform.transform_non_affine:20", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform:4", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform:7", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform_affine:21", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.IdentityTransform.transform_non_affine:20" + ], + "transforms.Bbox.bounds": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:91" + ], + "transforms.Bbox.intervalx": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:99" + ], + "transforms.Bbox.intervaly": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:102" + ], + "transforms.Bbox.x0": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:105" + ], + "transforms.Bbox.x1": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:113" + ], + "transforms.Bbox.y0": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:109" + ], + "transforms.Bbox.y1": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:117" + ], + "transforms.BboxBase.height": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:96" + ], + "transforms.BboxBase.width": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:93" + ], + "transforms.BboxBase.xmax": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:113" + ], + "transforms.BboxBase.xmin": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:105" + ], + "transforms.BboxBase.ymax": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:117" + ], + "transforms.BboxBase.ymin": [ + "doc/api/prev_api_changes/api_changes_0.98.0.rst:109" + ], + "triangulation": [ + "lib/matplotlib/tri/trirefine.py:docstring of matplotlib.tri.UniformTriRefiner.refine_triangulation:2" + ], + "use_sticky_edges": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.margins:53" + ], + "width": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.bounds:2" + ], + "xmax": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.x1:4" + ], + "xmin": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.x0:4" + ], + "ymax": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.y1:4" + ], + "ymin": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Bbox.y0:4" + ] + }, + "py:class": { + "Annotation": [ + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.AnnotationBbox.draw:2" + ], + "AxesImage": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:383", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:396" + ], + "BboxImage": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:383", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:396" + ], + "BboxTransmuter": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Circle.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.DArrow.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.LArrow.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.RArrow.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Round.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Round4.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Roundtooth.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Sawtooth.transmute:2", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Square.transmute:2" + ], + "Cursors": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.NavigationToolbar2.set_cursor:2" + ], + "FigureCanvasQTAgg": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:215" + ], + "FigureImage": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:383", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:396" + ], + "LinearSegmentedColormap": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.colormaps:98" + ], + "ListedColormap": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.colormaps:98" + ], + "MathTextBackend": [ + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.BakomaFonts:29", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.DejaVuFonts:7", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.DejaVuSansFonts:28", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.DejaVuSerifFonts:28", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.Fonts:30", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.StandardPsFonts:29", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.StixFonts:34", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.StixSansFonts:28", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.TruetypeFonts:28", + "lib/matplotlib/mathtext.py:docstring of matplotlib.mathtext.UnicodeFonts:33" + ], + "OffsetBox": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:558" + ], + "OffsetBox.DrawingArea": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:558" + ], + "OffsetBox.TextArea": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:558" + ], + "Patch3DCollection": [ + "doc/api/toolkits/mplot3d.rst:101::1" + ], + "Path": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle:44", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle:38", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle:38" + ], + "Path3DCollection": [ + "doc/api/toolkits/mplot3d.rst:101::1" + ], + "TransformNode": [ + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.InvertedPolarTransform:23", + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.PolarAxes.InvertedPolarTransform:23", + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.PolarAxes.PolarTransform:25", + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.PolarTransform:25", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.InvertedLogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.InvertedSymmetricalLogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.LogScale.InvertedLogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.LogScale.LogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.LogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.LogisticTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.LogitTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.SymmetricalLogScale.InvertedSymmetricalLogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.SymmetricalLogScale.SymmetricalLogTransform:2", + "lib/matplotlib/scale.py:docstring of matplotlib.scale.SymmetricalLogTransform:2" + ], + "_FancyAxislineStyle.FilledArrow": [ + ":1" + ], + "_FancyAxislineStyle.SimpleArrow": [ + ":1" + ], + "backend_bases.Timer": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.FigureCanvasBase.new_timer:2", + "lib/matplotlib/backends/backend_nbagg.py:docstring of matplotlib.backends.backend_nbagg.FigureCanvasNbAgg.new_timer:2" + ], + "backend_qt5.FigureCanvasQT": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:199" + ], + "backend_qt5.FigureCanvasQTAgg": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:210" + ], + "datetime": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates.mx2num:2", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.num2date:19" + ], + "dateutil.rrule.rrulebase": [ + "/rrule.py:docstring of matplotlib.dates.rrule:1" + ], + "dviread.PsfontsMap": [ + "lib/matplotlib/dviread.py:docstring of matplotlib.dviread.DviFont:20" + ], + "font_manager.FontProperties": [ + "lib/matplotlib/fontconfig_pattern.py:docstring of matplotlib.fontconfig_pattern.FontconfigPatternParser.parse:2", + "lib/matplotlib/fontconfig_pattern.py:docstring of matplotlib.fontconfig_pattern.parse_fontconfig_pattern:2" + ], + "matplotilb.mpl_toolkits.axes_grid.anchored_artists.AnchoredSizeBar": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:398" + ], + "matplotlib.Axes": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:157" + ], + "matplotlib.axes.Subplot": [ + "doc/tutorials/intermediate/artists.rst:34", + "doc/tutorials/intermediate/artists.rst:57" + ], + "matplotlib.axes._axes.Axes": [ + "doc/api/artist_api.rst:189", + "doc/api/axes_api.rst:682", + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.PolarAxes:1", + "lib/mpl_toolkits/axes_grid1/mpl_axes.py:docstring of mpl_toolkits.axes_grid1.mpl_axes.Axes:1", + "lib/mpl_toolkits/axisartist/axislines.py:docstring of mpl_toolkits.axisartist.axislines.Axes:1", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D:1" + ], + "matplotlib.axes._base._AxesBase": [ + "doc/api/artist_api.rst:189", + "doc/api/axes_api.rst:682", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes:1" + ], + "matplotlib.backend_bases.FigureCanvas": [ + "doc/tutorials/intermediate/artists.rst:18", + "doc/tutorials/intermediate/artists.rst:20", + "doc/tutorials/intermediate/artists.rst:26" + ], + "matplotlib.backend_bases.Renderer": [ + "doc/tutorials/intermediate/artists.rst:20", + "doc/tutorials/intermediate/artists.rst:26" + ], + "matplotlib.backend_bases._Backend": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ShowBase:1" + ], + "matplotlib.backend_tools._ToolGridBase": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolGrid:1", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolMinorGrid:1" + ], + "matplotlib.backends._backend_pdf_ps.RendererPDFPSBase": [ + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf:1", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS:1" + ], + "matplotlib.backends._backend_tk.FigureCanvasTk": [ + "lib/matplotlib/backends/backend_tkagg.py:docstring of matplotlib.backends.backend_tkagg.FigureCanvasTkAgg:1" + ], + "matplotlib.backends.backend_webagg_core.FigureCanvasWebAggCore": [ + "lib/matplotlib/backends/backend_nbagg.py:docstring of matplotlib.backends.backend_nbagg.FigureCanvasNbAgg:1" + ], + "matplotlib.backends.backend_webagg_core.FigureManagerWebAgg": [ + "lib/matplotlib/backends/backend_nbagg.py:docstring of matplotlib.backends.backend_nbagg.FigureManagerNbAgg:1" + ], + "matplotlib.backends.backend_webagg_core.NavigationToolbar2WebAgg": [ + "lib/matplotlib/backends/backend_nbagg.py:docstring of matplotlib.backends.backend_nbagg.NavigationIPy:1" + ], + "matplotlib.cbook.MatplotlibDeprecationWarning": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:405" + ], + "matplotlib.cbook.deprecation.MatplotlibDeprecationWarning": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:405" + ], + "matplotlib.cbook.deprecation.mplDeprecation": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:405" + ], + "matplotlib.cm.Wistia": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:21" + ], + "matplotlib.collections._CollectionWithSizes": [ + "doc/api/artist_api.rst:189", + "doc/api/collections_api.rst:13", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.CircleCollection:1", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.PathCollection:1", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.PolyCollection:1", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.RegularPolyCollection:1" + ], + "matplotlib.colorbar._ColorbarMappableDummy": [ + "lib/matplotlib/colorbar.py:docstring of matplotlib.colorbar.ColorbarBase:1" + ], + "matplotlib.contours.ContourSet": [ + "lib/mpl_toolkits/axes_grid1/colorbar.py:docstring of mpl_toolkits.axes_grid1.colorbar.colorbar:92" + ], + "matplotlib.dates.ConciseDateConverter": [ + "doc/api/dates_api.rst:11" + ], + "matplotlib.dates.DateConverter": [ + "doc/api/dates_api.rst:11", + "doc/users/prev_whats_new/whats_new_1.4.rst:269" + ], + "matplotlib.dates.bytespdate2num": [ + "doc/api/dates_api.rst:11" + ], + "matplotlib.dates.rrulewrapper": [ + "doc/api/dates_api.rst:11" + ], + "matplotlib.dates.strpdate2num": [ + "doc/api/dates_api.rst:11" + ], + "matplotlib.dviread.Font": [ + ":1" + ], + "matplotlib.figure._AxesStack": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.AxesStack:1" + ], + "matplotlib.font_manager._JSONEncoder": [ + "lib/matplotlib/font_manager.py:docstring of matplotlib.font_manager.JSONEncoder:1" + ], + "matplotlib.image.Image": [ + "lib/mpl_toolkits/axes_grid1/colorbar.py:docstring of mpl_toolkits.axes_grid1.colorbar.colorbar:20" + ], + "matplotlib.image._ImageBase": [ + "doc/api/artist_api.rst:189", + "lib/matplotlib/image.py:docstring of matplotlib.image.AxesImage:1", + "lib/matplotlib/image.py:docstring of matplotlib.image.BboxImage:1", + "lib/matplotlib/image.py:docstring of matplotlib.image.FigureImage:1" + ], + "matplotlib.patch.Patch": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.FancyArrowPatch.set_patchA:8", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.FancyArrowPatch.set_patchB:8", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.FancyArrowPatch:95" + ], + "matplotlib.patches.AxesImage": [ + "doc/users/event_handling.rst:415" + ], + "matplotlib.patches.LArrow": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.RArrow:1" + ], + "matplotlib.patches.Sawtooth": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Roundtooth:1" + ], + "matplotlib.patches.Wedge": [ + "doc/api/artist_api.rst:189", + "doc/devel/documenting_mpl.rst:905", + "doc/gallery/pie_and_polar_charts/pie_and_donut_labels.rst:28", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.pie:80", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.pie:80" + ], + "matplotlib.patches._Base": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.Fancy:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.Simple:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.Wedge:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Circle:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.DArrow:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.LArrow:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Round4:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Round:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Sawtooth:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle.Square:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle.Angle3:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle.Angle:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle.Arc3:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle.Arc:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle.Bar:1" + ], + "matplotlib.patches._Bracket": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.BarAB:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.BracketA:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.BracketAB:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.BracketB:1" + ], + "matplotlib.patches._Curve": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.Curve:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.CurveA:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.CurveAB:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.CurveB:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.CurveFilledA:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.CurveFilledAB:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle.CurveFilledB:1" + ], + "matplotlib.patches._Style": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ArrowStyle:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.BoxStyle:1", + "lib/matplotlib/patches.py:docstring of matplotlib.patches.ConnectionStyle:1", + "lib/mpl_toolkits/axisartist/axisline_style.py:docstring of mpl_toolkits.axisartist.axisline_style.AxislineStyle:1" + ], + "matplotlib.projections.geo.AitoffAxes": [ + "doc/api/artist_api.rst:189" + ], + "matplotlib.projections.geo.GeoAxes": [ + "doc/api/artist_api.rst:189" + ], + "matplotlib.projections.geo.HammerAxes": [ + "doc/api/artist_api.rst:189" + ], + "matplotlib.projections.geo.LambertAxes": [ + "doc/api/artist_api.rst:189" + ], + "matplotlib.projections.geo.MollweideAxes": [ + "doc/api/artist_api.rst:189" + ], + "matplotlib.text.TextPath": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:46", + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredDirectionArrows:92" + ], + "matplotlib.text._AnnotationBase": [ + "doc/api/artist_api.rst:189", + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.AnnotationBbox:1", + "lib/matplotlib/text.py:docstring of matplotlib.text.Annotation:1" + ], + "matplotlib.tickers.Locator": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:542" + ], + "matplotlib.transforms._BlendedMixin": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.BlendedAffine2D:1", + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.BlendedGenericTransform:1" + ], + "matplotlib.tri.trifinder.TriFinder": [ + "lib/matplotlib/tri/trifinder.py:docstring of matplotlib.tri.TrapezoidMapTriFinder:1" + ], + "matplotlib.tri.triinterpolate.TriInterpolator": [ + "lib/matplotlib/tri/triinterpolate.py:docstring of matplotlib.tri.CubicTriInterpolator:1", + "lib/matplotlib/tri/triinterpolate.py:docstring of matplotlib.tri.LinearTriInterpolator:1" + ], + "matplotlib.tri.trirefine.TriRefiner": [ + "lib/matplotlib/tri/trirefine.py:docstring of matplotlib.tri.UniformTriRefiner:1" + ], + "matplotlib.widgets._SelectorWidget": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.LassoSelector:1", + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.PolygonSelector:1", + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.RectangleSelector:1", + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.SpanSelector:1" + ], + "mpl_toolkits.axes_grid.axes_divider.AxesLocator": [ + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.Divider.new_locator:2" + ], + "mpl_toolkits.axes_grid1.ImageGrid": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:150" + ], + "mpl_toolkits.axes_grid1.axes_divider.HBox": [ + "doc/users/prev_whats_new/whats_new_1.1.rst:210" + ], + "mpl_toolkits.axes_grid1.axes_divider.VBox": [ + "doc/users/prev_whats_new/whats_new_1.1.rst:210" + ], + "mpl_toolkits.axes_grid1.axes_size._Base": [ + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.Add:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.AddList:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.AxesX:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.AxesY:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.Fixed:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.Fraction:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.MaxExtent:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.MaxHeight:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.MaxWidth:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.Padded:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.Scaled:1", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size.SizeFromFunc:1" + ], + "mpl_toolkits.axes_grid1.parasite_axes.AxesHostAxes": [ + ":1", + "doc/api/_as_gen/mpl_toolkits.axes_grid1.parasite_axes.rst:31::1" + ], + "mpl_toolkits.axes_grid1.parasite_axes.AxesParasite": [ + ":1", + "doc/api/_as_gen/mpl_toolkits.axes_grid1.parasite_axes.rst:31::1" + ], + "mpl_toolkits.axes_grid1.parasite_axes.AxesParasiteParasiteAuxTrans": [ + ":1", + "doc/api/_as_gen/mpl_toolkits.axes_grid1.parasite_axes.rst:31::1" + ], + "mpl_toolkits.axisartist.Axes": [ + "doc/api/toolkits/axisartist.rst:5", + "doc/api/toolkits/axisartist.rst:6" + ], + "mpl_toolkits.axisartist.axisline_style.SimpleArrow": [ + "lib/mpl_toolkits/axisartist/axisline_style.py:docstring of mpl_toolkits.axisartist.axisline_style.AxislineStyle.FilledArrow:1" + ], + "mpl_toolkits.axisartist.axisline_style._Base": [ + "lib/mpl_toolkits/axisartist/axisline_style.py:docstring of mpl_toolkits.axisartist.axisline_style.AxislineStyle.SimpleArrow:1" + ], + "mpl_toolkits.axisartist.axislines.Fixed": [ + "lib/mpl_toolkits/axisartist/axislines.py:docstring of mpl_toolkits.axisartist.axislines.AxisArtistHelperRectlinear.Fixed:1", + "lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py:docstring of mpl_toolkits.axisartist.grid_helper_curvelinear.FixedAxisArtistHelper:1" + ], + "mpl_toolkits.axisartist.axislines.Floating": [ + "lib/mpl_toolkits/axisartist/axislines.py:docstring of mpl_toolkits.axisartist.axislines.AxisArtistHelperRectlinear.Floating:1", + "lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py:docstring of mpl_toolkits.axisartist.grid_helper_curvelinear.FloatingAxisArtistHelper:1" + ], + "mpl_toolkits.axisartist.axislines._Base": [ + "lib/mpl_toolkits/axisartist/axislines.py:docstring of mpl_toolkits.axisartist.axislines.AxisArtistHelper.Fixed:1", + "lib/mpl_toolkits/axisartist/axislines.py:docstring of mpl_toolkits.axisartist.axislines.AxisArtistHelper.Floating:1" + ], + "mpl_toolkits.axisartist.floating_axes.Floating AxesHostAxes": [ + ":1", + "doc/api/_as_gen/mpl_toolkits.axisartist.floating_axes.rst:31::1" + ], + "numpy.array": [ + "lib/matplotlib/image.py:docstring of matplotlib.image.imread:30", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.imread:30" + ], + "numpy.datetime64": [ + "doc/gallery/text_labels_and_annotations/date.rst:18" + ], + "numpy.uint8": [ + ":1" + ], + "tzinfo": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates.AutoDateLocator:36", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.DateLocator:24", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.RRuleLocator:2", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.zaxis_date:4" + ], + "unittest.case.TestCase": [ + "lib/matplotlib/testing/decorators.py:docstring of matplotlib.testing.decorators.CleanupTestCase:1" + ] + }, + "py:data": { + "matplotlib.axes.Axes.transAxes": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:224", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:188", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:183", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:188", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:224" + ] + }, + "py:func": { + "boxplot": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:266" + ], + "contourf": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:211" + ], + "dateutil.parser.parse": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates.datestr2num:2", + "lib/matplotlib/dates.py:docstring of matplotlib.dates:28::1" + ], + "getp": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.setp:4" + ], + "imshow": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:206" + ], + "log.debug": [ + "doc/devel/contributing.rst:475" + ], + "matplotlib.Axes.axes.set_rlabel_position": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:260" + ], + "matplotlib.Axes.bxp": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:66", + "doc/users/prev_whats_new/whats_new_1.4.rst:76" + ], + "matplotlib.Axes.get_xticklabels": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:141" + ], + "matplotlib.Axes.get_yticklabels": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:141" + ], + "matplotlib.Axes.pie": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:172" + ], + "matplotlib.Axes.violin": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:198" + ], + "matplotlib.Axis.get_ticklabels": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:141" + ], + "matplotlib.Axis.set_ticks_position": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:141" + ], + "matplotlib.InvertedPolarTransform.transform_non_affine": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:236" + ], + "matplotlib.axis.Tick.label1On": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:409" + ], + "matplotlib.get_cachedir": [ + "doc/faq/troubleshooting_faq.rst:52" + ], + "matplotlib.get_configdir": [ + "doc/faq/troubleshooting_faq.rst:40" + ], + "matplotlib.pylab.plot": [ + "doc/devel/add_new_projection.rst:18" + ], + "matplotlib.pylab.subplot": [ + "doc/devel/add_new_projection.rst:18" + ], + "matplotlib.pyplot.getp": [ + "doc/tutorials/intermediate/artists.rst:219" + ], + "matplotlib.test": [ + "doc/devel/testing.rst:85" + ], + "matplotlib.testing.conftest.mpl_test_settings": [ + "doc/devel/testing.rst:112" + ], + "mpl_toolkits.mplot3d.axes3d.plot_surface": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:284" + ], + "pcolormesh": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:209" + ], + "plt.legend": [ + "lib/matplotlib/contour.py:docstring of matplotlib.contour.ContourSet.legend_elements:2" + ], + "plt.save": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:225" + ], + "pyplot.table": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:425" + ], + "pytest.mark.xfail": [ + "doc/devel/testing.rst:176", + "doc/devel/testing.rst:188" + ], + "streamplot": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:299" + ], + "strftime": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates.IndexDateFormatter:23" + ] + }, + "py:meth": { + "AbstractPathEffect._update_gc": [ + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.SimpleLineShadow:44", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.SimplePatchShadow:43", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.withSimplePatchShadow:44" + ], + "Colormap.__call__": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.BoundaryNorm:44" + ], + "FigureCanvasQTAgg.blit": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:199" + ], + "FigureCanvasQTAgg.paintEvent": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:199" + ], + "FigureCanvasQTAgg.print_figure": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:199" + ], + "_find_tails": [ + "lib/matplotlib/quiver.py:docstring of matplotlib.quiver.Barbs:9" + ], + "_init_toolbar": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.NavigationToolbar2:17" + ], + "_iter_collection": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.RendererBase.draw_path_collection:10", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.draw_path_collection:10", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.draw_path_collection:10", + "lib/matplotlib/backends/backend_svg.py:docstring of matplotlib.backends.backend_svg.RendererSVG.draw_path_collection:10", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.PathEffectRenderer.draw_path_collection:10" + ], + "_iter_collection_raw_paths": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.RendererBase.draw_path_collection:10", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.draw_path_collection:10", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.draw_path_collection:10", + "lib/matplotlib/backends/backend_svg.py:docstring of matplotlib.backends.backend_svg.RendererSVG.draw_path_collection:10", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.PathEffectRenderer.draw_path_collection:10" + ], + "_make_barbs": [ + "lib/matplotlib/quiver.py:docstring of matplotlib.quiver.Barbs:9" + ], + "_process_colors": [ + "lib/matplotlib/contour.py:docstring of matplotlib.contour.ContourSet:65", + "lib/matplotlib/contour.py:docstring of matplotlib.contour.QuadContourSet:30" + ], + "autoscale_view": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.margins:32" + ], + "colorbar.Colobar.minorticks_off": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:63" + ], + "colorbar.Colobar.minorticks_on": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:63" + ], + "draw_image": [ + "lib/matplotlib/backends/backend_agg.py:docstring of matplotlib.backends.backend_agg.RendererAgg.option_scale_image:2" + ], + "fig.patch.get_alpha": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:219" + ], + "get_matrix": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.Affine2DBase:13" + ], + "matplotlib.axes.boxplot": [ + "doc/users/prev_whats_new/whats_new_1.2.rst:126" + ], + "matplotlib.axes.set_position": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:49" + ], + "matplotlib.axex.Axes.stem": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:143" + ], + "matplotlib.backend_bases.Event.mpl_disconnect": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.FigureCanvasBase.mpl_connect:33", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.connect:33" + ], + "matplotlib.dates.DateFormatter.__call__": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:496" + ], + "matplotlib.dates.MicrosecondLocator.__call__": [ + "doc/api/prev_api_changes/api_changes_1.5.0.rst:122" + ], + "matplotlib.figure.savefig": [ + "lib/matplotlib/testing/decorators.py:docstring of matplotlib.testing.decorators.image_comparison:10" + ], + "matplotlib.lines.Line2D.pick": [ + "doc/users/event_handling.rst:483" + ], + "matplotlib.patches.Rectangle.contains": [ + "doc/users/event_handling.rst:164" + ], + "matplotlib.text.Text.__init__": [ + "doc/devel/contributing.rst:425", + "doc/devel/contributing.rst:433" + ], + "matplotlib.tickers.Locator.tick_values": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:542" + ], + "mpl_toolkits.axes.Axes3D.set_zlim3d": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:106" + ], + "mpl_toolkits.axes_grid1.axes_divider.SubPlotDivider": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:147" + ], + "mpl_toolkits.mplot3d.Axes3D.bar3d": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:199" + ], + "mpl_toolkits.mplot3d.Axes3D.margins": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:119" + ], + "mpl_toolkits.mplot3d.Axes3D.trisurf": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:199" + ], + "mpl_toolkits.mplot3d.Axes3D.voxels": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:199" + ], + "np.isfinite": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.delete_masked_points:18" + ], + "option_scale_image": [ + "lib/matplotlib/backends/backend_cairo.py:docstring of matplotlib.backends.backend_cairo.RendererCairo.draw_image:22", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.draw_image:22", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.draw_image:22", + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template.RendererTemplate.draw_image:22" + ], + "set_label": [ + "lib/mpl_toolkits/axes_grid1/colorbar.py:docstring of mpl_toolkits.axes_grid1.colorbar.ColorbarBase:31" + ], + "set_xlim": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.axhspan:4", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.errorbar:60" + ], + "set_ylabel": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.set_zlabel:2" + ], + "set_ylim": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.axvspan:4", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.errorbar:60" + ], + "subplot": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure:71" + ], + "subplot2grid": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure:71" + ] + }, + "py:mod": { + "dateutil": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates:1" + ], + "matplotlib": [ + "doc/api/prev_api_changes/api_changes_0.91.2.rst:15" + ], + "matplotlib._png": [ + "doc/api/prev_api_changes/api_changes_3.2.0/development.rst:6" + ], + "matplotlib.backends.backend_gtk3agg": [ + "doc/api/backend_gtk3agg_api.rst:2" + ], + "matplotlib.backends.backend_gtk3cairo": [ + "doc/api/backend_gtk3cairo_api.rst:2" + ], + "matplotlib.backends.backend_qt4agg": [ + "doc/api/backend_qt4agg_api.rst:2" + ], + "matplotlib.backends.backend_qt4cairo": [ + "doc/api/backend_qt4cairo_api.rst:2" + ], + "matplotlib.backends.backend_qt5agg": [ + "doc/api/backend_qt5agg_api.rst:2" + ], + "matplotlib.backends.backend_qt5cairo": [ + "doc/api/backend_qt5cairo_api.rst:2" + ], + "matplotlib.backends.backend_webagg": [ + "doc/api/backend_webagg_api.rst:2" + ], + "matplotlib.backends.backend_wxagg": [ + "doc/api/backend_wxagg_api.rst:2" + ], + "matplotlib.backends.wx_compat": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:355" + ], + "matplotlib.compat.subprocess": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:352" + ], + "matplotlib.ft2font": [ + "doc/api/prev_api_changes/api_changes_0.91.0.rst:34" + ], + "matplotlib.pylab": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:624", + "doc/users/history.rst:63" + ], + "matplotlib.scales": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1001" + ], + "matplotlib.tests.test_basic": [ + "doc/devel/testing.rst:99" + ], + "mpl_toolkits.axes_grid.axes_size": [ + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.AxesDivider.new_horizontal:10", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.AxesDivider.new_horizontal:13", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.AxesDivider.new_vertical:10", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.AxesDivider.new_vertical:13", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.Divider.set_horizontal:21", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.Divider.set_vertical:21", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.Divider:2", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.Divider:41", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.Divider:44" + ], + "mpl_toolkits.mplot3d.art3d": [ + "doc/api/toolkits/mplot3d.rst:58" + ], + "mpl_toolkits.mplot3d.axes3d": [ + "doc/api/toolkits/mplot3d.rst:19" + ], + "mpl_toolkits.mplot3d.axis3d": [ + "doc/api/toolkits/mplot3d.rst:37" + ], + "mpl_toolkits.mplot3d.proj3d": [ + "doc/api/toolkits/mplot3d.rst:104" + ] + }, + "py:obj": { + "\"--\"": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:324" + ], + "# docstring inherited": [ + "doc/devel/documenting_mpl.rst:637" + ], + "###": [ + "doc/devel/documenting_mpl.rst:744" + ], + "#2474 :1", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ArtistAnimation:2", + "lib/mpl_toolkits/axisartist/axisline_style.py:docstring of mpl_toolkits.axisartist.axisline_style.AxislineStyle:9" + ], + "Artist.get_window_extent": [ + "lib/matplotlib/collections.py:docstring of matplotlib.collections.AsteriskPolygonCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.BrokenBarHCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.CircleCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.Collection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.EllipseCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.EventCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.LineCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.PatchCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.PathCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.PolyCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.QuadMesh.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.RegularPolyCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.StarPolygonCollection.get_tightbbox:2", + "lib/matplotlib/collections.py:docstring of matplotlib.collections.TriMesh.get_tightbbox:2", + "lib/mpl_toolkits/axisartist/axis_artist.py:docstring of mpl_toolkits.axisartist.axis_artist.AxisArtist.get_tightbbox:2", + "lib/mpl_toolkits/mplot3d/art3d.py:docstring of mpl_toolkits.mplot3d.art3d.Text3D.get_tightbbox:2" + ], + "Artist.setp": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:377" + ], + "Artist.sticky_edges": [ + "doc/api/axes_api.rst:356::1", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.use_sticky_edges:2" + ], + "ArtistIdent": [ + "doc/devel/MEP/MEP26.rst:106", + "doc/devel/MEP/MEP26.rst:145" + ], + "ArtistInspector.aliasd": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:331", + "doc/users/prev_whats_new/whats_new_3.1.0.rst:171" + ], + "ArtistInspector.get_aliases": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:326" + ], + "Artists": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:22", + "doc/users/prev_whats_new/whats_new_1.5.rst:558", + "doc/users/prev_whats_new/whats_new_1.5.rst:563", + "lib/matplotlib/artist.py:docstring of matplotlib.artist.ArtistInspector.__init__:2", + "lib/matplotlib/artist.py:docstring of matplotlib.artist.ArtistInspector:23", + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.HPacker:44", + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.PackerBase:23", + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.VPacker:44" + ], + "Attributes": [ + "doc/devel/MEP/MEP26.rst:167" + ], + "AutoDateLocator": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:219" + ], + "AutoLocator": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:59" + ], + "Axes": [ + "doc/api/_as_gen/matplotlib.pyplot.rst:173::1", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:449", + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:135", + "doc/users/prev_whats_new/whats_new_1.5.rst:514", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.delaxes:2", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plotting:33" + ], + "Axes..set_inverted": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:247" + ], + "Axes.add_line": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:65" + ], + "Axes.add_patch": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:65" + ], + "Axes.annotation": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:799" + ], + "Axes.autoscale_view": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:65" + ], + "Axes.axes": [ + "doc/devel/MEP/MEP10.rst:120" + ], + "Axes.axes.streamplot": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:215" + ], + "Axes.axhline": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.acorr:21", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.xcorr:27" + ], + "Axes.dataLim": [ + "doc/api/axes_api.rst:296::1", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.update_datalim:2", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.update_datalim:2" + ], + "Axes.datalim": [ + "doc/api/axes_api.rst:296::1", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.update_datalim_bounds:2" + ], + "Axes.fill_between": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:368" + ], + "Axes.fill_between()": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.stackplot:36" + ], + "Axes.fmt_xdata": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:405", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:408" + ], + "Axes.fmt_ydata": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:405", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:408" + ], + "Axes.hist2d": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:798" + ], + "Axes.imshow": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:251", + "doc/users/prev_whats_new/whats_new_2.2.rst:254" + ], + "Axes.legend": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:31" + ], + "Axes.pcolor": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.pcolormesh:12" + ], + "Axes.pcolormesh": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.pcolormesh:12" + ], + "Axes.plot": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.acorr:25", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.xcorr:31", + "lib/matplotlib/testing/decorators.py:docstring of matplotlib.testing.decorators.check_figures_equal:31" + ], + "Axes.set_aspect": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.pie:99" + ], + "Axes.set_xlim": [ + "lib/matplotlib/axis.py:docstring of matplotlib.axis.Axis.set_view_interval:2" + ], + "Axes.set_ylim": [ + "lib/matplotlib/axis.py:docstring of matplotlib.axis.Axis.set_view_interval:2" + ], + "Axes.spy(..., origin='lower')": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:367" + ], + "Axes.stem": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:276" + ], + "Axes.step": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:368" + ], + "Axes.streamplot": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:174" + ], + "Axes.tick_params": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:241", + "doc/users/prev_whats_new/whats_new_2.2.rst:244" + ], + "Axes.transData": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:89", + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:91", + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:93", + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:96" + ], + "Axes.violin": [ + "doc/users/prev_whats_new/changelog.rst:84" + ], + "Axes.violinplot": [ + "doc/users/prev_whats_new/changelog.rst:85" + ], + "Axes.vlines": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.acorr:21", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.xcorr:27" + ], + "AxesBase": [ + "doc/api/axes_api.rst:445::1", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.add_child_axes:2" + ], + "Axis._update_ticks": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1074" + ], + "Axis.get_inverted": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:241", + "doc/users/prev_whats_new/whats_new_3.1.0.rst:243" + ], + "Axis.iter_ticks": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1072" + ], + "Axis.remove_overlaping_locs": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:79" + ], + "Axis.set_inverted": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:241", + "doc/users/prev_whats_new/whats_new_3.1.0.rst:243" + ], + "Axis.set_major_locator": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:20" + ], + "Axis.set_minor_locator": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:20" + ], + "Axis.set_tick_params": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:394", + "doc/users/prev_whats_new/whats_new_2.2.rst:244" + ], + "Axis.units": [ + "doc/api/prev_api_changes/api_changes_2.2.0.rst:77" + ], + "BoxTransmuterBase": [ + "lib/matplotlib/patches.py:docstring of matplotlib.patches.FancyBboxPatch:5" + ], + "CallbackRegistry": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:305" + ], + "Canvas": [ + "doc/devel/MEP/MEP22.rst:56", + "doc/devel/MEP/MEP22.rst:60", + "doc/devel/MEP/MEP23.rst:70" + ], + "CircleCollections": [ + "lib/matplotlib/legend_handler.py:docstring of matplotlib.legend_handler.HandlerCircleCollection:2" + ], + "ClabelText": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.clabel:70", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.clabel:70" + ], + "Collection": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:957", + "doc/users/prev_whats_new/whats_new_1.5.rst:321", + "doc/users/prev_whats_new/whats_new_2.2.rst:198", + "doc/users/prev_whats_new/whats_new_2.2.rst:201" + ], + "Collections": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:220" + ], + "Colormap": [ + "lib/matplotlib/cm.py:docstring of matplotlib.cm.get_cmap:10" + ], + "Colour": [ + "doc/devel/MEP/MEP26.rst:106" + ], + "ConciseDateConverter": [ + "doc/gallery/ticks_and_spines/date_concise_formatter.rst:209" + ], + "ConnectionPatch": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:178" + ], + "ContourSet": [ + "lib/matplotlib/blocking_input.py:docstring of matplotlib.blocking_input:17" + ], + "DraggableLegend": [ + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.DraggableBase:27" + ], + "DrawingArea": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:563" + ], + "EngFormatter": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:263" + ], + "Event": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolBase.trigger:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolCopyToClipboardBase.trigger:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolEnableAllNavigation.trigger:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolEnableNavigation.trigger:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolQuit.trigger:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolQuitAll.trigger:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ViewsPositionsBase.trigger:10" + ], + "FOO_wrap.cpp": [ + "doc/devel/contributing.rst:399" + ], + "FOO_wrapper.cpp": [ + "doc/devel/contributing.rst:399" + ], + "FT2Font": [ + "doc/gallery/misc/ftface_props.rst:14", + "lib/matplotlib/font_manager.py:docstring of matplotlib.font_manager.ttfFontProperty:8" + ], + "Figure": [ + "doc/devel/testing.rst:161", + "doc/users/prev_whats_new/whats_new_1.5.rst:22", + "doc/users/prev_whats_new/whats_new_2.2.rst:70", + "lib/matplotlib/backend_managers.py:docstring of matplotlib.backend_managers.ToolManager:21", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.SetCursorBase.set_figure:21", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolBase.set_figure:21", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolCursorPosition.set_figure:21", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolToggleBase.set_figure:21", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.subplot2grid:22" + ], + "Figure.align_labels": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:84" + ], + "Figure.align_xlabels": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:70" + ], + "Figure.align_ylabels": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:70" + ], + "Figure.subplot": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.axes:2", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.get_axes:5" + ], + "Figure.tight_layout()": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:571" + ], + "FigureCanvas": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolBase:25" + ], + "FigureCanvasBase": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:172", + "lib/matplotlib/image.py:docstring of matplotlib.image.thumbnail:25" + ], + "FigureCanvasBase.print_figure": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:172" + ], + "FigureManager": [ + "doc/devel/MEP/MEP23.rst:25", + "doc/devel/MEP/MEP23.rst:62", + "doc/devel/MEP/MEP23.rst:63", + "doc/devel/MEP/MEP23.rst:65", + "doc/devel/MEP/MEP23.rst:78", + "doc/devel/MEP/MEP23.rst:85", + "doc/devel/MEP/MEP23.rst:87" + ], + "FigureManagerBase": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:163", + "doc/devel/MEP/MEP23.rst:103", + "doc/devel/MEP/MEP23.rst:111", + "doc/devel/MEP/MEP23.rst:40", + "doc/devel/MEP/MEP23.rst:57" + ], + "FigureManagerPS": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:163" + ], + "FigureManagerPdf": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:163" + ], + "FigureManagerSVG": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:163" + ], + "Figure_1-1.png": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:85" + ], + "Fomatter.fix_minus": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:269" + ], + "FontProperties": [ + "doc/devel/MEP/MEP14.rst:110", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.suptitle:40", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.suptitle:40" + ], + "FormatStrFormatter": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:129" + ], + "FormatStrFormatterNewStyle": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:129" + ], + "Formatter": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:20" + ], + "Formatter.__call__": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1123", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1129" + ], + "GTK3": [ + "doc/devel/MEP/MEP23.rst:54", + "doc/users/prev_whats_new/whats_new_1.5.rst:620" + ], + "GaussianKDE": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.violinplot:46", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.violinplot:46" + ], + "Glyph": [ + "doc/gallery/misc/ftface_props.rst:14" + ], + "GraphicsContext": [ + "doc/devel/MEP/MEP26.rst:68" + ], + "GraphicsContextBase": [ + "lib/matplotlib/backends/backend_agg.py:docstring of matplotlib.backends.backend_agg.RendererAgg.draw_text:8", + "lib/matplotlib/backends/backend_cairo.py:docstring of matplotlib.backends.backend_cairo.RendererCairo.draw_image:8", + "lib/matplotlib/backends/backend_cairo.py:docstring of matplotlib.backends.backend_cairo.RendererCairo.draw_markers:16", + "lib/matplotlib/backends/backend_cairo.py:docstring of matplotlib.backends.backend_cairo.RendererCairo.draw_text:8", + "lib/matplotlib/backends/backend_cairo.py:docstring of matplotlib.backends.backend_cairo.RendererCairo.new_gc:2", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.draw_image:8", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.draw_markers:16", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.draw_text:8", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.RendererPdf.new_gc:2", + "lib/matplotlib/backends/backend_pgf.py:docstring of matplotlib.backends.backend_pgf.RendererPgf.draw_image:8", + "lib/matplotlib/backends/backend_pgf.py:docstring of matplotlib.backends.backend_pgf.RendererPgf.draw_markers:16", + "lib/matplotlib/backends/backend_pgf.py:docstring of matplotlib.backends.backend_pgf.RendererPgf.draw_text:8", + "lib/matplotlib/backends/backend_pgf.py:docstring of matplotlib.backends.backend_pgf.RendererPgf.new_gc:2", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.draw_image:8", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.draw_markers:16", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.draw_text:8", + "lib/matplotlib/backends/backend_ps.py:docstring of matplotlib.backends.backend_ps.RendererPS.new_gc:2", + "lib/matplotlib/backends/backend_svg.py:docstring of matplotlib.backends.backend_svg.RendererSVG.draw_image:8", + "lib/matplotlib/backends/backend_svg.py:docstring of matplotlib.backends.backend_svg.RendererSVG.draw_markers:16", + "lib/matplotlib/backends/backend_svg.py:docstring of matplotlib.backends.backend_svg.RendererSVG.draw_text:8", + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template.RendererTemplate.draw_image:8", + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template.RendererTemplate.draw_text:8", + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template.RendererTemplate.new_gc:2", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.PathEffectRenderer.draw_markers:16" + ], + "GridFinder": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:92" + ], + "GridSpec.tight_layout()": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:571" + ], + "Ident": [ + "doc/devel/MEP/MEP26.rst:106" + ], + "Image": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.gci:4" + ], + "ImageComparisonFailure": [ + "lib/matplotlib/testing/decorators.py:docstring of matplotlib.testing.decorators.image_comparison:2" + ], + "ImageComparisonTest": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:710" + ], + "Installing": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:319" + ], + "IntEnum": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:338" + ], + "InvertedLogTransform": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1001" + ], + "Legend": [ + "doc/api/axes_api.rst:315::1", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.get_legend:2" + ], + "Legend.draggable()": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:402" + ], + "LightSource.hillshade": [ + "doc/users/prev_whats_new/changelog.rst:38" + ], + "Line2D": [ + "doc/api/axes_api.rst:414::1", + "doc/devel/MEP/MEP26.rst:141", + "doc/devel/MEP/MEP26.rst:36", + "doc/users/prev_whats_new/whats_new_1.5.rst:321", + "doc/users/prev_whats_new/whats_new_1.5.rst:324", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.get_xgridlines:2", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.get_xticklines:2", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.get_ygridlines:2", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.get_yticklines:2", + "lib/matplotlib/container.py:docstring of matplotlib.container.StemContainer:40" + ], + "LineCollection": [ + "lib/matplotlib/container.py:docstring of matplotlib.container.StemContainer:40" + ], + "LinearSegmentedColormaps": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.makeMappingArray:64" + ], + "Lines2D": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.errorbar:103", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.errorbar:103" + ], + "Locator": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:20", + "doc/users/prev_whats_new/whats_new_1.5.rst:522", + "doc/users/prev_whats_new/whats_new_1.5.rst:528" + ], + "Locator.autoscale()": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:117" + ], + "Locator.nonsingular": [ + "doc/api/prev_api_changes/api_changes_3.1.1.rst:14" + ], + "Locator.view_limits()": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:117" + ], + "LockDraw": [ + "lib/matplotlib/backend_managers.py:docstring of matplotlib.backend_managers.ToolManager:24", + "lib/matplotlib/backend_managers.py:docstring of matplotlib.backend_managers.ToolManager:27" + ], + "LogLocator": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:207", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:59", + "doc/api/prev_api_changes/api_changes_3.1.1.rst:14" + ], + "LogNorm": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:207" + ], + "LogTransform": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1001" + ], + "LogitLocator": [ + "doc/api/prev_api_changes/api_changes_3.1.1.rst:14" + ], + "MPLBACKEND": [ + "doc/users/prev_whats_new/changelog.rst:32" + ], + "MatplotlibDeprecationWarning": [ + "doc/devel/contributing.rst:352" + ], + "MicrosecondLocator.__call__": [ + "doc/api/prev_api_changes/api_changes_1.5.0.rst:119" + ], + "MixedModeRenderer": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.RendererBase.start_rasterizing:4", + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.RendererBase.stop_rasterizing:5" + ], + "MouseButton.LEFT": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:338" + ], + "MouseButton.MIDDLE": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:338" + ], + "MouseButton.RIGHT": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:338" + ], + "MovieWriter.saving": [ + "doc/api/animation_api.rst:213" + ], + "MovieWriterBase": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.AVConvBase:4", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FFMpegBase:4", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickBase:4" + ], + "MovieWriterRegistry": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:49", + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:51", + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:122" + ], + "Navigation": [ + "doc/devel/MEP/MEP22.rst:155", + "doc/devel/MEP/MEP22.rst:60" + ], + "NavigationBase": [ + "doc/devel/MEP/MEP23.rst:90", + "doc/devel/MEP/MEP23.rst:93" + ], + "NavigationToolbar2": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:604", + "doc/users/prev_whats_new/whats_new_1.5.rst:607" + ], + "NavigationToolbar2QT.adj_window": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:969" + ], + "NavigationToolbar2QT.buttons": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1041" + ], + "Normalize": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.imshow:27", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.imshow:27" + ], + "Number": [ + "doc/devel/MEP/MEP26.rst:106" + ], + "OffsetBoxes": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:571" + ], + "PIL.Image.save": [ + "lib/matplotlib/backends/backend_agg.py:docstring of matplotlib.backends.backend_agg.FigureCanvasAgg.print_jpeg:31", + "lib/matplotlib/backends/backend_agg.py:docstring of matplotlib.backends.backend_agg.FigureCanvasAgg.print_jpg:31", + "lib/matplotlib/backends/backend_agg.py:docstring of matplotlib.backends.backend_agg.FigureCanvasAgg.print_png:42", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.savefig:107", + "lib/matplotlib/image.py:docstring of matplotlib.image.imsave:47", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.imsave:47", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.savefig:107" + ], + "P_{xx}": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.psd:87", + "lib/matplotlib/mlab.py:docstring of matplotlib.mlab.psd:76", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.psd:87" + ], + "P_{xy}": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.csd:168", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.csd:89", + "lib/matplotlib/mlab.py:docstring of matplotlib.mlab.csd:79", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.csd:168", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.csd:89" + ], + "Patch": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:321", + "doc/users/prev_whats_new/whats_new_1.5.rst:324" + ], + "Patch.set_color": [ + "lib/matplotlib/spines.py:docstring of matplotlib.spines.Spine.set_color:20" + ], + "Patch.set_facecolor": [ + "lib/matplotlib/spines.py:docstring of matplotlib.spines.Spine.set_color:20" + ], + "Patches.ConnectionPatch": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.indicate_inset_zoom:33" + ], + "Patches.Rectangle": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.indicate_inset_zoom:20" + ], + "Path": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.GraphicsContextBase.get_hatch_path:2", + "lib/matplotlib/textpath.py:docstring of matplotlib.textpath.TextToPath.get_text_path:37" + ], + "PathCollection": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:30" + ], + "PathCollection.get_array": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:30" + ], + "PathCollection.get_offsets": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:30" + ], + "PathCollections": [ + "lib/matplotlib/legend_handler.py:docstring of matplotlib.legend_handler.HandlerPathCollection:2" + ], + "PathLike": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.open_file_cm:2" + ], + "PdfPages.attach_note": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:587" + ], + "Poly3DCollection": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.voxels:58" + ], + "PolyCollection.get_offset": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.hexbin:71", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.hexbin:71" + ], + "PyPI": [ + "doc/devel/MEP/MEP11.rst:106", + "doc/devel/MEP/MEP11.rst:35" + ], + "QuadContourSet.changed()": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.contour:133", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.contourf:133", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.contour:133", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.contourf:133" + ], + "Quit": [ + "doc/devel/MEP/MEP22.rst:78" + ], + "Quiver": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:955" + ], + "Quiver.pivot": [ + "doc/api/prev_api_changes/api_changes_1.5.0.rst:44" + ], + "RegularPolyCollections": [ + "lib/matplotlib/legend_handler.py:docstring of matplotlib.legend_handler.HandlerRegularPolyCollection:2" + ], + "RendererSVG": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:233" + ], + "Returns": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.boxplot_stats:2" + ], + "RuleSet": [ + "doc/devel/MEP/MEP26.rst:122" + ], + "ScalarFormatter": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:293" + ], + "ScalarMappable": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:298", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.colorbar:25", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.colorbar:21" + ], + "Size.from_any": [ + "lib/mpl_toolkits/axes_grid1/axes_grid.py:docstring of mpl_toolkits.axes_grid1.axes_grid.ImageGrid:73", + "lib/mpl_toolkits/axisartist/axes_grid.py:docstring of mpl_toolkits.axisartist.axes_grid.ImageGrid:48" + ], + "Style": [ + "doc/devel/MEP/MEP26.rst:207", + "doc/devel/MEP/MEP26.rst:68" + ], + "SubplotTool": [ + "doc/devel/MEP/MEP22.rst:78" + ], + "SymLogScale": [ + "doc/api/prev_api_changes/api_changes_3.2.0/deprecations.rst:235" + ], + "TexManager": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.RendererBase.get_texmanager:2" + ], + "Text": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1089", + "doc/devel/MEP/MEP14.rst:252", + "doc/devel/MEP/MEP26.rst:141", + "lib/matplotlib/axis.py:docstring of matplotlib.axis.Axis.set_ticklabels:33", + "lib/matplotlib/axis.py:docstring of matplotlib.axis.Axis.set_ticklabels:9", + "lib/matplotlib/axis.py:docstring of matplotlib.axis.XAxis.set_ticklabels:33", + "lib/matplotlib/axis.py:docstring of matplotlib.axis.XAxis.set_ticklabels:9", + "lib/matplotlib/axis.py:docstring of matplotlib.axis.YAxis.set_ticklabels:33", + "lib/matplotlib/axis.py:docstring of matplotlib.axis.YAxis.set_ticklabels:9" + ], + "Text.get_text": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:67", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:71" + ], + "Text.set_text": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:64", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:67" + ], + "TextArea": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:558" + ], + "TextFont": [ + "doc/devel/MEP/MEP14.rst:263" + ], + "TextLayout": [ + "doc/devel/MEP/MEP14.rst:263", + "doc/devel/MEP/MEP14.rst:372" + ], + "TextPath": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:127" + ], + "TextSpan": [ + "doc/devel/MEP/MEP14.rst:263" + ], + "TextSpans": [ + "doc/devel/MEP/MEP14.rst:263" + ], + "Tick": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:414", + "doc/users/prev_whats_new/whats_new_2.1.0.rst:409", + "doc/users/prev_whats_new/whats_new_2.2.rst:244" + ], + "Timer": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:17" + ], + "Tk": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:620" + ], + "Tool": [ + "doc/devel/MEP/MEP22.rst:60", + "doc/devel/MEP/MEP22.rst:96" + ], + "ToolBase": [ + "doc/devel/MEP/MEP22.rst:80" + ], + "ToolContainer": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:614", + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase.remove_toolitem:2", + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase:20" + ], + "ToolContainers": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:614" + ], + "ToolManager": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:607", + "doc/users/prev_whats_new/whats_new_1.5.rst:620", + "doc/users/prev_whats_new/whats_new_1.5.rst:626", + "doc/users/prev_whats_new/whats_new_1.5.rst:657", + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase.remove_toolitem:6", + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase:21", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.AxisScaleBase.disable:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolFullScreen.disable:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolToggleBase.disable:10", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.add_tools_to_manager:2" + ], + "ToolManager.get_tool": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase.add_tool:8" + ], + "ToolToggleBase": [ + "doc/devel/MEP/MEP22.rst:116", + "doc/users/prev_whats_new/whats_new_1.5.rst:671" + ], + "ToolToggleBase.trigger": [ + "doc/devel/MEP/MEP22.rst:127" + ], + "Toolbar": [ + "doc/devel/MEP/MEP22.rst:177", + "doc/devel/MEP/MEP22.rst:56", + "doc/devel/MEP/MEP22.rst:60", + "doc/devel/MEP/MEP23.rst:46" + ], + "Toolbars": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:614" + ], + "Toolmanager": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:607" + ], + "Tools": [ + "doc/devel/MEP/MEP22.rst:40", + "doc/devel/MEP/MEP22.rst:56", + "doc/users/prev_whats_new/whats_new_1.5.rst:607" + ], + "Transform": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:357", + "doc/users/prev_whats_new/whats_new_2.2.rst:360" + ], + "Tree": [ + "doc/devel/MEP/MEP26.rst:173" + ], + "Values": [ + "doc/devel/MEP/MEP26.rst:168" + ], + "WeakMethod": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:305", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:308" + ], + "XAxis": [ + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.ThetaAxis:4" + ], + "XTick": [ + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.ThetaTick:4" + ], + "YAxis": [ + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.RadialAxis:4" + ], + "YTick": [ + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.RadialTick:4" + ], + "_on_timer": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:17", + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:27" + ], + "_read": [ + "lib/matplotlib/dviread.py:docstring of matplotlib.dviread.Vf:25" + ], + "_timer_set_interval": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:23" + ], + "_timer_set_single_shot": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:17" + ], + "_timer_start": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:9" + ], + "_timer_stop": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.TimerBase:12" + ], + "a.set_in_layout(False)": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.tight_layout:4" + ], + "access/trigger/reconfigure": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:607" + ], + "active": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.AxesWidget:34" + ], + "add_canvas": [ + "doc/devel/MEP/MEP23.rst:62" + ], + "add_subplot": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.subplot2grid:25" + ], + "add_tool": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.add_tools_to_container:11", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.add_tools_to_manager:11" + ], + "align": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "alt": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "and": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "angle": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:232" + ], + "api_changes.rst": [ + "doc/api/next_api_changes/README.rst:6" + ], + "artist": [ + "doc/devel/MEP/MEP26.rst:122", + "doc/devel/MEP/MEP26.rst:141", + "doc/devel/MEP/MEP26.rst:152", + "doc/devel/MEP/MEP26.rst:167" + ], + "artists": [ + "doc/devel/MEP/MEP26.rst:122", + "doc/devel/MEP/MEP26.rst:45" + ], + "attribute": [ + "doc/devel/MEP/MEP26.rst:119" + ], + "autodoc_docstring_signature": [ + "doc/devel/MEP/MEP10.rst:87" + ], + "autoscale_view": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.autoscale:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:121" + ], + "ax.remove()": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:511" + ], + "ax.transAxes": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.indicate_inset:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.inset_axes:11" + ], + "axes.Axes": [ + "lib/matplotlib/gridspec.py:docstring of matplotlib.gridspec:1" + ], + "axes.Axes.clabel": [ + "lib/matplotlib/contour.py:docstring of matplotlib.contour.QuadContourSet:4" + ], + "axes.Axes.contour": [ + "lib/matplotlib/contour.py:docstring of matplotlib.contour.ContourSet:112", + "lib/matplotlib/contour.py:docstring of matplotlib.contour.QuadContourSet:77" + ], + "axes.Axes.patch": [ + "doc/api/prev_api_changes/api_changes_1.3.x.rst:36" + ], + "axes.bbox": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:128", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:92", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:87", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:92", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:128" + ], + "axes.bxp": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.boxplot_stats:2" + ], + "axes.edgecolor": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:211" + ], + "axes.facecolor": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:208" + ], + "axes.formatter.offset_threshold": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:82" + ], + "axes.labelpad": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:200" + ], + "axes.prop_cycle": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:111" + ], + "axes.py": [ + "doc/devel/MEP/MEP12.rst:140" + ], + "axes.set_title": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:209" + ], + "axes3d.Axes3D.xaxis": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:941" + ], + "axes3d.Axes3D.yaxis": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:941" + ], + "axes3d.Axes3D.zaxis": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:941" + ], + "axes_class": [ + "lib/mpl_toolkits/axes_grid1/inset_locator.py:docstring of mpl_toolkits.axes_grid1.inset_locator.inset_axes:146", + "lib/mpl_toolkits/axes_grid1/inset_locator.py:docstring of mpl_toolkits.axes_grid1.inset_locator.zoomed_inset_axes:138" + ], + "axes_grid1": [ + "doc/index.rst:145" + ], + "axis.Axis.get_ticks_position": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:829" + ], + "axisartist": [ + "doc/index.rst:145" + ], + "backend_bases.GraphicsContextBase.set_clip_path": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "backend_bases.RendererBase": [ + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template.RendererTemplate:4" + ], + "backend_bases.Timer.add_callback": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:267" + ], + "backend_bases.Timer.add_callback(func, *args, **kwargs)": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:250" + ], + "backend_bases.Timer.remove_callback": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:247" + ], + "backend_bases.Timer.remove_callback(func, *args,\n**kwargs)": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:250" + ], + "backend_bases.ToolContainerBase": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.add_tools_to_container:8" + ], + "backend_gtk3.FileChooserDialog": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:966" + ], + "backend_gtk3.NavigationToolbar2GTK3.get_filechooser": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:967" + ], + "backend_gtk3.SaveFigureGTK3.get_filechooser": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:968" + ], + "backend_managers.ToolManager": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.add_tools_to_manager:8" + ], + "backend_wx.IDLE_DELAY": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:970" + ], + "bar": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:457" + ], + "barh": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:457" + ], + "barstacked": [ + "doc/users/prev_whats_new/whats_new_1.2.rst:177" + ], + "bbox_to_anchor": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:219", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:224", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:183", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:188", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:178", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:183", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:183", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:188", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:219", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:224" + ], + "bbox_transform": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:133", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:97", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:92", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:97", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:133" + ], + "bezier.check_if_parallel": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:801" + ], + "bezier.find_bezier_t_intersecting_with_closedpath": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:801" + ], + "bezier.find_r_to_boundary_of_closedpath": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1026", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:801" + ], + "bezier.split_bezier_intersecting_with_closedpath": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:801" + ], + "bezier.split_path_inout": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:801" + ], + "blend_mode=\"overlay\"": [ + "doc/users/prev_whats_new/changelog.rst:35" + ], + "blocking_input.BlockingInput.__call__": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "calculate_rms": [ + "lib/matplotlib/testing/compare.py:docstring of matplotlib.testing.compare.compare_images:4" + ], + "callback": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.Lasso:19" + ], + "can_composite": [ + "lib/matplotlib/image.py:docstring of matplotlib.image.composite_images:9" + ], + "canvas": [ + "doc/devel/MEP/MEP22.rst:140", + "doc/devel/MEP/MEP23.rst:40" + ], + "cbook._warn_external": [ + "doc/devel/contributing.rst:518", + "doc/devel/contributing.rst:533", + "doc/devel/contributing.rst:542", + "doc/devel/contributing.rst:567" + ], + "cbook.boxplot_stats": [ + "doc/users/prev_whats_new/changelog.rst:148" + ], + "cbook.deprecated": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1081", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:774" + ], + "cbook.normalize_kwargs": [ + "doc/users/prev_whats_new/whats_new_3.2.0.rst:26" + ], + "cbook.violin_stats": [ + "doc/users/prev_whats_new/changelog.rst:84" + ], + "cbook.warn_deprecated": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:774" + ], + "cbook.warn_deprecated()": [ + "doc/devel/contributing.rst:355" + ], + "ccount": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:281", + "doc/users/prev_whats_new/whats_new_2.0.0.rst:284" + ], + "checkdep_dvipng": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:840" + ], + "checkdep_ghostscript": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:841" + ], + "checkdep_inkscape": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:843" + ], + "checkdep_pdftops": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:842" + ], + "clabel": [ + "lib/matplotlib/blocking_input.py:docstring of matplotlib.blocking_input:17" + ], + "class": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "clear": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:319", + "doc/users/prev_whats_new/whats_new_2.1.0.rst:322" + ], + "clipon=False": [ + "doc/users/prev_whats_new/changelog.rst:94" + ], + "cm.register_cmap": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "cmap": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.Axes3D.plot_surface:50", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.plot_surface:50" + ], + "cmap='gist_earth'": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.LightSource.shade:13" + ], + "cmap=plt.get_cmap('gist_earth')": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.LightSource.shade:13" + ], + "collections.LineCollection.get_segements()": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:288" + ], + "collections.StemContainer": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:273", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:276" + ], + "colorbar.ColorbarBase.outline": [ + "doc/api/prev_api_changes/api_changes_1.4.x.rst:83" + ], + "colors.LightSource": [ + "doc/users/prev_whats_new/changelog.rst:38" + ], + "container": [ + "doc/devel/MEP/MEP26.rst:122" + ], + "context": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:117" + ], + "converter": [ + "lib/matplotlib/testing/compare.py:docstring of matplotlib.testing.compare.compare_images:4" + ], + "coords": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.violin_stats:42" + ], + "cstride": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:291" + ], + "date.autoformatter.day": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:49" + ], + "date.autoformatter.hour": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:51" + ], + "date.autoformatter.microsecond": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:57" + ], + "date.autoformatter.minute": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:53" + ], + "date.autoformatter.month": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:47" + ], + "date.autoformatter.second": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:55" + ], + "date.autoformatter.year": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:45" + ], + "dateime.datetime": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:155" + ], + "dates": [ + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker:82" + ], + "dates.bytespdate2num": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:927" + ], + "dates.strpdate2num": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:926" + ], + "dateutil": [ + "doc/devel/MEP/MEP11.rst:109", + "doc/devel/MEP/MEP11.rst:117", + "doc/devel/MEP/MEP11.rst:136", + "doc/devel/MEP/MEP11.rst:140", + "doc/devel/MEP/MEP11.rst:67", + "doc/devel/MEP/MEP11.rst:84", + "doc/devel/MEP/MEP11.rst:90", + "doc/users/prev_whats_new/whats_new_1.3.rst:374" + ], + "density=(1, 1)": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:135" + ], + "density=1": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:135" + ], + "disable": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:671" + ], + "display_range": [ + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.PercentFormatter.format_pct:5" + ], + "distribute": [ + "doc/devel/MEP/MEP11.rst:106", + "doc/devel/MEP/MEP11.rst:117", + "doc/devel/MEP/MEP11.rst:35" + ], + "doc/api/api_changes": [ + "doc/devel/contributing.rst:269" + ], + "doc/api/next_api_changes": [ + "doc/devel/contributing.rst:346" + ], + "docstring.Appender": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:851" + ], + "docstring.copy_dedent": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:853" + ], + "docstring.dedent": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:852" + ], + "dpi='figure'": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:412" + ], + "draw": [ + "doc/devel/MEP/MEP26.rst:68" + ], + "draw_gouraud_triangle": [ + "lib/matplotlib/collections.py:docstring of matplotlib.collections.QuadMesh.convert_mesh_to_triangles:2" + ], + "draw_image": [ + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template:8" + ], + "draw_path": [ + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template:8" + ], + "draw_text": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:254" + ], + "dviread.DviFont": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "easy_install": [ + "doc/devel/MEP/MEP11.rst:167", + "doc/devel/MEP/MEP11.rst:35" + ], + "eggs": [ + "doc/devel/MEP/MEP11.rst:167" + ], + "elevation": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.LightSource.shade_rgb:2" + ], + "enable": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:671" + ], + "errorbar.capsize": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:202" + ], + "errorevery": [ + "doc/users/prev_whats_new/whats_new_3.2.0.rst:96" + ], + "evaluator": [ + "doc/devel/MEP/MEP26.rst:199" + ], + "every=5": [ + "lib/matplotlib/lines.py:docstring of matplotlib.lines.Line2D.set_markevery:4" + ], + "examples/user_interfaces/toolmanager_sgskip.py": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:317" + ], + "examplesuser_interfacesembedding_in_wx2.py": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:184" + ], + "exe": [ + "doc/devel/MEP/MEP11.rst:167" + ], + "extend": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.from_levels_and_colors:13" + ], + "fc-list": [ + "lib/matplotlib/font_manager.py:docstring of matplotlib.font_manager.get_fontconfig_fonts:2" + ], + "fig.canvas.draw": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:69" + ], + "figure": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:246" + ], + "figure.Figure.canvas.set_window_title()": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:85" + ], + "figure.bbox": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:128", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:92", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:87", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:92", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:128" + ], + "figure.canvas.mpl_connect": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.AxesWidget.connect_event:4" + ], + "figure.subplots": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:16" + ], + "figure.suptitle": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:30" + ], + "figure.titlesize": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:214" + ], + "figure.titleweight": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:216" + ], + "figuremanager": [ + "doc/devel/MEP/MEP23.rst:78", + "doc/devel/MEP/MEP23.rst:85" + ], + "filled": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.voxels:17" + ], + "floating_axes.FloatingSubplot": [ + "doc/gallery/axisartist/demo_floating_axes.rst:20" + ], + "fmt_xdata": [ + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.format_xdata:4" + ], + "fmt_ydata": [ + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.format_ydata:4" + ], + "font.*": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:302" + ], + "font.family": [ + "doc/devel/MEP/MEP14.rst:110" + ], + "font_manager.py": [ + "doc/devel/MEP/MEP14.rst:130" + ], + "fontconfig": [ + "doc/devel/MEP/MEP14.rst:165" + ], + "fontforge": [ + "doc/devel/MEP/MEP14.rst:201" + ], + "format_pixel_data": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:274" + ], + "func(rgb, illum, **kwargs)": [ + "lib/matplotlib/colors.py:docstring of matplotlib.colors.LightSource.shade:23", + "lib/matplotlib/colors.py:docstring of matplotlib.colors.LightSource.shade_rgb:22" + ], + "functions=(lambda x: 2 / x, lambda x: 2 / x)": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.secondary_xaxis:17" + ], + "gamma": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:58" + ], + "gaussian_kde": [ + "lib/matplotlib/mlab.py:docstring of matplotlib.mlab.GaussianKDE:32" + ], + "gen_rst.py": [ + "doc/devel/MEP/MEP10.rst:166" + ], + "get_": [ + "doc/devel/MEP/MEP26.rst:36" + ], + "get_active_canvas": [ + "doc/devel/MEP/MEP23.rst:70" + ], + "get_canvas_title": [ + "doc/devel/MEP/MEP23.rst:68" + ], + "get_contains": [ + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend.contains:29", + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.AnnotationBbox.contains:29", + "lib/matplotlib/quiver.py:docstring of matplotlib.quiver.QuiverKey.contains:29", + "lib/matplotlib/table.py:docstring of matplotlib.table.Table.contains:29" + ], + "get_pixel_data": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:274" + ], + "get_ps": [ + "doc/devel/MEP/MEP14.rst:372" + ], + "get_size": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:223", + "lib/mpl_toolkits/axes_grid1/axes_size.py:docstring of mpl_toolkits.axes_grid1.axes_size:1" + ], + "get_spans": [ + "doc/devel/MEP/MEP14.rst:372" + ], + "get_xbound": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_xlim3d:22" + ], + "get_ybound": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_ylim3d:22" + ], + "gid": [ + "doc/devel/MEP/MEP26.rst:152", + "doc/devel/MEP/MEP26.rst:156" + ], + "ginput": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.FigureCanvasBase.start_event_loop:4", + "lib/matplotlib/blocking_input.py:docstring of matplotlib.blocking_input:13" + ], + "git": [ + "doc/devel/MEP/MEP11.rst:62" + ], + "git status": [ + "doc/devel/coding_guide.rst:207" + ], + "h_pad": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.set_constrained_layout:5" + ], + "handler_map": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.legend:259", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.legend:223", + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend:218", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figlegend:223", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.legend:259" + ], + "harfbuzz": [ + "doc/devel/MEP/MEP14.rst:85" + ], + "hatch.linewidth": [ + "doc/users/dflt_style_changes.rst:649" + ], + "height": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "hexbin": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:281" + ], + "hist.bins": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:74" + ], + "hspace": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.get_constrained_layout_pads:4" + ], + "http://labix.org/python-dateutil": [ + "doc/users/prev_whats_new/whats_new_1.2.rst:192" + ], + "http://pytz.sf.net/": [ + "doc/users/prev_whats_new/whats_new_1.2.rst:190" + ], + "http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:385" + ], + "image": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "image.composite_image": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:218" + ], + "images": [ + "lib/matplotlib/image.py:docstring of matplotlib.image.composite_images:2" + ], + "import matplotlib as mpl": [ + "doc/users/prev_whats_new/changelog.rst:271" + ], + "import numpy": [ + "doc/devel/MEP/MEP11.rst:64" + ], + "imshow()": [ + "doc/users/prev_whats_new/changelog.rst:80" + ], + "imshow(A, interpolation='antialiased')": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:215" + ], + "interactive": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:262", + "lib/matplotlib/backends/backend_nbagg.py:docstring of matplotlib.backends.backend_nbagg.show:4" + ], + "invert_xaxis": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_xlim3d:24" + ], + "invert_yaxis": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_ylim3d:24" + ], + "itertools.product()": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:104" + ], + "kde.covariance_factor": [ + "lib/matplotlib/mlab.py:docstring of matplotlib.mlab.GaussianKDE:41" + ], + "kde.factor": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.violinplot:46", + "lib/matplotlib/mlab.py:docstring of matplotlib.mlab.GaussianKDE:12", + "lib/matplotlib/mlab.py:docstring of matplotlib.mlab.GaussianKDE:45", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.violinplot:46" + ], + "kwarg": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:141", + "doc/users/prev_whats_new/whats_new_1.4.rst:150", + "doc/users/prev_whats_new/whats_new_3.0.rst:63" + ], + "kwargs": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:172" + ], + "labelcolor": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:118", + "doc/users/prev_whats_new/whats_new_2.0.0.rst:121" + ], + "labels": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:341" + ], + "legend.Legend.set_draggable()": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:507" + ], + "legend.edgecolor": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:211" + ], + "legend.facecolor": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:208" + ], + "legend.framealpha": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:206" + ], + "legend_handler": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:341" + ], + "levels": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:197" + ], + "lib/matplotlib/mpl-data/sample_data/": [ + "doc/devel/contributing.rst:592" + ], + "line\nstyle": [ + "doc/devel/MEP/MEP26.rst:36" + ], + "line color": [ + "doc/devel/MEP/MEP26.rst:36" + ], + "lineprops": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.PolygonSelector:28" + ], + "lines.linewidth": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.tricontour:130", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.tricontourf:130", + "lib/matplotlib/tri/tricontour.py:docstring of matplotlib.axes.Axes.tricontour:130", + "lib/matplotlib/tri/tricontour.py:docstring of matplotlib.axes.Axes.tricontourf:130" + ], + "lines.scale_dashes": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:79" + ], + "linestyle": [ + "doc/users/prev_whats_new/changelog.rst:232" + ], + "load_char": [ + "doc/gallery/misc/ftface_props.rst:14" + ], + "loc": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:263", + "lib/matplotlib/projections/polar.py:docstring of matplotlib.projections.polar.PolarAxes.set_theta_zero_location:9" + ], + "logger.WARNING": [ + "doc/devel/contributing.rst:493" + ], + "logging.WARNING": [ + "doc/devel/contributing.rst:530" + ], + "ls_mapper": [ + "doc/api/prev_api_changes/api_changes_1.5.0.rst:11" + ], + "ls_mapper_r": [ + "doc/api/prev_api_changes/api_changes_1.5.0.rst:11", + "doc/api/prev_api_changes/api_changes_1.5.0.rst:8" + ], + "mainloop": [ + "lib/matplotlib/backends/backend_nbagg.py:docstring of matplotlib.backends.backend_nbagg.show:4" + ], + "make.py": [ + "doc/devel/MEP/MEP10.rst:170", + "doc/devel/MEP/MEP10.rst:33" + ], + "make_image": [ + "lib/matplotlib/image.py:docstring of matplotlib.image.composite_images:9" + ], + "markerprops": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.PolygonSelector:33" + ], + "markers.fillstyle": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:223" + ], + "markevery": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:212", + "doc/users/prev_whats_new/whats_new_1.4.rst:214", + "doc/users/prev_whats_new/whats_new_3.0.rst:111" + ], + "master": [ + "doc/devel/coding_guide.rst:216" + ], + "mathcircled": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:737" + ], + "matplotib.colors.Colormap": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.set_cmap:15" + ], + "matplotlib pyplot": [ + "doc/devel/MEP/MEP12.rst:13" + ], + "matplotlib.Axes.bar": [ + "doc/users/dflt_style_changes.rst:609" + ], + "matplotlib.Axes.barh": [ + "doc/users/dflt_style_changes.rst:609" + ], + "matplotlib.Axes.hexbin": [ + "doc/users/dflt_style_changes.rst:600" + ], + "matplotlib.Figure.get_size_inches": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.set_size_inches:32" + ], + "matplotlib.Figure.set_size_inches": [ + "doc/users/dflt_style_changes.rst:262", + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.get_size_inches:20" + ], + "matplotlib.animation.AVConvBase.output_args": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.AVConvBase.args_key:1::1" + ], + "matplotlib.animation.AVConvFileWriter.args_key": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:38::1" + ], + "matplotlib.animation.AVConvFileWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.exec_key": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:38::1" + ], + "matplotlib.animation.AVConvFileWriter.finish": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.frame_format": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:38::1" + ], + "matplotlib.animation.AVConvFileWriter.frame_size": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:38::1" + ], + "matplotlib.animation.AVConvFileWriter.grab_frame": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.output_args": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:38::1" + ], + "matplotlib.animation.AVConvFileWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.setup": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:28::1" + ], + "matplotlib.animation.AVConvFileWriter.supported_formats": [ + "doc/api/_as_gen/matplotlib.animation.AVConvFileWriter.rst:38::1" + ], + "matplotlib.animation.AVConvWriter.args_key": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:36::1" + ], + "matplotlib.animation.AVConvWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.AVConvWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.AVConvWriter.exec_key": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:36::1" + ], + "matplotlib.animation.AVConvWriter.finish": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.AVConvWriter.frame_size": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:36::1" + ], + "matplotlib.animation.AVConvWriter.grab_frame": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.AVConvWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.AVConvWriter.output_args": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:36::1" + ], + "matplotlib.animation.AVConvWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.AVConvWriter.setup": [ + "doc/api/_as_gen/matplotlib.animation.AVConvWriter.rst:28::1" + ], + "matplotlib.animation.ArtistAnimation.new_frame_seq": [ + "doc/api/_as_gen/matplotlib.animation.ArtistAnimation.rst:21::1" + ], + "matplotlib.animation.ArtistAnimation.new_saved_frame_seq": [ + "doc/api/_as_gen/matplotlib.animation.ArtistAnimation.rst:21::1" + ], + "matplotlib.animation.ArtistAnimation.save": [ + "doc/api/_as_gen/matplotlib.animation.ArtistAnimation.rst:21::1" + ], + "matplotlib.animation.ArtistAnimation.to_html5_video": [ + "doc/api/_as_gen/matplotlib.animation.ArtistAnimation.rst:21::1" + ], + "matplotlib.animation.ArtistAnimation.to_jshtml": [ + "doc/api/_as_gen/matplotlib.animation.ArtistAnimation.rst:21::1" + ], + "matplotlib.animation.FFMpegFileWriter.args_key": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FFMpegFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.FFMpegFileWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegFileWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegFileWriter.exec_key": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FFMpegFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.FFMpegFileWriter.finish": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegFileWriter.frame_format": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FFMpegFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.FFMpegFileWriter.frame_size": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FFMpegFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.FFMpegFileWriter.grab_frame": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegFileWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegFileWriter.output_args": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FFMpegFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.FFMpegFileWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegFileWriter.setup": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegFileWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.args_key": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:36::1" + ], + "matplotlib.animation.FFMpegWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.exec_key": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:36::1" + ], + "matplotlib.animation.FFMpegWriter.finish": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.frame_size": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:36::1" + ], + "matplotlib.animation.FFMpegWriter.grab_frame": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.output_args": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:36::1" + ], + "matplotlib.animation.FFMpegWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FFMpegWriter.setup": [ + "doc/api/_as_gen/matplotlib.animation.FFMpegWriter.rst:28::1" + ], + "matplotlib.animation.FileMovieWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.FileMovieWriter.rst:28::1" + ], + "matplotlib.animation.FileMovieWriter.frame_size": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FileMovieWriter.cleanup:1::1" + ], + "matplotlib.animation.FileMovieWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.FileMovieWriter.rst:28::1" + ], + "matplotlib.animation.FileMovieWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.FileMovieWriter.rst:28::1" + ], + "matplotlib.animation.FuncAnimation.save": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FuncAnimation.new_frame_seq:1::1" + ], + "matplotlib.animation.FuncAnimation.to_html5_video": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FuncAnimation.new_frame_seq:1::1" + ], + "matplotlib.animation.FuncAnimation.to_jshtml": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FuncAnimation.new_frame_seq:1::1" + ], + "matplotlib.animation.HTMLWriter": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:40", + "doc/users/prev_whats_new/whats_new_2.1.0.rst:51" + ], + "matplotlib.animation.ImageMagickFileWriter.args_key": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.ImageMagickFileWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickFileWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickFileWriter.delay": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.ImageMagickFileWriter.exec_key": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.ImageMagickFileWriter.finish": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickFileWriter.frame_format": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.ImageMagickFileWriter.frame_size": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.ImageMagickFileWriter.grab_frame": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickFileWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickFileWriter.output_args": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.ImageMagickFileWriter.supported_formats:1::1" + ], + "matplotlib.animation.ImageMagickFileWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickFileWriter.setup": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickFileWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.args_key": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:37::1" + ], + "matplotlib.animation.ImageMagickWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.delay": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:37::1" + ], + "matplotlib.animation.ImageMagickWriter.exec_key": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:37::1" + ], + "matplotlib.animation.ImageMagickWriter.finish": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.frame_size": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:37::1" + ], + "matplotlib.animation.ImageMagickWriter.grab_frame": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.isAvailable": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.output_args": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:37::1" + ], + "matplotlib.animation.ImageMagickWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.ImageMagickWriter.setup": [ + "doc/api/_as_gen/matplotlib.animation.ImageMagickWriter.rst:28::1" + ], + "matplotlib.animation.MovieWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.MovieWriter.rst:28::1" + ], + "matplotlib.animation.PillowWriter.bin_path": [ + "doc/api/_as_gen/matplotlib.animation.PillowWriter.rst:28::1" + ], + "matplotlib.animation.PillowWriter.cleanup": [ + "doc/api/_as_gen/matplotlib.animation.PillowWriter.rst:28::1" + ], + "matplotlib.animation.PillowWriter.frame_size": [ + "lib/matplotlib/animation.py:docstring of matplotlib.animation.PillowWriter.finish:1::1" + ], + "matplotlib.animation.PillowWriter.saving": [ + "doc/api/_as_gen/matplotlib.animation.PillowWriter.rst:28::1" + ], + "matplotlib.animation.TimedAnimation.new_frame_seq": [ + "doc/api/_as_gen/matplotlib.animation.TimedAnimation.rst:21::1" + ], + "matplotlib.animation.TimedAnimation.new_saved_frame_seq": [ + "doc/api/_as_gen/matplotlib.animation.TimedAnimation.rst:21::1" + ], + "matplotlib.animation.TimedAnimation.save": [ + "doc/api/_as_gen/matplotlib.animation.TimedAnimation.rst:21::1" + ], + "matplotlib.animation.TimedAnimation.to_html5_video": [ + "doc/api/_as_gen/matplotlib.animation.TimedAnimation.rst:21::1" + ], + "matplotlib.animation.TimedAnimation.to_jshtml": [ + "doc/api/_as_gen/matplotlib.animation.TimedAnimation.rst:21::1" + ], + "matplotlib.backends.backend_agg._png": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:12" + ], + "matplotlib.cbook.ls_mapper": [ + "doc/api/prev_api_changes/api_changes_1.5.0.rst:11", + "doc/api/prev_api_changes/api_changes_1.5.0.rst:8" + ], + "matplotlib.color.is_colorlike()": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:204" + ], + "matplotlib.colorbar.ColorbarBase.set_clim": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:298" + ], + "matplotlib.colorbar.ColorbarBase.set_cmap": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:298" + ], + "matplotlib.colorbar.ColorbarBase.set_norm": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:298" + ], + "matplotlib.colors.same_color": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:218" + ], + "matplotlib.contour.TriContourSet": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.tricontour:57", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.tricontourf:57", + "lib/matplotlib/tri/tricontour.py:docstring of matplotlib.axes.Axes.tricontour:57", + "lib/matplotlib/tri/tricontour.py:docstring of matplotlib.axes.Axes.tricontourf:57" + ], + "matplotlib.contour._contour": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:13" + ], + "matplotlib.dates.rrulewrapper": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates:105" + ], + "matplotlib.docstring.dedent_interpd": [ + "doc/devel/documenting_mpl.rst:588" + ], + "matplotlib.extern": [ + "doc/devel/MEP/MEP11.rst:140" + ], + "matplotlib.extern.dateutil": [ + "doc/devel/MEP/MEP11.rst:140" + ], + "matplotlib.figure.savefig": [ + "lib/matplotlib/image.py:docstring of matplotlib.image.thumbnail:25" + ], + "matplotlib.image.Image": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.colorbar:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.colorbar:15" + ], + "matplotlib.image._png": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:14" + ], + "matplotlib.mathtext._png": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:15" + ], + "matplotlib.patches.Patch.__init__": [ + "doc/devel/documenting_mpl.rst:621" + ], + "matplotlib.patches.Wedge": [ + "doc/api/patches_api.rst:37::1" + ], + "matplotlib.pylab": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:626" + ], + "matplotlib.pyplot.get_scale_docs()": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:861" + ], + "matplotlib.sphinxext.mathmpl": [ + "doc/users/prev_whats_new/whats_new_3.0.rst:225" + ], + "matplotlib.spines.get_window_extent": [ + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.get_window_extent:24" + ], + "matplotlib.style.core.STYLE_BLACKLIST": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:298", + "lib/matplotlib/__init__.py:docstring of matplotlib.rc_file:4", + "lib/matplotlib/__init__.py:docstring of matplotlib.rc_file_defaults:4", + "lib/matplotlib/__init__.py:docstring of matplotlib.rcdefaults:4", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.rcdefaults:4" + ], + "matplotlib.testing.compare._png": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:16" + ], + "matplotlib.testing.compare.calculate_rms": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:779" + ], + "matplotlib.testing.conftest.mpl_test_settings": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:949" + ], + "matplotlib.texmanager._png": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:17" + ], + "matplotlib.text.TextPath": [ + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredDirectionArrows:145" + ], + "matplotlib.tri.triangulation._qhull": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:19" + ], + "matplotlib.tri.triangulation._tri": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:18" + ], + "matplotlib.tri.tricontour._tri": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:20" + ], + "matplotlib.tri.trifinder._tri": [ + "doc/api/prev_api_changes/api_changes_3.0.1.rst:21" + ], + "matplotlibrc": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:332", + "doc/users/prev_whats_new/whats_new_1.3.rst:385", + "doc/users/prev_whats_new/whats_new_2.2.rst:260", + "doc/users/prev_whats_new/whats_new_2.2.rst:263" + ], + "method(v, coords)": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.violin_stats:19" + ], + "min_n_ticks": [ + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.MaxNLocator:41", + "lib/mpl_toolkits/axisartist/grid_finder.py:docstring of mpl_toolkits.axisartist.grid_finder.MaxNLocator:21" + ], + "minor": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:141" + ], + "mlab.GaussianKDE": [ + "doc/users/prev_whats_new/changelog.rst:84" + ], + "mlab.detrend_none": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.acorr:13", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.xcorr:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.acorr:13", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.xcorr:19" + ], + "move_canvas": [ + "doc/devel/MEP/MEP23.rst:65" + ], + "mpl-data/sample_data": [ + "lib/matplotlib/cbook/__init__.py:docstring of matplotlib.cbook.get_sample_data:2" + ], + "mpl_toolkits.Axes.AxisDict": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:835" + ], + "mpl_toolkits.axes_grid.axes_divider.AxesLocator": [ + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.HBoxDivider.new_locator:2", + "lib/mpl_toolkits/axes_grid1/axes_divider.py:docstring of mpl_toolkits.axes_grid1.axes_divider.VBoxDivider.new_locator:2" + ], + "mpl_toolkits.axislines.Axes": [ + "lib/mpl_toolkits/axisartist/axis_artist.py:docstring of mpl_toolkits.axisartist.axis_artist:26" + ], + "mplot3d": [ + "doc/index.rst:145" + ], + "msi": [ + "doc/devel/MEP/MEP11.rst:167" + ], + "new_figure_manager": [ + "doc/devel/MEP/MEP23.rst:75" + ], + "new_figure_manager_given_figure": [ + "doc/devel/MEP/MEP23.rst:78", + "doc/devel/MEP/MEP23.rst:82" + ], + "next_api_changes": [ + "doc/api/next_api_changes/README.rst:6" + ], + "next_whats_new": [ + "doc/users/next_whats_new/README.rst:6" + ], + "node": [ + "doc/devel/MEP/MEP26.rst:184" + ], + "nose": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:581" + ], + "np.histogram": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.hist:80", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.hist:80" + ], + "number": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.figure:8" + ], + "numpy.datetime64": [ + "doc/api/prev_api_changes/api_changes_2.1.0.rst:95", + "doc/faq/howto_faq.rst:18", + "doc/faq/howto_faq.rst:21", + "doc/faq/howto_faq.rst:30", + "doc/gallery/recipes/common_date_problems.rst:34", + "doc/tutorials/text/text_intro.rst:565", + "doc/users/prev_whats_new/whats_new_2.2.rst:155", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.date2num:8" + ], + "numpy.max": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.hexbin:124", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.hexbin:124" + ], + "numpy.round": [ + "doc/api/prev_api_changes/api_changes_2.0.0.rst:33" + ], + "numticks": [ + "doc/users/dflt_style_changes.rst:1083" + ], + "onselect": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.PolygonSelector:20" + ], + "package_data": [ + "doc/devel/contributing.rst:387" + ], + "pandas.DataFame": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot:39", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:39" + ], + "patch.Patch": [ + "lib/matplotlib/transforms.py:docstring of matplotlib.transforms.TransformedPatchPath:2" + ], + "pgf": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:241" + ], + "pie": [ + "doc/users/prev_whats_new/changelog.rst:94" + ], + "pillow.Image.save()": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:131", + "doc/users/prev_whats_new/whats_new_3.1.0.rst:135" + ], + "pip": [ + "doc/devel/MEP/MEP11.rst:106", + "doc/devel/MEP/MEP11.rst:130", + "doc/devel/MEP/MEP11.rst:35", + "doc/devel/MEP/MEP11.rst:62", + "doc/devel/MEP/MEP11.rst:75", + "doc/users/prev_whats_new/whats_new_1.3.rst:374" + ], + "plot": [ + "doc/users/prev_whats_new/changelog.rst:232", + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:4" + ], + "plot('n', 'o', '', data=obj)": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot:104", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:104" + ], + "plot('n', 'o', data=obj)": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot:104", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:104" + ], + "plot_include_source": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:51" + ], + "plot_surface()": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:281" + ], + "plt(x, y)": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot:104", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:104" + ], + "plt(y, fmt)": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot:104", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:104" + ], + "plt.errorbar()": [ + "doc/users/prev_whats_new/whats_new_3.2.0.rst:92", + "doc/users/prev_whats_new/whats_new_3.2.0.rst:96" + ], + "print_xyz": [ + "lib/matplotlib/backends/backend_template.py:docstring of matplotlib.backends.backend_template:22" + ], + "prop_cycle": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:104" + ], + "pylab": [ + "doc/api/index.rst:63", + "doc/devel/MEP/MEP12.rst:13" + ], + "pylab_examples": [ + "doc/devel/MEP/MEP12.rst:13" + ], + "pyparsing": [ + "doc/devel/MEP/MEP11.rst:109", + "doc/devel/MEP/MEP11.rst:117", + "doc/devel/MEP/MEP11.rst:136", + "doc/devel/MEP/MEP11.rst:72", + "doc/devel/MEP/MEP11.rst:79", + "doc/users/prev_whats_new/whats_new_1.3.rst:374" + ], + "pyplot": [ + "doc/index.rst:44" + ], + "pyplot.figure": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:394" + ], + "pyplot.gcf()": [ + "lib/mpl_toolkits/axes_grid1/parasite_axes.py:docstring of mpl_toolkits.axes_grid1.parasite_axes.host_axes:8", + "lib/mpl_toolkits/axes_grid1/parasite_axes.py:docstring of mpl_toolkits.axes_grid1.parasite_axes.host_subplot:8" + ], + "pyplot.getp": [ + "doc/devel/documenting_mpl.rst:520" + ], + "pyplot.py": [ + "doc/devel/MEP/MEP12.rst:140" + ], + "pyplot.set_loglevel": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:377" + ], + "pyplot.setp": [ + "doc/users/prev_whats_new/whats_new_2.1.0.rst:377" + ], + "pyplot.tick_params": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:244" + ], + "pytest": [ + "doc/devel/testing.rst:50", + "doc/users/prev_whats_new/whats_new_2.1.0.rst:581" + ], + "pytest.mark.backend(...)": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:949" + ], + "pytest.mark.usefixtures": [ + "lib/matplotlib/testing/decorators.py:docstring of matplotlib.testing.decorators.image_comparison:13" + ], + "pytz": [ + "doc/devel/MEP/MEP11.rst:109", + "doc/devel/MEP/MEP11.rst:136", + "doc/devel/MEP/MEP11.rst:67", + "doc/devel/MEP/MEP11.rst:84", + "doc/devel/MEP/MEP11.rst:90", + "doc/users/prev_whats_new/whats_new_1.3.rst:374" + ], + "quiverkey": [ + "lib/matplotlib/quiver.py:docstring of matplotlib.quiver.Quiver:247" + ], + "r": [ + "doc/devel/MEP/MEP24.rst:28" + ], + "r==0": [ + "doc/devel/MEP/MEP24.rst:28" + ], + "range(1, N+1)": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.boxplot:90", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.boxplot:90" + ], + "range(len(y))": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot:79", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot:79" + ], + "raw data": [ + "doc/devel/MEP/MEP25.rst:70" + ], + "rcParams": [ + "doc/devel/MEP/MEP14.rst:110", + "doc/users/prev_whats_new/whats_new_2.2.rst:244" + ], + "rcParams['backend.multifigure'] =\nTrue": [ + "doc/devel/MEP/MEP23.rst:99" + ], + "rcParams['backend.multifigure'] = True": [ + "doc/devel/MEP/MEP23.rst:111" + ], + "rcParams['backend.multifigure'] == True": [ + "doc/devel/MEP/MEP23.rst:87" + ], + "rc_file": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:295", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:298" + ], + "rc_file_defaults": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:295", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:298", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.rcdefaults:18" + ], + "rcdefaults": [ + "doc/api/prev_api_changes/api_changes_3.0.0.rst:295", + "doc/api/prev_api_changes/api_changes_3.0.0.rst:298" + ], + "rcount": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:281", + "doc/users/prev_whats_new/whats_new_2.0.0.rst:284" + ], + "rcsetup.validate_animation_writer_path": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "rcsetup.validate_hatch": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "rcsetup.validate_toolbar": [ + "doc/devel/MEP/MEP22.rst:183" + ], + "remove_canvas": [ + "doc/devel/MEP/MEP23.rst:63" + ], + "rrulewrapper": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates:105" + ], + "rstride": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:291" + ], + "savefig": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:282", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.AbstractMovieWriter.grab_frame:4", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.Animation.save:52", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.FileMovieWriter.grab_frame:2", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.MovieWriter.grab_frame:4", + "lib/matplotlib/animation.py:docstring of matplotlib.animation.PillowWriter.grab_frame:4" + ], + "savefig()": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:587" + ], + "savefig.directory": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:332" + ], + "scale": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "scatter.marker": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:59" + ], + "scipy.stats.norm.pdf": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:573", + "doc/api/prev_api_changes/api_changes_3.1.0.rst:659" + ], + "self._priv_update": [ + "doc/users/prev_whats_new/changelog.rst:137", + "doc/users/prev_whats_new/changelog.rst:97" + ], + "self.codes": [ + "lib/matplotlib/path.py:docstring of matplotlib.path.Path.codes:2" + ], + "self.decimals": [ + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.PercentFormatter.format_pct:5" + ], + "self.trigger_tool(name)": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase.add_toolitem:6" + ], + "self.vertices": [ + "lib/matplotlib/path.py:docstring of matplotlib.path.Path.codes:2" + ], + "set_": [ + "doc/devel/MEP/MEP26.rst:36" + ], + "set_active_canvas": [ + "doc/devel/MEP/MEP23.rst:70" + ], + "set_canvas_title": [ + "doc/devel/MEP/MEP23.rst:66" + ], + "set_contains": [ + "lib/matplotlib/legend.py:docstring of matplotlib.legend.Legend.contains:29", + "lib/matplotlib/offsetbox.py:docstring of matplotlib.offsetbox.AnnotationBbox.contains:29", + "lib/matplotlib/quiver.py:docstring of matplotlib.quiver.QuiverKey.contains:29", + "lib/matplotlib/table.py:docstring of matplotlib.table.Table.contains:29" + ], + "set_size": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:223" + ], + "set_xbound": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_xlim3d:22" + ], + "set_ybound": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_ylim3d:22" + ], + "set_ylim": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:230" + ], + "setup.cfg.template": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:374" + ], + "setup.py": [ + "doc/devel/MEP/MEP11.rst:64", + "doc/devel/MEP/MEP11.rst:67", + "doc/devel/contributing.rst:387" + ], + "setuptools": [ + "doc/devel/MEP/MEP11.rst:35" + ], + "shade": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.Axes3D.plot_surface:54", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.plot_surface:54" + ], + "shadow_rgbFace": [ + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.SimpleLineShadow:40", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.SimplePatchShadow:39", + "lib/matplotlib/patheffects.py:docstring of matplotlib.patheffects.withSimplePatchShadow:40" + ], + "sharex": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.subplots:13", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.subplots:13" + ], + "sharey": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.subplots:13", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.subplots:13" + ], + "show": [ + "doc/devel/MEP/MEP23.rst:70" + ], + "six": [ + "doc/devel/MEP/MEP11.rst:117", + "doc/devel/MEP/MEP11.rst:136", + "doc/devel/MEP/MEP11.rst:67", + "doc/devel/MEP/MEP11.rst:84", + "doc/devel/MEP/MEP11.rst:90", + "doc/users/prev_whats_new/whats_new_1.3.rst:374" + ], + "size_vertical": [ + "lib/mpl_toolkits/axes_grid1/anchored_artists.py:docstring of mpl_toolkits.axes_grid1.anchored_artists.AnchoredSizeBar:64" + ], + "skew": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:157" + ], + "skew_deg": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:157" + ], + "slidermax": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.Slider:63" + ], + "slidermin": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.Slider:59" + ], + "span_selector.active=False": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.SpanSelector:7" + ], + "span_selector.active=True": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.SpanSelector:7" + ], + "sphinx-autogen": [ + "doc/devel/MEP/MEP10.rst:162" + ], + "sphinx-quickstart": [ + "doc/devel/MEP/MEP10.rst:170" + ], + "spine.Spine.is_frame_like": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:823" + ], + "spines.Spine": [ + "doc/api/prev_api_changes/api_changes_3.2.0/behavior.rst:293" + ], + "spy": [ + "doc/users/prev_whats_new/changelog.rst:126" + ], + "stacked": [ + "doc/users/prev_whats_new/whats_new_1.2.rst:177" + ], + "stacked=True": [ + "doc/users/prev_whats_new/whats_new_1.2.rst:177" + ], + "step": [ + "doc/users/prev_whats_new/changelog.rst:232" + ], + "str()": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:386" + ], + "str.format()": [ + "lib/matplotlib/ticker.py:docstring of matplotlib.ticker.StrMethodFormatter:2" + ], + "streamplot.Grid": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:487" + ], + "strftime": [ + "lib/matplotlib/dates.py:docstring of matplotlib.dates.ConciseDateFormatter:18", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.DateFormatter:2", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.DateFormatter:28", + "lib/matplotlib/dates.py:docstring of matplotlib.dates:129" + ], + "style.available": [ + "lib/matplotlib/style/__init__.py:docstring of matplotlib.style.context:12", + "lib/matplotlib/style/__init__.py:docstring of matplotlib.style.use:14" + ], + "subplot(1,1,1)": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:178" + ], + "subplot(111)": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:178" + ], + "svg": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:241", + "doc/users/prev_whats_new/whats_new_1.4.rst:391" + ], + "svg.hashsalt": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:61" + ], + "texmanager.TexManager": [ + "lib/matplotlib/textpath.py:docstring of matplotlib.textpath.TextToPath.get_texmanager:2" + ], + "text": [ + "doc/devel/MEP/MEP29.rst:28" + ], + "text.usetex": [ + "lib/matplotlib/font_manager.py:docstring of matplotlib.font_manager.FontProperties.set_family:2", + "lib/matplotlib/font_manager.py:docstring of matplotlib.font_manager.FontProperties.set_name:2" + ], + "ticker..MaxNLocator": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:1156" + ], + "ticker.decade_down": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:847" + ], + "ticker.decade_up": [ + "doc/api/prev_api_changes/api_changes_3.1.0.rst:846" + ], + "tight_bbox.adjust_bbox": [ + "doc/api/prev_api_changes/api_changes_1.4.x.rst:152" + ], + "tight_bbox.process_figure_for_rasterizing": [ + "doc/api/prev_api_changes/api_changes_1.4.x.rst:152" + ], + "to_html5_video": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:727" + ], + "toggled": [ + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.AxisScaleBase.disable:4", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.AxisScaleBase.enable:4", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.AxisScaleBase.trigger:2", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolFullScreen.disable:4", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolFullScreen.enable:4", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ZoomPanBase.trigger:2" + ], + "tool_added_event": [ + "doc/devel/MEP/MEP22.rst:171" + ], + "tool_removed_event": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.ToolContainerBase.remove_toolitem:6" + ], + "toolbar": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:228", + "doc/users/prev_whats_new/whats_new_1.5.rst:614" + ], + "tox": [ + "doc/devel/coding_guide.rst:101" + ], + "tricontour(...)": [ + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.tricontour:57", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.tricontourf:57", + "lib/matplotlib/tri/tricontour.py:docstring of matplotlib.axes.Axes.tricontour:57", + "lib/matplotlib/tri/tricontour.py:docstring of matplotlib.axes.Axes.tricontourf:57" + ], + "trigger": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:614", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolFullScreen.disable:4", + "lib/matplotlib/backend_tools.py:docstring of matplotlib.backend_tools.ToolFullScreen.enable:4" + ], + "triplot": [ + "doc/users/prev_whats_new/changelog.rst:141" + ], + "tzinfo": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.plot_date:21", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.xaxis_date:21", + "lib/matplotlib/axes/_base.py:docstring of matplotlib.axes.Axes.yaxis_date:21", + "lib/matplotlib/dates.py:docstring of matplotlib.dates.DateFormatter:44", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.plot_date:21" + ], + "units.AxisInfo": [ + "lib/matplotlib/units.py:docstring of matplotlib.units.ConversionInterface.axisinfo:2", + "lib/matplotlib/units.py:docstring of matplotlib.units.DecimalConverter.axisinfo:2" + ], + "useMathText": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:260" + ], + "useOffset": [ + "doc/users/prev_whats_new/whats_new_1.4.rst:293" + ], + "usetex": [ + "doc/users/prev_whats_new/whats_new_3.1.0.rst:260" + ], + "v2.2.x": [ + "doc/devel/coding_guide.rst:216" + ], + "valstep": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.Slider:70" + ], + "value": [ + "doc/devel/MEP/MEP26.rst:119" + ], + "vertex_select_radius": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.PolygonSelector:38" + ], + "visit_": [ + "doc/devel/MEP/MEP26.rst:184" + ], + "w_pad": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.set_constrained_layout:5" + ], + "w_pad, h_pad": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.get_constrained_layout_pads:4" + ], + "waitforbuttonpress": [ + "lib/matplotlib/backend_bases.py:docstring of matplotlib.backend_bases.FigureCanvasBase.start_event_loop:4", + "lib/matplotlib/blocking_input.py:docstring of matplotlib.blocking_input:9" + ], + "warn": [ + "doc/devel/contributing.rst:542" + ], + "whats_new.rst": [ + "doc/users/next_whats_new/README.rst:6" + ], + "widgets.LockDraw": [ + "lib/matplotlib/backend_managers.py:docstring of matplotlib.backend_managers.ToolManager:24", + "lib/matplotlib/backend_managers.py:docstring of matplotlib.backend_managers.ToolManager:28" + ], + "width": [ + "lib/matplotlib/sphinxext/plot_directive.py:docstring of matplotlib.sphinxext.plot_directive:72" + ], + "window_hanning": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.angle_spectrum:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.cohere:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.csd:27", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.magnitude_spectrum:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.phase_spectrum:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.psd:25", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.specgram:22", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.angle_spectrum:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.cohere:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.csd:27", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.magnitude_spectrum:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.phase_spectrum:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.psd:25", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.specgram:22" + ], + "window_none": [ + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.angle_spectrum:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.cohere:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.csd:27", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.magnitude_spectrum:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.phase_spectrum:19", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.psd:25", + "lib/matplotlib/axes/_axes.py:docstring of matplotlib.axes.Axes.specgram:22", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.angle_spectrum:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.cohere:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.csd:27", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.magnitude_spectrum:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.phase_spectrum:19", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.psd:25", + "lib/matplotlib/pyplot.py:docstring of matplotlib.pyplot.specgram:22" + ], + "wspace": [ + "lib/matplotlib/figure.py:docstring of matplotlib.figure.Figure.get_constrained_layout_pads:4" + ], + "xaxis_inverted": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_xlim3d:24" + ], + "xkcd": [ + "doc/users/prev_whats_new/whats_new_1.3.rst:84" + ], + "xlim": [ + "doc/devel/MEP/MEP15.rst:21", + "doc/devel/MEP/MEP15.rst:28" + ], + "xtick.bottom": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "xtick.labelbottom": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:263" + ], + "xtick.labeltop": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:263" + ], + "xtick.major.bottom": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "xtick.major.top": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "xtick.minor.bottom": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "xtick.minor.top": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "xtick.top": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "xy": [ + "lib/matplotlib/widgets.py:docstring of matplotlib.widgets.Lasso:7" + ], + "yaxis_inverted": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.get_ylim3d:24" + ], + "ylim": [ + "doc/devel/MEP/MEP15.rst:21", + "doc/devel/MEP/MEP15.rst:28" + ], + "yscale/grid/quit/....": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:607" + ], + "ytick.labelleft": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:263" + ], + "ytick.labelright": [ + "doc/users/prev_whats_new/whats_new_2.2.rst:263" + ], + "ytick.left": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "ytick.major.left": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "ytick.major.right": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "ytick.minor.left": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "ytick.minor.right": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "ytick.right": [ + "doc/users/prev_whats_new/whats_new_2.0.0.rst:63" + ], + "zdir": [ + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.Axes3D.text:2", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.text3D:2", + "lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.text:2" + ], + "zip()": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:96" + ], + "zoom/pan/home/save/...": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:607" + ], + "{'Creator': 'My software', 'Author': 'Me',\n'Title': 'Awesome fig'}": [ + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.PdfFile:31", + "lib/matplotlib/backends/backend_pdf.py:docstring of matplotlib.backends.backend_pdf.PdfPages:52", + "lib/matplotlib/backends/backend_pgf.py:docstring of matplotlib.backends.backend_pgf.PdfPages:46" + ], + "{x,y}axis.labelpad": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:198" + ], + "{x,y}tick.minor.visible": [ + "doc/users/prev_whats_new/whats_new_1.5.rst:204" + ] + }, + "std:envvar": { + "CC": [ + "INSTALL.rst:93", + "doc/users/prev_whats_new/whats_new_1.5.rst:737" + ], + "CXX": [ + "INSTALL.rst:93", + "doc/users/prev_whats_new/whats_new_1.5.rst:737" + ], + "PKG_CONFIG": [ + "INSTALL.rst:93", + "doc/users/prev_whats_new/whats_new_1.5.rst:737" + ] + } +} \ No newline at end of file diff --git a/doc/sphinxext/missing_references.py b/doc/sphinxext/missing_references.py new file mode 100644 index 000000000000..5d29fb9e5198 --- /dev/null +++ b/doc/sphinxext/missing_references.py @@ -0,0 +1,296 @@ +""" +This is a sphinx extension to freeze your broken reference problems +when using ``nitpicky = True``. + +The basic operation is: + +1. Add this extension to your ``conf.py`` extensions. +2. Add ``missing_references_write_json = True`` to your ``conf.py`` +3. Run sphinx-build. It will generate ``missing-references.json`` + next to your ``conf.py``. +4. Remove ``missing_references_write_json = True`` from your + ``conf.py`` (or set it to ``False``) +5. Run sphinx-build again, and ``nitpick_ignore`` will + contain all of the previously failed references. + +""" + +from collections import defaultdict +import json +import logging +from pathlib import Path, PosixPath + +from docutils.utils import get_source_line +from docutils import nodes +from sphinx.util import logging as sphinx_logging + +import matplotlib + +logger = sphinx_logging.getLogger(__name__) + + +class MissingReferenceFilter(logging.Filter): + """ + A logging filter designed to record missing reference warning messages + for use by this extension + """ + def __init__(self, app): + self.app = app + super().__init__() + + def _record_reference(self, record): + if not (getattr(record, 'type', '') == 'ref' and + isinstance(getattr(record, 'location', None), nodes.Node)): + return + + if not hasattr(self.app.env, "missing_references_warnings"): + self.app.env.missing_references_warnings = defaultdict(set) + + record_missing_reference(self.app, + self.app.env.missing_references_warnings, + record.location) + + def filter(self, record): + self._record_reference(record) + return True + + +def record_missing_reference(app, record, node): + domain = node["refdomain"] + typ = node["reftype"] + target = node["reftarget"] + location = get_location(node, app) + + domain_type = "{}:{}".format(domain, typ) + + record[(domain_type, target)].add(location) + + +def record_missing_reference_handler(app, env, node, contnode): + """ + When the sphinx app notices a missing reference, it emits an + event which calls this function. This function records the missing + references for analysis at the end of the sphinx build. + """ + if not app.config.missing_references_enabled: + # no-op when we are disabled. + return + + if not hasattr(env, "missing_references_events"): + env.missing_references_events = defaultdict(set) + + record_missing_reference(app, env.missing_references_events, node) + + +def get_location(node, app): + """ + Given a docutils node and a sphinx application, return a string + representation of the source location of this node. + + Usually, this will be of the form "path/to/file:linenumber". Two + special values can be emitted, "" for paths which are + not contained in this source tree (e.g. docstrings included from + other modules) or "", inidcating that the sphinx application + cannot locate the original source file (usually because an extension + has injected text into the sphinx parsing engine). + """ + source, line = get_source_line(node) + + if source: + # 'source' can have the form '/some/path:docstring of some.api' but the + # colons are forbidden on windows, but on posix just passes through. + path, *post = source.partition(':') + post = ''.join(post) + # We locate references relative to the parent of the doc + # directory, which for matplotlib, will be the root of the + # matplotlib repo. When matplotlib is not an editable install + # weird things will happen, but we can't totally recover from + # that. + basepath = Path(app.srcdir).parent.resolve() + + fullpath = Path(path).resolve() + + try: + path = fullpath.relative_to(basepath) + except ValueError: + # Sometimes docs directly contain e.g. docstrings + # from installed modules, and we record those as + # so as to be independent of where the + # module was installed + path = Path("") / fullpath.name + + # Ensure that all reported paths are POSIX so that docs + # on windows result in the same warnings in the JSON file. + path = path.as_posix() + + else: + path = "" + post = '' + if not line: + line = "" + + return f"{path}{post}:{line}" + + +def _truncate_location(location): + """ + Cuts off anything after the first colon in location strings. + + This allows for easy comparison even when line numbers chagne + (as they do regularily). + """ + if ":" in location: + return location.split(":", 1)[0] + return location + + +def _warn_unused_missing_references(app): + if not app.config.missing_references_warn_unused_ignores: + return + + # We can only warn if we are building from a source install + # otherwise, we just have to skip this step. + basepath = Path(matplotlib.__file__).parent.parent.parent.resolve() + srcpath = Path(app.srcdir).parent.resolve() + + if basepath != srcpath: + return + + # This is a dictionary of {(domain_type, target): locations} + references_ignored = getattr(app.env, + 'missing_references_ignored_references', {}) + references_events = getattr(app.env, 'missing_references_events', {}) + + # Warn about any reference which is no longer missing. + for (domain_type, target), locations in references_ignored.items(): + missing_reference_locations = [_truncate_location(location) + for location in references_events.get((domain_type, target), [])] + + # For each ignored reference location, ensure a missing reference + # was observed. If it wasn't observed, issue a warning. + for ignored_reference_location in locations: + short_location = _truncate_location(ignored_reference_location) + if short_location not in missing_reference_locations: + msg = (f"Reference {domain_type} {target} for " + f"{ignored_reference_location} can be removed" + f" from {app.config.missing_references_filename}." + "It is no longer a missing reference in the docs.") + logger.warning(msg, + location=ignored_reference_location, + type='ref', + subtype=domain_type) + + +def save_missing_references_handler(app, exc): + """ + At the end of the sphinx build, check that all lines of the existing JSON + file are still necessary. + + If the configuration value ``missing_references_write_json`` is set + then write a new JSON file containing missing references. + """ + if not app.config.missing_references_enabled: + # no-op when we are disabled. + return + + _warn_unused_missing_references(app) + + json_path = (Path(app.confdir) / + app.config.missing_references_filename) + + references_warnings = getattr(app.env, 'missing_references_warnings', {}) + + if app.config.missing_references_write_json: + _write_missing_references_json(references_warnings, json_path) + + +def _write_missing_references_json(records, json_path): + """ + Convert ignored references to a format which we can write as JSON + + Convert from ``{(domain_type, target): locations}`` to + ``{domain_type: {target: locations}}`` since JSON can't serialize tuples. + """ + # Sorting records and keys avoids needlessly big diffs when + # missing_references.json is regenerated. + transformed_records = defaultdict(dict) + for (domain_type, target), paths in records.items(): + transformed_records[domain_type][target] = sorted(paths) + with json_path.open("w") as stream: + json.dump(transformed_records, stream, sort_keys=True, indent=2) + + +def _read_missing_references_json(json_path): + """ + Convert from the JSON file to the form used internally by this + extension. + + The JSON file is stored as ``{domain_type: {target: [locations,]}}`` + since JSON can't store dictionary keys which are tuples. We convert + this back to ``{(domain_type, target):[locations]}`` for internal use. + + """ + with json_path.open("r") as stream: + data = json.load(stream) + + ignored_references = {} + for domain_type, targets in data.items(): + for target, locations in targets.items(): + ignored_references[(domain_type, target)] = locations + return ignored_references + + +def prepare_missing_references_handler(app): + """ + Handler called to initialize this extension once the configuration + is ready. + + Reads the missing references file and populates ``nitpick_ignore`` if + appropriate. + """ + if not app.config.missing_references_enabled: + # no-op when we are disabled. + return + + sphinx_logger = logging.getLogger('sphinx') + missing_reference_filter = MissingReferenceFilter(app) + for handler in sphinx_logger.handlers[:]: + if (isinstance(handler, sphinx_logging.WarningStreamHandler) + and missing_reference_filter not in handler.filters): + + # This *must* be the first filter, because subsequent filters + # throw away the node information and then we can't identify + # the reference uniquely. + handler.filters.insert(0, missing_reference_filter) + + app.env.missing_references_ignored_references = {} + + json_path = (Path(app.confdir) / + app.config.missing_references_filename) + if not json_path.exists(): + return + + ignored_references = _read_missing_references_json(json_path) + + app.env.missing_references_ignored_references = ignored_references + + # If we are going to re-write the JSON file, then don't suppress missing + # reference warnings. We want to record a full list of missing references + # for use later. Otherwise, add all known missing references to + # ``nitpick_ignore``` + if not app.config.missing_references_write_json: + app.config.nitpick_ignore.extend(ignored_references.keys()) + + +def setup(app): + app.add_config_value("missing_references_enabled", True, "env") + app.add_config_value("missing_references_write_json", False, "env") + app.add_config_value("missing_references_warn_unused_ignores", True, "env") + app.add_config_value("missing_references_filename", + "missing-references.json", "env") + + app.connect("builder-inited", prepare_missing_references_handler) + app.connect("missing-reference", record_missing_reference_handler) + app.connect("build-finished", save_missing_references_handler) + + return {'parallel_read_safe': True} diff --git a/doc/users/prev_whats_new/github_stats_3.0.2.rst b/doc/users/prev_whats_new/github_stats_3.0.2.rst new file mode 100644 index 000000000000..516545f2d5f9 --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.0.2.rst @@ -0,0 +1,464 @@ +.. _github-stats-3-0-2: + +GitHub Stats for Matplotlib 3.0.2 +================================= + +GitHub stats for 2018/09/18 - 2018/11/09 (tag: v3.0.0) + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 170 issues and merged 224 pull requests. + +The following 49 authors contributed 460 commits. + +* Abhinuv Nitin Pitale +* Alon Hershenhorn +* Andras Deak +* Ankur Dedania +* Antony Lee +* Anubhav Shrimal +* Ayappan P +* azure-pipelines[bot] +* Ben Root +* Colin +* Colin Carroll +* Daniele Nicolodi +* David HaberthУМr +* David Stansby +* Dmitry Mottl +* Elan Ernest +* Elliott Sales de Andrade +* Eric Wieser +* esvhd +* Galen Lynch +* hannah +* Ildar Akhmetgaleev +* ImportanceOfBeingErnest +* Jody Klymak +* Joel Wanner +* Kai Muehlbauer +* Kevin Rose +* Kyle Sunden +* Marcel Martin +* Matthias Bussonnier +* MeeseeksMachine +* Michael Jancsy +* Nelle Varoquaux +* Nick Papior +* Nikita Kniazev +* Paul Hobson +* pharshalp +* Rasmus Diederichsen +* Ryan May +* saksmito +* Takafumi Arakaki +* teresy +* Thomas A Caswell +* thoo +* Tim Hoffmann +* Tobias Megies +* Tyler Makaro +* Will Handley +* Yuxin Wu + +GitHub issues and pull requests: + +Pull Requests (224): + +* :ghpull:`12785`: Use level kwargs in irregular contour example +* :ghpull:`12767`: Make colorbars constructible with dataless ScalarMappables. +* :ghpull:`12775`: Add note to errorbar function about sign of errors +* :ghpull:`12776`: Fix typo in example (on-borad -> on-board). +* :ghpull:`12771`: Do not rely on external stack frame to exist +* :ghpull:`12526`: Rename jquery files +* :ghpull:`12552`: Update docs for writing image comparison tests. +* :ghpull:`12746`: Use skipif, not xfail, for uncomparable image formats. +* :ghpull:`12747`: Prefer log.warning("%s", ...) to log.warning("%s" % ...). +* :ghpull:`11753`: FIX: Apply aspect before drawing starts +* :ghpull:`12749`: Move toolmanager warning from logging to warning. +* :ghpull:`12708`: Run flake8 in a separate travis environment +* :ghpull:`12737`: Improve docstring of Arc +* :ghpull:`12598`: Support Cn colors with n>=10. +* :ghpull:`12670`: FIX: add setter for hold to un-break basemap +* :ghpull:`12693`: Workaround Text3D breaking tight_layout() +* :ghpull:`12727`: Reorder API docs: separate file per module +* :ghpull:`12738`: Add unobtrusive depreaction note to the first line of the docstring. +* :ghpull:`12740`: DOC: constrained layout guide (fix: Spacing with colorbars) +* :ghpull:`11663`: Refactor color parsing of Axes.scatter +* :ghpull:`12736`: Move deprecation note to end of docstring +* :ghpull:`12704`: Rename tkinter import from Tk to tk. +* :ghpull:`12730`: MNT: merge ignore lines in .flake8 +* :ghpull:`12707`: Fix tk error when closing first pyplot figure +* :ghpull:`12715`: Cleanup dviread. +* :ghpull:`12717`: Delete some ``if __name__ == "__main__"`` clauses. +* :ghpull:`12726`: Fix test_non_gui_warning for Azure (and mplcairo). +* :ghpull:`12720`: Improve docs on Axes scales +* :ghpull:`12537`: Improve error message on failing test_pyplot_up_to_date +* :ghpull:`12721`: Make get_scale_docs() internal +* :ghpull:`12617`: Set up CI with Azure Pipelines +* :ghpull:`12673`: Fix for _axes.scatter() array index out of bound error +* :ghpull:`12676`: Doc: document textpath module +* :ghpull:`12705`: Improve docs on Axes limits and direction +* :ghpull:`12706`: Extend sphinx Makefile to cleanup completely +* :ghpull:`12481`: Warn if plot_surface Z values contain NaN +* :ghpull:`12709`: Correctly remove nans when drawing paths with pycairo. +* :ghpull:`12685`: Make ticks in demo_axes_rgb.py visible +* :ghpull:`12691`: DOC: Link to "How to make a PR" tutorials as badge and in contributing +* :ghpull:`12684`: Change ipython block to code-block +* :ghpull:`11974`: Make code match comment in sankey. +* :ghpull:`12440`: Make arguments to @deprecated/warn_deprecated keyword-only. +* :ghpull:`12683`: TST: mark test_constrainedlayout.py::test_colorbar_location as flaky +* :ghpull:`12686`: Remove deprecation warnings in tests +* :ghpull:`12470`: Update AutoDateFormatter with locator +* :ghpull:`12656`: FIX: fix error in colorbar.get_ticks not having valid data +* :ghpull:`12586`: Improve linestyles example +* :ghpull:`12006`: Added stacklevel=2 to all warnings.warn calls (issue 10643) +* :ghpull:`12651`: FIX: ignore non-finite bbox +* :ghpull:`12653`: Don't warn when accessing deprecated properties from the class. +* :ghpull:`12608`: ENH: allow matplotlib.use after getbackend +* :ghpull:`12658`: Do not warn-depreacted when iterating over rcParams +* :ghpull:`12635`: FIX: allow non bbox_extra_artists calls +* :ghpull:`12659`: Add note that developer discussions are private +* :ghpull:`12543`: Make rcsetup.py flak8 compliant +* :ghpull:`12642`: Don't silence TypeErrors in fmt_{x,y}data. +* :ghpull:`11667`: DOC: update doc requirement +* :ghpull:`12442`: Deprecate passing drawstyle with linestyle as single string. +* :ghpull:`12625`: Shorten some docstrings. +* :ghpull:`12627`: Be a bit more stringent on invalid inputs. +* :ghpull:`12561`: Properly css-style exceptions in the documentation +* :ghpull:`12629`: Fix issue with PyPy on macOS +* :ghpull:`10933`: Remove "experimental" fontconfig font_manager backend. +* :ghpull:`12630`: Fix RcParams.__len__ +* :ghpull:`12285`: FIX: Don't apply tight_layout if axes collapse +* :ghpull:`12548`: undef _XOPEN_SOURCE breaks the build in AIX +* :ghpull:`12615`: Fix travis OSX build +* :ghpull:`12600`: Minor style fixes. +* :ghpull:`12607`: STY: fix whitespace and escaping +* :ghpull:`12603`: FIX: don't import macosx to check if eventloop running +* :ghpull:`12599`: Fix formatting of docstring +* :ghpull:`12569`: Don't confuse uintptr_t and Py_ssize_t. +* :ghpull:`12572`: Fix singleton hist labels +* :ghpull:`12581`: Fix hist() error message +* :ghpull:`12570`: Fix mathtext tutorial for build with Sphinx 1.8. +* :ghpull:`12487`: Update docs/tests for the deprecation of aname and label1On/label2On/etc. +* :ghpull:`12521`: Improve docstring of draw_idle() +* :ghpull:`12573`: BUG: mplot3d: Don't crash if azim or elev are non-integral +* :ghpull:`12574`: Remove some unused imports +* :ghpull:`12568`: Add note regarding builds of old Matplotlibs. +* :ghpull:`12555`: Clarify horizontalalignment and verticalalignment in suptitle +* :ghpull:`12547`: Disable sticky edge accumulation if no autoscaling. +* :ghpull:`12546`: Avoid quadratic behavior when accumulating stickies. +* :ghpull:`12159`: FIX: colorbar re-check norm before draw for autolabels +* :ghpull:`12501`: Rectified plot error +* :ghpull:`11789`: endless looping GIFs with PillowWriter +* :ghpull:`12525`: Fix some flake8 issues +* :ghpull:`12431`: FIX: allow single-string color for scatter +* :ghpull:`12216`: Doc: Fix search for sphinx >=1.8 +* :ghpull:`12461`: FIX: make add_lines work with new colorbar +* :ghpull:`12241`: FIX: make unused spines invisible +* :ghpull:`12516`: Don't handle impossible values for ``align`` in hist() +* :ghpull:`12504`: DOC: clarify min supported version wording +* :ghpull:`12507`: FIX: make minor ticks formatted with science formatter as well +* :ghpull:`12500`: Adjust the widths of the messages during the build. +* :ghpull:`12492`: Simplify radar_chart example. +* :ghpull:`12478`: MAINT: numpy deprecates asscalar in 1.16 +* :ghpull:`12363`: FIX: errors in get_position changes +* :ghpull:`12495`: Fix duplicate condition in pathpatch3d example +* :ghpull:`11984`: Strip out pkg-config machinery for agg and libqhull. +* :ghpull:`12463`: Document Artist.cursor_data() parameter +* :ghpull:`12489`: Fix typo in documentation of ylim +* :ghpull:`12482`: Test slider orientation +* :ghpull:`12317`: Always install mpl_toolkits. +* :ghpull:`12246`: Be less tolerant of broken installs. +* :ghpull:`12477`: Use \N{MICRO SIGN} instead of \N{GREEK SMALL LETTER MU} in EngFormatter. +* :ghpull:`12483`: Kill FontManager.update_fonts. +* :ghpull:`12448`: Don't error if some font directories are not readable. +* :ghpull:`12474`: Throw ValueError when irregularly gridded data is passed to streamplot. +* :ghpull:`12469`: Clarify documentation of offsetbox.AnchoredText's prop kw argument +* :ghpull:`12468`: Fix ``set_ylim`` unit handling +* :ghpull:`12466`: np.fromstring -> np.frombuffer. +* :ghpull:`12369`: Improved exception handling on animation failure +* :ghpull:`12460`: Deprecate RendererBase.strip_math. +* :ghpull:`12457`: Fix tutorial typos. +* :ghpull:`12453`: Rollback erronous commit to whats_new.rst from #10746 +* :ghpull:`12452`: Minor updates to the FAQ. +* :ghpull:`10746`: Adjusted matplotlib.widgets.Slider to have optional vertical orientatation +* :ghpull:`12441`: Get rid of a signed-compare warning. +* :ghpull:`12430`: Deprecate Axes3D.plot_surface(shade=None) +* :ghpull:`12435`: Fix numpydoc parameter formatting +* :ghpull:`12434`: Clarify documentation for textprops keyword parameter of TextArea +* :ghpull:`12427`: Document Artist.get_cursor_data +* :ghpull:`12277`: FIX: datetime64 now recognized if in a list +* :ghpull:`10322`: Use np.hypot whereever possible. +* :ghpull:`12423`: Minor simplifications to backend_svg. +* :ghpull:`12293`: Make pyplot more tolerant wrt. 3rd-party subclasses. +* :ghpull:`12360`: Replace axes_grid by axes_grid1 in test +* :ghpull:`10356`: fix detecting which artist(s) the mouse is over +* :ghpull:`12416`: Move font cache rebuild out of exception handler +* :ghpull:`11891`: Group some print()s in backend_ps. +* :ghpull:`12165`: Remove deprecated mlab code +* :ghpull:`12394`: DOC: fix CL tutorial to give same output from saved file and example +* :ghpull:`12387`: Update HTML animation as slider is dragged +* :ghpull:`12408`: Don't crash on invalid registry font entries on Windows. +* :ghpull:`10088`: Deprecate Tick.{gridOn,tick1On,label1On,...} in favor of set_visible. +* :ghpull:`12149`: Mathtext tutorial fixes +* :ghpull:`12393`: Deprecate to-days converters in matplotlib dates +* :ghpull:`12257`: Document standard backends in matplotlib.use() +* :ghpull:`12383`: Revert change of parameter name in annotate() +* :ghpull:`12385`: CI: Added Appveyor Python 3.7 build +* :ghpull:`12247`: Machinery for deprecating properties. +* :ghpull:`12371`: Move check for ImageMagick Windows path to bin_path(). +* :ghpull:`12384`: Cleanup axislines style. +* :ghpull:`12353`: Doc: clarify default parameters in scatter docs +* :ghpull:`12366`: TST: Update test images for new Ghostscript. +* :ghpull:`11648`: FIX: colorbar placement in constrained layout +* :ghpull:`12368`: Don't use stdlib private API in animation.py. +* :ghpull:`12351`: dviread: find_tex_file: Ensure the encoding on windows +* :ghpull:`12244`: Merge barchart examples. +* :ghpull:`12372`: Remove two examples. +* :ghpull:`12214`: Improve docstring of Annoation +* :ghpull:`12347`: DOC: add_child_axes to axes_api.rst +* :ghpull:`12304`: TST: Merge Qt tests into one file. +* :ghpull:`12321`: maint: setupext.py for freetype had a Catch case for missing ft2build.h +* :ghpull:`12340`: Catch test deprecation warnings for mlab.demean +* :ghpull:`12334`: Improve selection of inset indicator connectors. +* :ghpull:`12316`: Fix some warnings from Travis +* :ghpull:`12268`: FIX: remove unnecessary ``self`` in ``super_``-calls, fixes #12265 +* :ghpull:`12212`: font_manager: Fixed problems with Path(...).suffix +* :ghpull:`12326`: fixed minor spelling error in docstring +* :ghpull:`12296`: Make FooConverter inherit from ConversionInterface in examples +* :ghpull:`12322`: Fix the docs build. +* :ghpull:`12319`: Fix Travis 3.6 builds +* :ghpull:`12309`: Deduplicate implementations of FooNorm.autoscale{,_None} +* :ghpull:`12314`: Deprecate ``axis('normal')`` in favor of ``axis('auto')``. +* :ghpull:`12313`: BUG: Fix typo in view_limits() for MultipleLocator +* :ghpull:`12307`: Clarify missing-property error message. +* :ghpull:`12274`: MNT: put back ``_hold`` as read-only attribute on AxesBase +* :ghpull:`12260`: Fix docs : change from issue #12191, remove "if 1:" blocks in examples +* :ghpull:`12163`: TST: Defer loading Qt framework until test is run. +* :ghpull:`12253`: Handle utf-8 output by kpathsea on Windows. +* :ghpull:`12301`: Ghostscript 9.0 requirement revisited +* :ghpull:`12294`: Fix expand_dims warnings in triinterpolate +* :ghpull:`12292`: TST: Modify the bar3d test to show three more angles +* :ghpull:`12297`: Remove some pytest parameterising warnings +* :ghpull:`12261`: FIX: parasite axis2 demo +* :ghpull:`12278`: Document inheriting docstrings +* :ghpull:`12262`: Simplify empty-rasterized pdf test. +* :ghpull:`12269`: Add some param docs to BlockingInput methods +* :ghpull:`12272`: Fix ``contrained`` to ``constrained`` +* :ghpull:`12255`: Deduplicate inherited docstrings. +* :ghpull:`12254`: Improve docstrings of Animations +* :ghpull:`12258`: Fix CSS for module-level data +* :ghpull:`12222`: Remove extraneous if 1 statements in demo_axisline_style.py +* :ghpull:`12137`: MAINT: Vectorize bar3d +* :ghpull:`12219`: Merge OSXInstalledFonts into findSystemFonts. +* :ghpull:`12229`: Less ACCEPTS, more numpydoc. +* :ghpull:`12209`: Doc: Sort named colors example by palette +* :ghpull:`12237`: Use (float, float) as parameter type for 2D positions in docstrings +* :ghpull:`12238`: Typo in docs +* :ghpull:`12236`: Make boilerplate-generated pyplot.py flake8 compliant +* :ghpull:`12231`: CI: Speed up Appveyor repository cloning +* :ghpull:`12228`: Fix trivial typo in docs. +* :ghpull:`12227`: Use (float, float) as paramter type for 2D positions +* :ghpull:`12199`: Allow disabling specific mouse actions in blocking_input +* :ghpull:`12213`: Change win32InstalledFonts return value +* :ghpull:`12207`: FIX: dont' check for interactive framework if none required +* :ghpull:`11688`: Don't draw axis (spines, ticks, labels) twice when using parasite axes. +* :ghpull:`12210`: Axes.tick_params() argument checking +* :ghpull:`12211`: Fix typo +* :ghpull:`12200`: Slightly clarify some invalid shape exceptions for image data. +* :ghpull:`12151`: Don't pretend @deprecated applies to classmethods. +* :ghpull:`12190`: Remove some unused variables and imports +* :ghpull:`12186`: DOC: fix API note about get_tightbbox +* :ghpull:`12203`: Document legend's slowness when "best" location is used +* :ghpull:`12192`: Exclude examples from lgtm analysis +* :ghpull:`12196`: Give Carreau the ability to mention the backport bot. +* :ghpull:`12187`: DOC: Update INSTALL.rst +* :ghpull:`12164`: Fix Annotation.contains. +* :ghpull:`12177`: FIX: remove cwd from mac font path search +* :ghpull:`12182`: Fix Flash of Unstyled Content by removing remaining Flipcause integration +* :ghpull:`12184`: DOC: update "Previous Whats New" for 2.2 with reference to cividis paper +* :ghpull:`12183`: Doc: Don't use Sphinx 1.8 +* :ghpull:`12171`: Remove internal warning due to zsort deprecation +* :ghpull:`12166`: Document preference order for backend auto selection +* :ghpull:`12154`: Avoid triggering deprecation warnings with pytest 3.8. +* :ghpull:`12030`: Speed up canvas redraw for GTK3Agg backend. +* :ghpull:`12157`: Properly declare the interactive framework for the qt4foo backends. +* :ghpull:`12156`: Cleanup the GridSpec demos. +* :ghpull:`12144`: Add explicit getters and setters for Annotation.anncoords. +* :ghpull:`12152`: Use _warn_external for deprecations warnings. +* :ghpull:`12148`: BLD: pragmatic fix for building basic_unit example on py37 +* :ghpull:`12147`: DOC: update the gh_stats code + +Issues (170): + +* :ghissue:`12699`: Annotations get cropped out of figures saved with bbox_inches='tight' +* :ghissue:`9217`: Weirdness with inline figure DPI settings in Jupyter Notebook +* :ghissue:`4853`: %matplotlib notebook creates much bigger figures than %matplotlib inline +* :ghissue:`12780`: Vague/misleading exception message in scatter() +* :ghissue:`10239`: Weird interaction with Tkinter +* :ghissue:`10045`: subplots_adjust() breaks layout of tick labels +* :ghissue:`12765`: Matplotlib draws incorrect color +* :ghissue:`11800`: Gridspec tutorial +* :ghissue:`12757`: up the figure +* :ghissue:`12724`: Importing pyplot steals focus on macOS +* :ghissue:`12669`: fixing _hold on cartopy broke basemap +* :ghissue:`12687`: Plotting text on 3d axes before tight_layout() breaks tight_layout() +* :ghissue:`12734`: Wishlist: functionally linked twin axes +* :ghissue:`12576`: RcParams is fundamentally broken +* :ghissue:`12641`: ``_axes.py.scatter()`` array index out of bound / calling from ``seaborn`` +* :ghissue:`12703`: Error when closing first of several pyplot figures in TkAgg +* :ghissue:`12728`: Deprecation Warnings +* :ghissue:`4124`: Provide canonical examples of mpl in web frameworks +* :ghissue:`10574`: Default color after setting alptha to Patch in legened +* :ghissue:`12702`: couldn't find or load Qt platform plugin "windows" in "". +* :ghissue:`11139`: "make clean" doesn't remove all the build doc files +* :ghissue:`12701`: semilogy with NaN prevents display of Title (cairo backend) +* :ghissue:`12696`: Process finished with exit code -1 due to matplotlib configuration +* :ghissue:`12692`: matplotlib.plot.show always blocks the execution of python script +* :ghissue:`12433`: Travis error is MacOS image tolerance of 0.005 for ``test_constrained_layout.py::test_colorbar_location`` +* :ghissue:`10017`: unicode_literals considered harmful +* :ghissue:`12682`: using AxesImage.set_clim() shrinks the colorbar +* :ghissue:`12620`: Overlapping 3D objects +* :ghissue:`12680`: matplotlib ui in thread still blocked +* :ghissue:`11908`: Improve linestyle documentation +* :ghissue:`12650`: Deprecation warnings when calling help(matplotlib) +* :ghissue:`10643`: Most warnings calls do not set the stacklevel +* :ghissue:`12671`: make_axes_locatable breaks with matplotlib 3.0 +* :ghissue:`12664`: plt.scatter crashes because overwrites the colors to an empty list +* :ghissue:`12188`: matplotlib 3 pyplot on MacOS bounces rocket icon in dock +* :ghissue:`12648`: Regression when calling annotate with nan values for the position +* :ghissue:`12362`: In 3.0.0 backend cannot be set if 'get_backend()' is run first +* :ghissue:`12649`: Over-verbose deprecation warning about examples.directory +* :ghissue:`12661`: In version 3.0.0 make_axes_locatable + colorbar does not produce expected result +* :ghissue:`12634`: axes_grid1 axes have no keyword argument 'bbox_extra_artists' +* :ghissue:`12654`: Broken 'Developer Discussions' link +* :ghissue:`12657`: With v3.0.0 mpl_toolkits.axes_grid1.make_axes_locatable().append_axes breaks in Jupyter +* :ghissue:`12645`: Markers are offset when 'facecolor' or 'edgecolor' are set to 'none' when plotting data +* :ghissue:`12644`: Memory leak with plt.plot in Jupyter Notebooks? +* :ghissue:`12632`: Do we need input hooks macosx? +* :ghissue:`12535`: AIX Support - Do not undef _XOPEN_SOURCE +* :ghissue:`12626`: AttributeError: module 'matplotlib' has no attribute 'artist' +* :ghissue:`11034`: Doc Typo: matplotlib.axes.Axes.get_yticklabels / Axis.get_ticklabels +* :ghissue:`12624`: make_axes_locatable : Colorbar in the middle instead of bottom while saving a pdf, png. +* :ghissue:`11094`: can not use GUI backends inside django request handlers +* :ghissue:`12613`: transiently linked interactivity of unshared pair of axes generated with make_axes_locatable +* :ghissue:`12578`: macOS builds are broken +* :ghissue:`12612`: gui backends do not work inside of flask request handlers +* :ghissue:`12611`: Matplotlib 3.0.0 Likely bug TypeError: stackplot() got multiple values for argument 'x' +* :ghissue:`12610`: matplotlibrc causes import to fail 3.0.0 (didn't crash 2.y.z series) +* :ghissue:`12601`: Can't import matplotlib +* :ghissue:`12597`: Please soon add Chinese language support!! It's to difficult for new people handle character +* :ghissue:`12590`: Matplotlib pypi distribution lacks packages for Python 2.7 +* :ghissue:`3869`: Numeric labels do not work with plt.hist +* :ghissue:`12580`: Incorrect hist error message with bad color size +* :ghissue:`12100`: document where to get nightly wheels +* :ghissue:`7205`: Converting docstrings to numpydoc +* :ghissue:`12564`: Saving plot as PNG file prunes tick labels +* :ghissue:`12161`: Problems of using sharex options with lines plots and colormesh with colorbar +* :ghissue:`12256`: tight_layout for plot with non-clipped screen-unit items causes issues on zoom +* :ghissue:`12545`: Program quit unormally without reporting error +* :ghissue:`12532`: Incorrect rendering of math symbols +* :ghissue:`12567`: Calling pyplot.show() with TkAgg backend on x86 machine raises OverflowError. +* :ghissue:`12571`: cannot install because Fatal Python error: initfsencoding: Unable to get the locale encoding +* :ghissue:`12566`: Problem installing Version 1.3.1 -> missing pkg-config freetype and libagg +* :ghissue:`12556`: Matplotlib 3.0.0 import hangs in clean environment +* :ghissue:`12197`: Weird behaviour of suptitle() when horizontalalignment is not 'center' +* :ghissue:`12550`: colorbar resizes in animation +* :ghissue:`12155`: Incorrect placement of Colorbar ticks using LogNorm +* :ghissue:`11787`: Looping gifs with PillowWriter +* :ghissue:`12533`: Plotting with alpha=0 with rasterized=True causes ValueError on saving to pdf +* :ghissue:`12438`: Scatter doesn't accept a list of strings as color spec. +* :ghissue:`12429`: scatter() does not accept gray strings anymore +* :ghissue:`12499`: run my code failed after i Import pylab failed, python version is 3.6.6 +* :ghissue:`12458`: add_lines misses lines for matplotlib.colorbar.ColorbarBase +* :ghissue:`12239`: 3d axes are collapsed by tight_layout +* :ghissue:`12414`: Function to draw angle between two lines +* :ghissue:`12488`: inconsistent colorbar tick labels for LogNorm +* :ghissue:`12515`: pyplot.step broken in 3.0.0? +* :ghissue:`12355`: Error for bbox_inches='tight' in savefig with make_axes_locatable +* :ghissue:`12505`: ImageGrid in 3.0 +* :ghissue:`12502`: How can I put the ticks of logarithmic coordinate in the axes? +* :ghissue:`12496`: Maplotlib Can't Plot a Dataset +* :ghissue:`12486`: rotate lable of legend ? +* :ghissue:`12291`: Importing pyplot crashes on macOS due to missing fontlist-v300.json and then Permission denied: '/opt/local/share/fonts' +* :ghissue:`12480`: "close_event" for nbagg/notebook backend +* :ghissue:`12467`: Documentation of AnchoredText's prop keyword argument is misleading +* :ghissue:`12288`: New function signatures in pyplot break Cartopy +* :ghissue:`12445`: Error on colorbar +* :ghissue:`8760`: Traceback from animation.MovieWriter.saving method is confusing because it provides no useful information +* :ghissue:`9205`: after the animation encoder (e.g. ffmpeg) fails, the animation framework itself fails internally in various ways while trying to report the error +* :ghissue:`12357`: Unclear error when saving Animation using FFMpeg +* :ghissue:`12454`: Formatting numerical legend +* :ghissue:`9636`: matplotlib crashes upon window resize +* :ghissue:`11473`: Continuous plotting cause memory leak 20-50kb/sec +* :ghissue:`12018`: No image pop-up or display for plt.imshow() and plt.show() +* :ghissue:`11583`: How to draw parallelepiped with real size scaling? +* :ghissue:`12446`: Polar Contour - float() argument must be a string or a number, not 'AxesParasiteParasiteAuxTrans' +* :ghissue:`12444`: Issues with gridspec/tight_layout in matplotlib version 2.2.3 +* :ghissue:`11154`: Unexpected behavior for Axes3D.plot_surface(shade=None) +* :ghissue:`12409`: Calling savefig() multiple times causes crash of Spyder IDE / IPython Kernel dying. +* :ghissue:`9799`: FigureCanvasTkAgg - "buffer is of wrong type" error during blit +* :ghissue:`12439`: FileNotFoundError for font_manager +* :ghissue:`12437`: matplotlib-mac +* :ghissue:`12121`: Documentation of TextArea's fontprops keyword argument is misleading +* :ghissue:`12279`: Axes.format_cursor_data lacks documentation and seems unused +* :ghissue:`12428`: Simple plot spacing bug: ylabel gets wrongfully removed from plot +* :ghissue:`11190`: Images in the docs are too large. +* :ghissue:`12271`: error with errorbar with datetime64 +* :ghissue:`12405`: plt.stackplot() does not work with 3.0.0 +* :ghissue:`12282`: ``Axes.imshow`` tooltip does not get updated when another call to ``Axes.imshow`` is made +* :ghissue:`12420`: How to remove Rectangle Selector from figure? +* :ghissue:`12391`: Constrained Layout tutorial needs some cleanup.... +* :ghissue:`12406`: Bug with font finding, and here is my fix as well. +* :ghissue:`9051`: ParasiteAxes over plotting +* :ghissue:`12325`: Annotation change from "s" to "text" in 3.0- documentation +* :ghissue:`12397`: plt.show( ) not working (can't get figures to display in external window) when using jupyter QTconsole +* :ghissue:`12396`: Defining arrowprops in draggable annotation disables the pick_event +* :ghissue:`12389`: Setting row edge color of matplotlib table +* :ghissue:`12376`: The output figure file is strange: there is a lot of blank area on the output figure. +* :ghissue:`11641`: constrained_layout and colorbar for a subset of axes +* :ghissue:`12373`: Unexpected outcome with matplotlib.pyplot.pcolor() +* :ghissue:`12370`: ImageGrid bug when using inline backend +* :ghissue:`12364`: pdf image generated by matplotlib with semi transparent lines missing in Word on Windows. +* :ghissue:`12352`: TeX rendering broken on master with windows +* :ghissue:`12354`: Too many levels of symbolic links +* :ghissue:`12323`: indicate_inset_zoom sometimes draws incorrect connector lines +* :ghissue:`12341`: Figures not rendering in docker +* :ghissue:`12335`: Matplotlib plt.Rectangle Incoherent Results +* :ghissue:`12265`: ParasiteAxesAuxTrans pcolor/pcolormesh and contour/contourf broken +* :ghissue:`12337`: AttributeError: module 'matplotlib.pyplot' has no attribute 'hold' +* :ghissue:`11673`: Inconsistent font settings when changing style context +* :ghissue:`11693`: The rcParams setting for figure.figsize does not change when run from another notebook +* :ghissue:`11725`: New mode between non-interactive and interactive? +* :ghissue:`12134`: tight_layout flips images when making plots without displaying them +* :ghissue:`12310`: plot fails with datetime64[ns] timezone aware objects (for example datetime64[ns, UTC+00:00] ) +* :ghissue:`12191`: "if 1:" blocks in examples +* :ghissue:`11288`: FR: Figure.subplots add optional SubplotSpec parameter +* :ghissue:`12298`: c and cmap for plot +* :ghissue:`12286`: Sample code given in Matplotlib's site does not work. +* :ghissue:`11955`: UnicodeDecodeError on importing pyplot in python2 +* :ghissue:`12208`: parasite axis2 demo now crashes with log x-axis +* :ghissue:`8871`: Error when using quantities when plotting errorbars +* :ghissue:`6658`: literature reference for 'viridis' colormap +* :ghissue:`6789`: Tutorial pyplot_scales.py crashes when used with plt.tight_layout() +* :ghissue:`6922`: imshow does not immediately update shared axes +* :ghissue:`11879`: Unable to change filename when saving from figure window +* :ghissue:`12225`: In histogram, bars whose count is larger than 2**31 sometimes become negative +* :ghissue:`1461`: DOC: keyword arguments to plt.axes, plt.subpot, and fig.add_subplot +* :ghissue:`12173`: Cannot import pyplot +* :ghissue:`12217`: Python will suddenly not plot anymore +* :ghissue:`12120`: Default legend behavior (loc='best') very slow for large amounts of data. +* :ghissue:`12176`: import pyplot on MacOS without font cache will search entire subtree of current dir +* :ghissue:`12146`: fix pdf docs +* :ghissue:`12160`: MacOS: Cannot import name 'format_exc' +* :ghissue:`12169`: Cannot install 3.0.0 "python setup.py egg_info" failed (freetype & png) +* :ghissue:`12168`: pip install v3.0.0 'failed with exit status 1181' +* :ghissue:`12107`: warnings re: deprecated pytest API with pytest 3.8 +* :ghissue:`12162`: https://matplotlib.org/users/beginner.html is outdated +* :ghissue:`12010`: Popover over plot is very slow +* :ghissue:`6739`: Make matplotlib fail more gracefully in headless environments +* :ghissue:`3679`: Runtime detection for default backend +* :ghissue:`11340`: matplotlib fails to install from source with intel compiler +* :ghissue:`11838`: docs do not build on py3.7 due to small change in python handling of -m +* :ghissue:`12115`: Plot in JS Animation has larger margin than "normal" PNG plot diff --git a/doc/users/prev_whats_new/github_stats_3.1.0.rst b/doc/users/prev_whats_new/github_stats_3.1.0.rst new file mode 100644 index 000000000000..c8de48ed81bd --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.1.0.rst @@ -0,0 +1,1264 @@ +.. _github-stats-3-1-0: + +GitHub Stats for Matplotlib 3.1.0 +================================= + +GitHub stats for 2018/09/18 - 2019/05/13 (tag: v3.0.0) + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 161 issues and merged 918 pull requests. +The full list can be seen `on GitHub `__ + +The following 150 authors contributed 3426 commits. + +* Abhinuv Nitin Pitale +* Adam J. Stewart +* Alistair Muldal +* Alon Hershenhorn +* Andras Deak +* Ankur Dedania +* Antony Lee +* Anubhav Shrimal +* Ao Liu (frankliuao) +* Ayappan P +* azure-pipelines[bot] +* Bas van Schaik +* Ben Root +* Benjamin Bengfort +* Benjamin Congdon +* Bharat123rox +* Brigitta Sipocz +* btang02 +* Carsten +* Carsten Schelp +* Cho Yin Yong +* Chris Zimmerman +* Christer Jensen +* Christoph Gohlke +* Christoph Reiter +* Christopher Bradshaw +* Colin +* Colin Carroll +* dabana +* Dana-Farber +* Daniele Nicolodi +* DanielMatu +* David HaberthУМr +* David Stansby +* Dietmar Schwertberger +* Dmitry Mottl +* E\. G\. Patrick Bos +* Elan Ernest +* Elliott Sales de Andrade +* Eric Firing +* Eric Larson +* Eric Wieser +* esvhd +* fredrik-1 +* fuzzythecat +* Galen Lynch +* Gazing +* gwin-zegal +* hannah +* Harshal Prakash Patankar +* hershen +* Ildar Akhmetgaleev +* ImportanceOfBeingErnest +* Isa Hassen +* Jae-Joon Lee +* James A. Bednar +* James Adams +* Jan S. (Milania1) +* Jarrod Millman +* Jessica B. Hamrick +* Jody Klymak +* Joel T. Frederico +* Joel Wanner +* Johannes H. Jensen +* Joseph Albert +* Joshua Klein +* Jouni K. SeppУЄnen +* Jun Tan +* Kai Muehlbauer +* Katrin Leinweber +* Kayla Ngan +* Kevin Rose +* Kjell Le +* KonradAdamczyk +* ksunden +* Kyle Sunden +* Leon Loopik +* Levi Kilcher +* LevN0 +* luftek +* Maik Riechert +* Marcel Martin +* Mark Harfouche +* Marko BaХЁtovanoviФ‡ +* Matthias Bussonnier +* Matthias Geier +* Matti Picus +* MeeseeksMachine +* Michael Droettboom +* Michael Jancsy +* Mike Frysinger +* Molly Rossow +* MortenSHUTE +* mromanie +* nathan78906 +* Nelle Varoquaux +* Nick Papior +* Nicolas Courtemanche +* Nikita Kniazev +* njwhite +* Oliver Natt +* Paul +* Paul Hobson +* Paul Ivanov +* Paul J. Koprowski +* pharshalp +* Phil Elson +* Pierre Thibault +* QiCuiHub +* Rasmus Diederichsen +* Ratin_Kumar +* Rob Harrigan +* Roman Yurchak +* Ryan May +* Ryan Morshead +* Saket Choudhary +* saksmito +* SBCV +* Sebastian Bullinger +* Sebastian Hegler +* Seunghoon Park +* simon-kraeusel +* smheidrich +* Stephane Raynaud +* Stephen-Chilcote +* sxntxn +* Taehoon Lee +* Takafumi Arakaki +* Taras +* Taras Kuzyo +* teresy +* Thein Oo +* Thomas A Caswell +* Thomas Hisch +* Thomas Robitaille +* thoo +* Tim Hoffmann +* Tobia De Koninck +* Tobias Megies +* Tyler Makaro +* V\. Armando SolУЉ +* Viraj Mohile +* Will Handley +* woclass +* Yasaman-Mah +* yeo +* Yuxin Wu +* Yuya +* Zhili (Jerry) Pan +* zhoubecky + +GitHub issues and pull requests: + +Pull Requests (918): + +* :ghpull:`14209`: Backport PR #14197 on branch v3.1.x (Minor cleanup of acorr/xcoor docs) +* :ghpull:`14210`: Make intro tutorial less jargony. +* :ghpull:`14197`: Minor cleanup of acorr/xcoor docs +* :ghpull:`14203`: Backport PR #14202 on branch v3.1.x (Fix docstring of Line2D.set_data.) +* :ghpull:`14202`: Fix docstring of Line2D.set_data. +* :ghpull:`14196`: Backport PR #14188 on branch v3.1.x (Clarify scope of MouseEvent attributes) +* :ghpull:`14188`: Clarify scope of MouseEvent attributes +* :ghpull:`14194`: Backport PR #14167 on branch v3.1.x (Fix backend_pgf header.) +* :ghpull:`14193`: Backport PR #14153 on branch v3.1.x (Update qt_compat.py test for already imported binding.) +* :ghpull:`14167`: Fix backend_pgf header. +* :ghpull:`14153`: Update qt_compat.py test for already imported binding. +* :ghpull:`14190`: Backport PR #14176 on branch v3.1.x (Merge doc/api/api_overview and doc/api/index.) +* :ghpull:`14192`: Unbreak testsuite for pytest 4.5. +* :ghpull:`14189`: Backport PR #14186 on branch v3.1.x (Update FancyBboxPatch docs to numpydoc style) +* :ghpull:`14176`: Merge doc/api/api_overview and doc/api/index. +* :ghpull:`14186`: Update FancyBboxPatch docs to numpydoc style +* :ghpull:`14187`: Backport PR #13169 on branch v3.1.x (Add example code for current logo) +* :ghpull:`14165`: Backport PR #14156 on branch v3.1.x (Fix glyph loading in textpath.) +* :ghpull:`14156`: Fix glyph loading in textpath. +* :ghpull:`14162`: Backport PR #14150 on branch v3.1.x (Fix deprecation of withdash for figtext().) +* :ghpull:`14150`: Fix deprecation of withdash for figtext(). +* :ghpull:`14136`: Backport PR #14109 on branch v3.1.x +* :ghpull:`14109`: Some simple pyplot doc improvements +* :ghpull:`14129`: Backport PR #14117 on branch v3.1.x (Simplify ribbon_box example.) +* :ghpull:`14128`: Backport PR #14057 on branch v3.1.x (Improve Gradient bar example) +* :ghpull:`14127`: Backport PR #14125 on branch v3.1.x (Remove extra keyword from pytest.skip call.) +* :ghpull:`14117`: Simplify ribbon_box example. +* :ghpull:`14057`: Improve Gradient bar example +* :ghpull:`14125`: Remove extra keyword from pytest.skip call. +* :ghpull:`14123`: Backport PR #14119 on branch v3.1.x (Add ridge_map to third party packages documentation) +* :ghpull:`14119`: Add ridge_map to third party packages documentation +* :ghpull:`14103`: Backport PR #14088 on branch v3.1.x (Cleanup major_minor_demo.) +* :ghpull:`14102`: Backport PR #14100 on branch v3.1.x (Improve docstring of axes_zoom_effect example.) +* :ghpull:`14099`: Backport PR #14090 on branch v3.1.x (Pep8ify some variable names in examples.) +* :ghpull:`14100`: Improve docstring of axes_zoom_effect example. +* :ghpull:`14088`: Cleanup major_minor_demo. +* :ghpull:`14090`: Pep8ify some variable names in examples. +* :ghpull:`14097`: Backport PR #14079 on branch v3.1.x (Consistently use axs.flat instead of axs.flatten()) +* :ghpull:`14095`: Backport PR #14087 on branch v3.1.x (Cleanup date example.) +* :ghpull:`14094`: Backport PR #14029 on branch v3.1.x (Fix doc building with numpydoc 0.9) +* :ghpull:`14093`: Backport PR #14052 on branch v3.1.x (Check axes identity in image.contains.) +* :ghpull:`14092`: Backport PR #14056 on branch v3.1.x (FIX: do not try to manage the visibility of un-drawn ticks) +* :ghpull:`14091`: Backport PR #14078 on branch v3.1.x (Minor fix in multiple subplots example) +* :ghpull:`14079`: Consistently use axs.flat instead of axs.flatten() +* :ghpull:`14087`: Cleanup date example. +* :ghpull:`14029`: Fix doc building with numpydoc 0.9 +* :ghpull:`14052`: Check axes identity in image.contains. +* :ghpull:`14056`: FIX: do not try to manage the visibility of un-drawn ticks +* :ghpull:`14078`: Minor fix in multiple subplots example +* :ghpull:`14080`: Backport PR #14069 on branch v3.1.x (Don't try to use the colorbar formatter to format RGBA data.) +* :ghpull:`14069`: Don't try to use the colorbar formatter to format RGBA data. +* :ghpull:`14074`: Backport PR #14019 on branch v3.1.x (Update docstring of locator_params()) +* :ghpull:`14019`: Update docstring of locator_params() +* :ghpull:`14066`: Backport PR #14053 on branch v3.1.x (Improve fill() example) +* :ghpull:`14065`: Backport PR #14059 on branch v3.1.x (Improve Scatter hist example) +* :ghpull:`14067`: Backport PR #14062 on branch v3.1.x (Improve advanced quiver example) +* :ghpull:`14062`: Improve advanced quiver example +* :ghpull:`14053`: Improve fill() example +* :ghpull:`14059`: Improve Scatter hist example +* :ghpull:`14064`: Backport PR #14043 on branch v3.1.x (Ensure errorbars are always drawn on top of bars in ax.bar) +* :ghpull:`14043`: Ensure errorbars are always drawn on top of bars in ax.bar +* :ghpull:`14061`: Backport PR #14051 on branch v3.1.x (Add Yellowbrick to third party packages) +* :ghpull:`14051`: Add Yellowbrick to third party packages +* :ghpull:`14050`: Backport PR #14048 on branch v3.1.x (Fix Animation.save) +* :ghpull:`14049`: Backport PR #14047 on branch v3.1.x (Remove references to "Draws" in matplotlib.patches) +* :ghpull:`14048`: Fix Animation.save +* :ghpull:`14047`: Remove references to "Draws" in matplotlib.patches +* :ghpull:`14037`: Backport PR #14033 on branch v3.1.x (Reword add_subplot docstring.) +* :ghpull:`14036`: Backport PR #14001 on branch v3.1.x ([BUG] DOC: Remove broken references to vischeck) +* :ghpull:`14033`: Reword add_subplot docstring. +* :ghpull:`14032`: Backport PR #14030 on branch v3.1.x (Update colorcet link) +* :ghpull:`14030`: Update colorcet link +* :ghpull:`14027`: Backport PR #14026 on branch v3.1.x (Fix bug in plot_directive that caused links to plots in different formats to be missing) +* :ghpull:`14026`: Fix bug in plot_directive that caused links to plots in different formats to be missing +* :ghpull:`14012`: Backport PR #14008 on branch v3.1.x (Don't install tests by default.) +* :ghpull:`14017`: Backport PR #14015 on branch v3.1.x (Fix docstring of pyplot.clim()) +* :ghpull:`14015`: Fix docstring of pyplot.clim() +* :ghpull:`14008`: Don't install tests by default. +* :ghpull:`14006`: Backport PR #13998 on branch v3.1.x (Fix patch contains logic for patches that don't have any codes) +* :ghpull:`14005`: Backport PR #14004 on branch v3.1.x (DOC: pin numpydoc to less than 0.9) +* :ghpull:`13998`: Fix patch contains logic for patches that don't have any codes +* :ghpull:`13999`: Backport PR #13992 on branch v3.1.x (FIX: undeprecate MaxNLocator default_params) +* :ghpull:`13997`: Backport PR #13995 on branch v3.1.x (DOC: explain zorder for gridlines in grid docstring) +* :ghpull:`13992`: FIX: undeprecate MaxNLocator default_params +* :ghpull:`13995`: DOC: explain zorder for gridlines in grid docstring +* :ghpull:`13990`: Backport PR #13989 on branch v3.1.x (FIX: update not replace hist_kwargs when density is passed) +* :ghpull:`13989`: FIX: update not replace hist_kwargs when density is passed +* :ghpull:`13975`: Backport PR #13966 on branch v3.1.x (Fix colorbar setting without artist) +* :ghpull:`13976`: Backport PR #13973 on branch v3.1.x (BUG: Ensure docstrings are not accessed with -OO) +* :ghpull:`13856`: Whats new page for 3.1 +* :ghpull:`13966`: Fix colorbar setting without artist +* :ghpull:`13973`: BUG: Ensure docstrings are not accessed with -OO +* :ghpull:`13969`: Backport PR #13950 on branch v3.1.x (confidence_ellipse_markup) +* :ghpull:`13950`: confidence_ellipse_markup +* :ghpull:`13965`: Backport PR #13962 on branch v3.1.x (Fix typo in code example in docstring.) +* :ghpull:`13964`: Backport PR #13870 on branch v3.1.x (3.1.0 API changes page) +* :ghpull:`13962`: Fix typo in code example in docstring. +* :ghpull:`13870`: 3.1.0 API changes page +* :ghpull:`13961`: Backport PR #13914 on branch v3.1.x (Improve Rainbow text example) +* :ghpull:`13960`: Backport PR #13958 on branch v3.1.x (Remove transparent fancy legend example) +* :ghpull:`13914`: Improve Rainbow text example +* :ghpull:`13958`: Remove transparent fancy legend example +* :ghpull:`13956`: Backport PR #13908 on branch v3.1.x (Enh control tick deconflict2) +* :ghpull:`13955`: Backport PR #13941 on branch v3.1.x (Add project_urls to setup) +* :ghpull:`13908`: Enh control tick deconflict2 +* :ghpull:`13954`: Backport PR #13949 on branch v3.1.x (DOC: Add documentation to Text.set_fontfamily) +* :ghpull:`13941`: Add project_urls to setup +* :ghpull:`13949`: DOC: Add documentation to Text.set_fontfamily +* :ghpull:`13951`: Backport PR #13939 on branch v3.1.x (Bunch of docstring cleanups.) +* :ghpull:`13939`: Bunch of docstring cleanups. +* :ghpull:`13947`: Backport PR #13897 on branch v3.1.x (numpydocification.) +* :ghpull:`13897`: numpydocification. +* :ghpull:`13946`: Backport PR #13924 on branch v3.1.x (Followup to deprecation of usetex parameter in get_text_path.) +* :ghpull:`13924`: Followup to deprecation of usetex parameter in get_text_path. +* :ghpull:`13916`: Backport PR #13850 on branch v3.1.x (Cleanup STIX Font Demo) +* :ghpull:`13915`: Backport PR #13835 on branch v3.1.x (Improve Conectionstyle Demo) +* :ghpull:`13850`: Cleanup STIX Font Demo +* :ghpull:`13835`: Improve Conectionstyle Demo +* :ghpull:`13846`: Backport PR #13836 on branch v3.1.x (MNT: account for cpython deprecations) +* :ghpull:`13898`: Backport PR #13896 on branch v3.1.x (Fix cbook.boxplot_stats docstring) +* :ghpull:`13896`: Fix cbook.boxplot_stats docstring +* :ghpull:`13893`: Backport PR #13890 on branch v3.1.x (rst seealso -> numpydoc "See Also".) +* :ghpull:`13890`: rst seealso -> numpydoc "See Also". +* :ghpull:`13888`: Backport PR #13862 on branch v3.1.x (Move 3.x API changes to prev_api_changes) +* :ghpull:`13862`: Move 3.x API changes to prev_api_changes +* :ghpull:`13882`: Backport PR #13867 on branch v3.1.x (Rename "docs" to "contents" in navigation bar) +* :ghpull:`13867`: Rename "docs" to "contents" in navigation bar +* :ghpull:`13881`: Backport PR #13874 on branch v3.1.x (Remove redundant call to Formatter.set_locs() before .format_ticks().) +* :ghpull:`13874`: Remove redundant call to Formatter.set_locs() before .format_ticks(). +* :ghpull:`13871`: Backport PR #13868 on branch v3.1.x (Correctly handle fallout of defining PY_SSIZE_T_CLEAN on Windows.) +* :ghpull:`13869`: Backport PR #13861 on branch v3.1.x (Fix remaining links in docs) +* :ghpull:`13868`: Correctly handle fallout of defining PY_SSIZE_T_CLEAN on Windows. +* :ghpull:`13861`: Fix remaining links in docs +* :ghpull:`13849`: Backport PR #13845 on branch v3.1.x (Fix some broken documentation links) +* :ghpull:`13845`: Fix some broken documentation links +* :ghpull:`13836`: MNT: account for cpython deprecations +* :ghpull:`13841`: Backport PR #12928 on branch v3.1.x (textpath encoding) +* :ghpull:`13842`: Backport PR #13827 on branch v3.1.x (Better MovieWriter init error message) +* :ghpull:`13838`: Backport PR #13570 on branch v3.1.x (Add new example for plotting a confidence_ellipse) +* :ghpull:`13827`: Better MovieWriter init error message +* :ghpull:`13839`: Backport PR #13815 on branch v3.1.x (Numpydocify FontManager.findfont()) +* :ghpull:`13837`: Backport PR #8638 on branch v3.1.x (FIX: if bins input to hist is str, treat like no bins) +* :ghpull:`12928`: textpath encoding +* :ghpull:`13815`: Numpydocify FontManager.findfont() +* :ghpull:`13570`: Add new example for plotting a confidence_ellipse +* :ghpull:`8638`: FIX: if bins input to hist is str, treat like no bins +* :ghpull:`13831`: Backport PR #13780 on branch v3.1.x (numpydoc ListedColormap parameters) +* :ghpull:`13780`: numpydoc ListedColormap parameters +* :ghpull:`13830`: Backport PR #13829 on branch v3.1.x (numpydoc IndexFormatter) +* :ghpull:`13829`: numpydoc IndexFormatter +* :ghpull:`13828`: Backport PR #13821 on branch v3.1.x (Remove \mathcircled from mathtext docs following its deprecation.) +* :ghpull:`13821`: Remove \mathcircled from mathtext docs following its deprecation. +* :ghpull:`13822`: Backport PR #13817 on branch v3.1.x (Remove borders from barcode example) +* :ghpull:`13820`: Backport PR #13816 on branch v3.1.x (Correct windows env variable format) +* :ghpull:`13816`: Correct windows env variable format +* :ghpull:`13817`: Remove borders from barcode example +* :ghpull:`13814`: Merge pull request #13805 from timhoffm/pin-sphinx-1.x +* :ghpull:`13813`: Backport PR #13764 on branch v3.1.x (Deprecate \mathcircled.) +* :ghpull:`13764`: Deprecate \mathcircled. +* :ghpull:`13805`: Pin Sphinx to 1.x +* :ghpull:`13807`: Backport PR #13800 on branch v3.1.x (Doc typos.) +* :ghpull:`13800`: Doc typos. +* :ghpull:`13806`: Backport PR #13771 on branch v3.1.x (patches.Arc docstring update #13759) +* :ghpull:`13804`: Backport PR #13766 on branch v3.1.x (Search for fonts in XDG directory as well.) +* :ghpull:`13771`: patches.Arc docstring update #13759 +* :ghpull:`13766`: Search for fonts in XDG directory as well. +* :ghpull:`13794`: Backport PR #13695 on branch v3.1.x (numpydocify transform_angles.) +* :ghpull:`13793`: Backport PR #13762 on branch v3.1.x (Cleanup marker_reference example.) +* :ghpull:`13792`: Backport PR #13789 on branch v3.1.x (BUG: Fix function signature mismatch for set_clim) +* :ghpull:`13791`: Backport PR #13787 on branch v3.1.x (Fix failure to import matplotlib.animation on Windows.) +* :ghpull:`13695`: numpydocify transform_angles. +* :ghpull:`13762`: Cleanup marker_reference example. +* :ghpull:`13789`: BUG: Fix function signature mismatch for set_clim +* :ghpull:`13787`: Fix failure to import matplotlib.animation on Windows. +* :ghpull:`13781`: Backport PR #13777 on branch v3.1.x (Use class-based directive for mathmpl sphinxext.) +* :ghpull:`13790`: Backport PR #13564 on branch v3.1.x (Add an option to log progress while saving animations) +* :ghpull:`13564`: Add an option to log progress while saving animations +* :ghpull:`13777`: Use class-based directive for mathmpl sphinxext. +* :ghpull:`13765`: Backport PR #13761 on branch v3.1.x (Deprecate verbose-related rcParams.) +* :ghpull:`13761`: Deprecate verbose-related rcParams. +* :ghpull:`13760`: Backport PR #13719 on branch v3.1.x (Doc: Update timeline example) +* :ghpull:`13704`: Backport PR #13021 on branch v3.1.x (Undesirable behaviour of MixedModeRenderer) +* :ghpull:`13758`: Backport PR #13674 on branch v3.1.x (Preserve whitespace in svg output.) +* :ghpull:`13719`: Doc: Update timeline example +* :ghpull:`13674`: Preserve whitespace in svg output. +* :ghpull:`13755`: Backport PR #13741 on branch v3.1.x (FIX: make title move above ticklabels) +* :ghpull:`13754`: Backport PR #13712 on branch v3.1.x (Deprecate NavigationToolbar2QT.adj_window (unused and always None).) +* :ghpull:`13741`: FIX: make title move above ticklabels +* :ghpull:`13712`: Deprecate NavigationToolbar2QT.adj_window (unused and always None). +* :ghpull:`13752`: Backport PR #13732 on branch v3.1.x (Fix doc markup.) +* :ghpull:`13753`: Backport PR #13751 on branch v3.1.x (DOC/FIX: try merging comments) +* :ghpull:`13751`: DOC/FIX: try merging comments +* :ghpull:`13732`: Fix doc markup. +* :ghpull:`13750`: Backport PR #13743 on branch v3.1.x (Fix doc warning) +* :ghpull:`13743`: Fix doc warning +* :ghpull:`13747`: Backport PR #13745 on branch v3.1.x (Fix stem(use_line_collection)) +* :ghpull:`13748`: Backport PR #13716 on branch v3.1.x (Kill attributes that are never used/updated.) +* :ghpull:`13716`: Kill attributes that are never used/updated. +* :ghpull:`13745`: Fix stem(use_line_collection) +* :ghpull:`13710`: TST: only test agg_filter extensions with baseline images +* :ghpull:`13709`: Backport PR #8690 on branch v3.1.x +* :ghpull:`13707`: Backport PR #12760 on branch v3.1.x (Deduplicate implementation of per-backend Tools.) +* :ghpull:`13706`: Backport PR #13689 on branch v3.1.x (BUG: fix scaling of quiverkey when quiver scale_units='xy') +* :ghpull:`13705`: Backport PR #12419 on branch v3.1.x (Add DivergingNorm (again, again, again)) +* :ghpull:`13703`: Backport PR #12170 on branch v3.1.x (Deprecate considering \*args, \*\*kwargs in Timer.remove_callback.) +* :ghpull:`12760`: Deduplicate implementation of per-backend Tools. +* :ghpull:`13689`: BUG: fix scaling of quiverkey when quiver scale_units='xy' +* :ghpull:`12419`: Add DivergingNorm (again, again, again) +* :ghpull:`8690`: Adds support for rgba and rgb images to pcolorfast +* :ghpull:`13021`: Undesirable behaviour of MixedModeRenderer +* :ghpull:`12170`: Deprecate considering \*args, \*\*kwargs in Timer.remove_callback. +* :ghpull:`13700`: Backport PR #13588 on branch v3.1.x (FIX: fallback to viewlims if no data) +* :ghpull:`13694`: Backport PR #13677 on branch v3.1.x (Log all failures to extract font properties.) +* :ghpull:`13588`: FIX: fallback to viewlims if no data +* :ghpull:`13692`: Backport PR #13677 on branch v3.0.x (Log all failures to extract font properties.) +* :ghpull:`13677`: Log all failures to extract font properties. +* :ghpull:`13691`: Backport PR #13687 on branch v3.1.x (Update stem example) +* :ghpull:`13687`: Update stem example +* :ghpull:`13688`: Backport PR #13684 on branch v3.1.x (Use format_data_short to format image cursor data.) +* :ghpull:`13684`: Use format_data_short to format image cursor data. +* :ghpull:`13686`: Backport PR #13363 on branch v3.1.x (Inline iter_ticks into _update_ticks, and use that in mplot3d.) +* :ghpull:`13363`: Inline iter_ticks into _update_ticks, and use that in mplot3d. +* :ghpull:`13681`: Backport PR #13678 on branch v3.1.x (Fix font deduplication logic in createFontList.) +* :ghpull:`13678`: Fix font deduplication logic in createFontList. +* :ghpull:`13669`: Backport PR #13667 on branch v3.1.x (Fix incorrect signature in axis() doc.) +* :ghpull:`13667`: Fix incorrect signature in axis() doc. +* :ghpull:`13664`: Backport PR #12637 on branch v3.1.x (Tell IPython the correct GUI event loop to use for all backends.) +* :ghpull:`13665`: Backport PR #13601 on branch v3.1.x (Add a make-parameter-keyword-only-with-deprecation decorator.) +* :ghpull:`13601`: Add a make-parameter-keyword-only-with-deprecation decorator. +* :ghpull:`12637`: Tell IPython the correct GUI event loop to use for all backends. +* :ghpull:`13662`: Backport PR #13064 on branch v3.1.x (Don't explicitly add default include paths to Extensions) +* :ghpull:`13064`: Don't explicitly add default include paths to Extensions +* :ghpull:`13658`: Backport PR #13652 on branch v3.1.x (Fix empty FancyArrow crash) +* :ghpull:`13652`: Fix empty FancyArrow crash +* :ghpull:`13655`: Backport PR #11692 on branch v3.1.x (Deprecate frameon kwarg and rcParam to savefig.) +* :ghpull:`13654`: Backport PR #13614 on branch v3.1.x (Fix polar get window extent) +* :ghpull:`11692`: Deprecate frameon kwarg and rcParam to savefig. +* :ghpull:`13614`: Fix polar get window extent +* :ghpull:`13646`: Backport PR #13645 on branch v3.1.x (widgets.py fix examples connect -> mpl_connect) +* :ghpull:`13645`: widgets.py fix examples connect -> mpl_connect +* :ghpull:`13644`: Backport PR #13612 on branch v3.1.x (Improve Demo Text Rotation Mode) +* :ghpull:`13612`: Improve Demo Text Rotation Mode +* :ghpull:`13636`: Backport PR #13621 on branch v3.1.x (Remove ``asfileobj=False`` from a bunch of examples loading sample_data.) +* :ghpull:`13635`: Backport PR #13632 on branch v3.1.x (Clarify tick collision API change doc.) +* :ghpull:`13634`: Backport PR #13631 on branch v3.1.x (Swicth deprecation of Tick.label to pending.) +* :ghpull:`13621`: Remove ``asfileobj=False`` from a bunch of examples loading sample_data. +* :ghpull:`13632`: Clarify tick collision API change doc. +* :ghpull:`13631`: Swicth deprecation of Tick.label to pending. +* :ghpull:`13628`: Backport PR #13603 on branch v3.1.x +* :ghpull:`13603`: FIX: continue to bail tight layout if rect supplied +* :ghpull:`13627`: Backport PR #13622 on branch v3.1.x (Change title of named colors example) +* :ghpull:`13626`: Backport PR #13549 on branch v3.1.x (Simplify some annotation() calls in examples.) +* :ghpull:`13624`: Backport PR #13610 on branch v3.1.x (Update centered ticklabels example) +* :ghpull:`13625`: Backport PR #13611 on branch v3.1.x (Fix text position in Fancytextbox demo) +* :ghpull:`13622`: Change title of named colors example +* :ghpull:`13610`: Update centered ticklabels example +* :ghpull:`13611`: Fix text position in Fancytextbox demo +* :ghpull:`13607`: Backport PR #13605 on branch v3.1.x (Warn on attempts at semi-transparent outputs in ps backend.) +* :ghpull:`13608`: Backport PR #13602 on branch v3.1.x (Deprecate cbook.is_hashable.) +* :ghpull:`13602`: Deprecate cbook.is_hashable. +* :ghpull:`13605`: Warn on attempts at semi-transparent outputs in ps backend. +* :ghpull:`13599`: Backport PR #13590 on branch v3.1.x (Doc event loop requirements for Figure.show) +* :ghpull:`13590`: Doc event loop requirements for Figure.show +* :ghpull:`13597`: Backport PR #12359 on branch v3.1.x (ENH: Add boolean support for axis()) +* :ghpull:`13594`: Backport PR #13592 on branch v3.1.x (DOC: Make canonical URLs point to versioned path.) +* :ghpull:`13592`: DOC: Make canonical URLs point to versioned path. +* :ghpull:`12359`: ENH: Add boolean support for axis() +* :ghpull:`13587`: Backport PR #13573 on branch v3.1.x (Fix mplot3d transparency) +* :ghpull:`13573`: Fix mplot3d transparency +* :ghpull:`13585`: Backport PR #13578 on branch v3.1.x (Revert invalid change in Centered Ticklabels example) +* :ghpull:`13584`: Backport PR #13582 on branch v3.1.x (Cleanup two font-related examples.) +* :ghpull:`13578`: Revert invalid change in Centered Ticklabels example +* :ghpull:`13582`: Cleanup two font-related examples. +* :ghpull:`13579`: Backport PR #13477 on branch v3.1.x (FIX: make EngFormatter respect axes.unicode_minus rcParam) +* :ghpull:`13577`: Backport PR #12832 on branch v3.1.x (Deprecate redundant log-scale transform classes.) +* :ghpull:`13477`: FIX: make EngFormatter respect axes.unicode_minus rcParam +* :ghpull:`12832`: Deprecate redundant log-scale transform classes. +* :ghpull:`13574`: Backport PR #12856 on branch v3.1.x (added property usemathtext to EngFormatter) +* :ghpull:`12856`: added property usemathtext to EngFormatter +* :ghpull:`13572`: Backport PR #12899 on branch v3.1.x (Small cleanups.) +* :ghpull:`13571`: Backport PR #11553 on branch v3.1.x (Improved Code for Segments Intersect) +* :ghpull:`12899`: Small cleanups. +* :ghpull:`11553`: Improved Code for Segments Intersect +* :ghpull:`13568`: Backport PR #13563 on branch v3.1.x (FIX: inverted colorbar ticks) +* :ghpull:`13563`: FIX: inverted colorbar ticks +* :ghpull:`13530`: BUG: keep the ticks when the colorbar axis is inverted +* :ghpull:`13565`: Backport PR #13550 on branch v3.1.x (Strip out Py2-compat in setupext.) +* :ghpull:`13550`: Strip out Py2-compat in setupext. +* :ghpull:`13562`: Backport PR #13560 on branch v3.1.x (Improve GridSpec doc) +* :ghpull:`13560`: Improve GridSpec doc +* :ghpull:`13558`: Backport PR #13546 on branch v3.1.x ( Modified docstring of the set_ylabel and set_xlabel) +* :ghpull:`13559`: Backport PR #12062 on branch v3.1.x (Separate alpha and rbg interpolation then recombine to fix issue11316) +* :ghpull:`13557`: Backport PR #13548 on branch v3.1.x (Deprecate TextWithDash.) +* :ghpull:`12062`: Separate alpha and rbg interpolation then recombine to fix issue11316 +* :ghpull:`13546`: Modified docstring of the set_ylabel and set_xlabel +* :ghpull:`13548`: Deprecate TextWithDash. +* :ghpull:`13549`: Simplify some annotation() calls in examples. +* :ghpull:`13552`: Backport PR #11241 on branch v3.1.x (Deprecate the MATPLOTLIBDATA environment variable.) +* :ghpull:`11241`: Deprecate the MATPLOTLIBDATA environment variable. +* :ghpull:`13547`: Backport PR #9314 on branch v3.1.x (Simplify units.Registry.get_converter.) +* :ghpull:`13545`: Backport PR #13541 on branch v3.1.x (DOC: Remove mention of 'complex' mode in specgram docstring) +* :ghpull:`9314`: Simplify units.Registry.get_converter. +* :ghpull:`13541`: DOC: Remove mention of 'complex' mode in specgram docstring +* :ghpull:`13539`: Backport PR #12950 on branch v3.1.x (Inline or simplify FooFormatter.pprint_val.) +* :ghpull:`13538`: Backport PR #12748 on branch v3.1.x (Use the builtin GTK3 FileChooser rather than our custom subclass.) +* :ghpull:`13537`: Backport PR #12781 on branch v3.1.x (Lazy import of private modules) +* :ghpull:`12950`: Inline or simplify FooFormatter.pprint_val. +* :ghpull:`12748`: Use the builtin GTK3 FileChooser rather than our custom subclass. +* :ghpull:`12781`: Lazy import of private modules +* :ghpull:`11218`: fix pkg-config handling to make cross-compiling work +* :ghpull:`13531`: Backport PR #11964 on branch v3.1.x (Simplify extension setup.) +* :ghpull:`11964`: Simplify extension setup. +* :ghpull:`13529`: Backport PR #13525 on branch v3.1.x (Move some links in rst out of running text.) +* :ghpull:`13528`: Backport PR #13526 on branch v3.1.x (DOC: fix Subplot calls) +* :ghpull:`13525`: Move some links in rst out of running text. +* :ghpull:`13526`: DOC: fix Subplot calls +* :ghpull:`13523`: Backport PR #13521 on branch v3.1.x (Small cleanup to headings of 3d examples.) +* :ghpull:`13521`: Small cleanup to headings of 3d examples. +* :ghpull:`13519`: Backport PR #12716 on branch v3.1.x (FIX: return the actual ax.get_window_extent) +* :ghpull:`13518`: Backport PR #12839 on branch v3.1.x (BUG: Prevent Tick params calls from overwriting visibility without being told to) +* :ghpull:`12716`: FIX: return the actual ax.get_window_extent +* :ghpull:`12839`: BUG: Prevent Tick params calls from overwriting visibility without being told to +* :ghpull:`13517`: Fix heading hierarchy in annotation tutorial. +* :ghpull:`13516`: Backport PR #13514 on branch v3.1.x (Add missing show() at end of example.) +* :ghpull:`13514`: Add missing show() at end of example. +* :ghpull:`13512`: Backport PR #13511 on branch v3.1.x (Add missing plt.show() at end of example.) +* :ghpull:`13511`: Add missing plt.show() at end of example. +* :ghpull:`13508`: Backport PR #13413 on branch v3.1.x (Simplify decade up- and down-rounding, and symmetrize expansion of degenerate log scales.) +* :ghpull:`13509`: Backport PR #13492 on branch v3.1.x (Doc more release updates) +* :ghpull:`13492`: Doc more release updates +* :ghpull:`13413`: Simplify decade up- and down-rounding, and symmetrize expansion of degenerate log scales. +* :ghpull:`13507`: Backport PR #13488 on branch v3.1.x (Animation: interactive zoom/pan with blitting does not work) +* :ghpull:`13488`: Animation: interactive zoom/pan with blitting does not work +* :ghpull:`13505`: Backport PR #13459 on branch v3.1.x (Document histogramming pre-binned data.) +* :ghpull:`13503`: Backport PR #10776 on branch v3.1.x (fix FancyArrowPatch picker fails depending on arrowstyle) +* :ghpull:`13504`: Backport PR #13123 on branch v3.1.x (Add shading to Axes3D.voxels, and enable it by default) +* :ghpull:`13502`: Backport PR #13180 on branch v3.1.x (Various TextPath cleanups.) +* :ghpull:`13459`: Document histogramming pre-binned data. +* :ghpull:`13501`: Backport PR #13209 on branch v3.1.x (Deprecate support for (n, 1)-shaped error arrays in errorbar().) +* :ghpull:`13500`: Backport PR #12763 on branch v3.1.x (Remove deprecated rcParams.) +* :ghpull:`13123`: Add shading to Axes3D.voxels, and enable it by default +* :ghpull:`13499`: Backport PR #13303 on branch v3.1.x (Unify checking of executable info.) +* :ghpull:`10776`: fix FancyArrowPatch picker fails depending on arrowstyle +* :ghpull:`13180`: Various TextPath cleanups. +* :ghpull:`13498`: Backport PR #13314 on branch v3.1.x (Move major/minor tick overstrike logic to Axis.) +* :ghpull:`13209`: Deprecate support for (n, 1)-shaped error arrays in errorbar(). +* :ghpull:`12763`: Remove deprecated rcParams. +* :ghpull:`13303`: Unify checking of executable info. +* :ghpull:`13497`: Backport PR #13057 on branch v3.1.x (Simplify callable(self._contains) checks) +* :ghpull:`13314`: Move major/minor tick overstrike logic to Axis. +* :ghpull:`13057`: Simplify callable(self._contains) checks +* :ghpull:`13496`: Backport PR #13465 on branch v3.1.x (FIX: polar set_rlim allow bottom-only call) +* :ghpull:`13465`: FIX: polar set_rlim allow bottom-only call +* :ghpull:`13495`: Backport PR #12232 on branch v3.1.x (Add helper function to check that an argument is in a list of strings.) +* :ghpull:`12232`: Add helper function to check that an argument is in a list of strings. +* :ghpull:`11708`: Revert "Skip wx interactive tests on OSX." +* :ghpull:`13062`: Update FAQ re: batch/webserver use. +* :ghpull:`12904`: Support forward/backward mouse buttons +* :ghpull:`12150`: Deprecate \stackrel. +* :ghpull:`13449`: Let boxplot() defer rcParams application to bxp() +* :ghpull:`13425`: API: un-deprecate keyword only args to set_xlim, set_ylim +* :ghpull:`13447`: Update axes_grid docs +* :ghpull:`13473`: Deprecate backend_wx.IDLE_DELAY. +* :ghpull:`13476`: Add font to pyplot.xkcd() +* :ghpull:`13475`: Cleanup titles of embedding examples. +* :ghpull:`13468`: Suppress chaining of cache lookup failure in color conversion. +* :ghpull:`13467`: Add "c" shorthand for "color" for the Text class. +* :ghpull:`13398`: FIX: let pandas IndexInt64 work for boxplot +* :ghpull:`13375`: Improve Axes selection in Qt figure options. +* :ghpull:`13421`: DOC: update release guide +* :ghpull:`13275`: Simple logging interface. +* :ghpull:`13427`: Simplify check for tight-bbox finiteness. +* :ghpull:`13444`: Allow constructing boxplots over multiple calls. +* :ghpull:`13385`: Remove/rework uses of np.where where possible. +* :ghpull:`13441`: Make AFM parser both more compliant and less strict. +* :ghpull:`13384`: Replace np.compress by boolean indexing. +* :ghpull:`13422`: Clarify IndexError for out-of-bounds indexing of gridspec. +* :ghpull:`13443`: Remove some outdated comments from rcsetup.py. +* :ghpull:`13357`: Inherit some docstrings in backend code. +* :ghpull:`12380`: Stem speedup2 +* :ghpull:`13368`: FIX: Fix shape of hist output when input is multidimensional empty list +* :ghpull:`5590`: [mpl_toolkits] Fix picking for things drawn on parasite axes +* :ghpull:`13323`: Move the call to Formatter.set_locs into Formatter.format_ticks. +* :ghpull:`13424`: Deprecate Quiver.color in favor of Quiver.get_facecolor(). +* :ghpull:`13434`: More smoketesting of pcolorfast. +* :ghpull:`13395`: Cleanup demo_curvelinear_grid. +* :ghpull:`13411`: Deemphasize numeric locations for legend() in docs. +* :ghpull:`13419`: FIX: secondary_axis resize +* :ghpull:`13020`: Deprecate proj3d.mod. +* :ghpull:`13030`: Deprecate internal functions exposed in the public API of mplot3d +* :ghpull:`13408`: test_figure style fixes. +* :ghpull:`11127`: Legend for Scatter +* :ghpull:`11855`: Adding the possible to add full command line in animation +* :ghpull:`13409`: Add nonsingular to the locator base class, and use it in set_*lim too. +* :ghpull:`11859`: ENH: add secondary x/y axis +* :ghpull:`13235`: Vectorize mplot3d.art3d.zalpha. +* :ghpull:`10411`: New "accepts units" decorator +* :ghpull:`13403`: FIX: remove idle_event +* :ghpull:`13069`: 5 minor divisions when major ticks are 2.5 units apart +* :ghpull:`13402`: Fix empty reshape2d +* :ghpull:`11683`: Reuse axes_grid1's AxisDict in axisartist, instead of duplicating it. +* :ghpull:`12141`: Let digits toggle axes nav only if they correspond to an existing axes. +* :ghpull:`9845`: Add inaxes method to FigureCanvas to check whether point is in an axes. +* :ghpull:`13396`: mpl_toolkits style fixes. +* :ghpull:`11497`: Make CI fail if interactive toolkits can't be tested +* :ghpull:`11595`: test doc rendering +* :ghpull:`13393`: Deprecate Spine.is_frame_like. +* :ghpull:`13391`: Remove colour specification from some examples +* :ghpull:`13386`: Replace use of np. by operators () silently doing nothing. +* :ghpull:`13166`: Simplify Text.get_usetex. +* :ghpull:`13188`: Remove an outdated doc point regarding backend selection. +* :ghpull:`13107`: Cleanup BboxBase docstrings. +* :ghpull:`13108`: Capitalize some docstrings. +* :ghpull:`13115`: Check for sphinx_copybutton when building the docs +* :ghpull:`13151`: Update RadioButtons docs numpydoc style +* :ghpull:`13178`: Remove :func: markup from mlab docstrings. +* :ghpull:`7461`: [WIP] add matrix checking function for quiver input +* :ghpull:`13089`: Ensure that arguments to quiver() are not matrices. +* :ghpull:`13179`: Avoid calling a deprecated API in axis_artist. +* :ghpull:`13170`: Don't try to find TeX-only fonts when layouting TeX text. +* :ghpull:`12957`: Search also for user fonts on Windows (#12954) +* :ghpull:`12951`: Make Text._get_layout simpler to follow. +* :ghpull:`11385`: Add a get_zaxis method for 3d axes. +* :ghpull:`13172`: Hyperlink DOIs to preferred resolver +* :ghpull:`13171`: Document how to make colorbars "without" a ScalarMappable. +* :ghpull:`12903`: FIX: (broken)bar(h) math before units +* :ghpull:`13167`: Typos on subplot comments and example +* :ghpull:`13005`: Improve error messages for unit conversion +* :ghpull:`13147`: Extend joinstyle example +* :ghpull:`13165`: Change doc string for Axes.arrow() +* :ghpull:`13155`: Let ffmpeg report errors. +* :ghpull:`13149`: Update errorbar limits example +* :ghpull:`13074`: Move _windowing extension into _tkagg. +* :ghpull:`13146`: Remove an outdated comment in backend_wx. +* :ghpull:`13126`: FIX: minor log ticks overwrite +* :ghpull:`13148`: Update example Step Demo +* :ghpull:`13138`: API: Use class-based directive in sphinxext +* :ghpull:`11894`: add ``cache_frame_data`` kwarg into ``FuncAnimation``. fixes #8528. +* :ghpull:`13136`: Small cleanups. +* :ghpull:`13140`: Remove an "cannot show figure in agg" warning in test suite. +* :ghpull:`13134`: Simplify color conversion backcompat shim. +* :ghpull:`13141`: Unpin pytest (pytest-cov's latest release is compatible with it). +* :ghpull:`13133`: Simplify the polys3d example. +* :ghpull:`12158`: MNT: simplify valid tick logic +* :ghpull:`9867`: Factor out common code between pdf and ps backends. +* :ghpull:`10111`: Add set_data_3d and get_data_3d to Line3d +* :ghpull:`12245`: Remove (some) features deprecated in mpl2.2 +* :ghpull:`13119`: Deprecate TextToPath.glyph_to_path. +* :ghpull:`13122`: Pin pytest<4.1 to unbreak CI tests +* :ghpull:`13100`: Restore the font cache on Travis. +* :ghpull:`12792`: BUG: Ensure that distinct polygon collections are shaded identically +* :ghpull:`13070`: cairo backend: default to pycairo +* :ghpull:`13114`: BUG: calculate colorbar boundaries correctly from values +* :ghpull:`13111`: Delete an unused private method. +* :ghpull:`10841`: ENH: new date formatter +* :ghpull:`13093`: Remove unused fontconfig conf file. +* :ghpull:`13063`: Use default colour cycle in more examples +* :ghpull:`13103`: Remove tight_bbox_test example. +* :ghpull:`13097`: Replace 1-tuples by scalars where possible. +* :ghpull:`13027`: Qt5 reset signals after non-interactive plotting +* :ghpull:`9787`: Support (first font of) TTC files. +* :ghpull:`11780`: ENH: Allow arbitrary coordinates for ConnectionPatch +* :ghpull:`12943`: Update the font_table example. +* :ghpull:`13091`: Improve MouseEvent str(). +* :ghpull:`13095`: Remove a duplicate attribute setting. +* :ghpull:`13090`: Cleanup unused non-public imports. +* :ghpull:`13060`: Move doc-requirements from root folder +* :ghpull:`13078`: Convert streamplot to numpydoc +* :ghpull:`13088`: Don't use deprecated np.random.random_integers. +* :ghpull:`13073`: Drop pytest version check in setupext.py. +* :ghpull:`12933`: Deprecate backend_pgf.LatexManagerFactory. +* :ghpull:`12969`: Clarify the implementation of _process_plot_var_args. +* :ghpull:`12472`: Make FontManager.defaultFont a property, to avoid hardcoding the prefix. +* :ghpull:`11806`: Allow to not draw the labels on pie chart +* :ghpull:`11983`: Simplify version checks for freetype and libpng. +* :ghpull:`13050`: FIX: always eraseRect in Qt widget +* :ghpull:`13065`: FIX: print out the correct ip address when starting webagg +* :ghpull:`13061`: Make examples that load msft.csv robust against locale changes. +* :ghpull:`13042`: cairo: remove the append_path() fast path +* :ghpull:`13058`: pathlibify/cleanup triage_tests.py. +* :ghpull:`12995`: Don't split creation of deprecation message and choice of warning class. +* :ghpull:`12998`: Init MaxNLocator params only once +* :ghpull:`11691`: Make Figure.frameon a thin wrapper for the patch visibility. +* :ghpull:`11735`: Change {FigureCanvasAgg,RendererAgg}.buffer_rgba to return a memoryview. +* :ghpull:`12831`: Reuse scale from sharing axis when calling cla(). +* :ghpull:`12962`: Deprecate setting the same property under two different aliases. +* :ghpull:`12973`: Fix item check for pandas Series +* :ghpull:`13049`: Add boxplot.flierprops.markeredgewidth rcParam +* :ghpull:`13048`: Fix section names for numpydoc +* :ghpull:`10928`: Simplify (quite a bit...) _preprocess_data +* :ghpull:`13039`: Speed up Path.iter_segments() +* :ghpull:`12992`: Adding rcParams[т€˜scatter.edgecolorsт€™] defaulting to т€˜faceт€™ +* :ghpull:`13014`: Drop pgi support for the GTK3 backend +* :ghpull:`12215`: Cleanup initialization in text() +* :ghpull:`13029`: Fix vertical alignment of text +* :ghpull:`12968`: Simpler and stricter process_plot_format. +* :ghpull:`12989`: Avoid spamming tests with warnings re: deprecation of pprint_val. +* :ghpull:`13032`: fix typo in docstring in ``axis_artist.py`` +* :ghpull:`13025`: MNT: add one more alias for tacaswell to mailmap +* :ghpull:`13010`: Fix a format error in documenting_mpl.rst +* :ghpull:`12997`: Add sphinx-copybutton to docs +* :ghpull:`12422`: Scatter color: moving #10809 forward +* :ghpull:`12999`: Format MaxNLocator with numpydoc +* :ghpull:`12991`: Canonicalize weights extracted for AFM fonts. +* :ghpull:`12955`: Cleanup cursor_demo. +* :ghpull:`12984`: Cleanup GTK examples. +* :ghpull:`12986`: Minor cleanup to double_pendulum example. +* :ghpull:`12959`: Update the documentation of Cursor +* :ghpull:`12945`: Correctly get weight & style hints from certain newer Microsoft fonts +* :ghpull:`12976`: ENH: replace deprecated numpy header +* :ghpull:`12975`: Fail-fast when trying to run tests with too-old pytest. +* :ghpull:`12970`: Minor simplifications. +* :ghpull:`12974`: Remove some checks for Py<3.6 in the test suite. +* :ghpull:`12779`: Include scatter plots in Qt figure options editor. +* :ghpull:`12459`: Improve formatting of imshow() cursor data when a colorbar exists. +* :ghpull:`12927`: MAINT: Correctly handle empty lists in zip unpacking in mplot3d.art3d +* :ghpull:`12919`: Suppress deprecation warning when testing drawstyle conflict +* :ghpull:`12956`: Misc. cleanups. +* :ghpull:`12924`: Deprecate public use of Formatter.pprint_val. +* :ghpull:`12947`: Support ~ as nonbreaking space in mathtext. +* :ghpull:`12944`: Fix the title of testing_api +* :ghpull:`12136`: MAINT: Unify calculation of normal vectors from polygons +* :ghpull:`12880`: More table documentation +* :ghpull:`12940`: Avoid pyplot in showcase examples. +* :ghpull:`12935`: os.PathLike exists on all supported Pythons now. +* :ghpull:`12936`: Minor updates following bump to Py3.6+. +* :ghpull:`12932`: Simplify argument checking in Table.__getitem__. +* :ghpull:`12930`: Shorten an argument check. +* :ghpull:`12538`: MNT: drop 3.5 testing for 3.1 branch +* :ghpull:`12868`: Simplify use of Path._fast_from_codes_and_verts. +* :ghpull:`12300`: API: Polar: allow flipped y/rlims.... +* :ghpull:`12861`: Don't use deprecated wx.NewId(). +* :ghpull:`12908`: Allow all valid hist.bins strings to be set in the rcparams +* :ghpull:`12902`: Kill dead code in textpath. +* :ghpull:`12885`: Improve margins in formlayout +* :ghpull:`12877`: fooImage -> foo_image in testing/compare.py +* :ghpull:`12845`: Deprecate silent dropping of unknown arguments to TextPath(). +* :ghpull:`12852`: Cleanup collections docs. +* :ghpull:`12888`: Properly enable forward/backward buttons on GTK3 +* :ghpull:`12865`: Avoid 1-tick or 0-tick log-scaled axis. +* :ghpull:`12844`: Remove unused, private _process_text_args. +* :ghpull:`12881`: Fix string comparison +* :ghpull:`12863`: FIX: translate timedeltas in _to_ordinalf +* :ghpull:`12640`: Introduce MouseButton enum for MouseEvent. +* :ghpull:`12897`: Reword a bit the contour docs. +* :ghpull:`12898`: Validate rcParams["image.origin"]. +* :ghpull:`12882`: Write error messages to logger instead of stderr +* :ghpull:`12889`: Deprecate public access to the vendored formlayout module. +* :ghpull:`12891`: Add Azure Pipelines build badge +* :ghpull:`12883`: MAINT Use list comprehension +* :ghpull:`12886`: Properly enable forward/backward buttons on Qt +* :ghpull:`12858`: Bump oldest supported numpy to 1.11. +* :ghpull:`12876`: Fix a typo +* :ghpull:`12739`: make Axes._parse_scatter_color_args static +* :ghpull:`12846`: Deprecate Path.has_nonfinite. +* :ghpull:`12829`: Remove unused variables +* :ghpull:`12872`: Inline references to RendererPS in backend_ps. +* :ghpull:`12800`: documenting dtype of hist counts +* :ghpull:`12842`: Fix message in nbagg connection_info() +* :ghpull:`12855`: Cleanup axes/_base.py. +* :ghpull:`12826`: Minor code cleanup +* :ghpull:`12866`: Simplify stride calculations in loglocator. +* :ghpull:`12867`: Drop compat code for outdated MSVC. +* :ghpull:`12218`: Improve table docs +* :ghpull:`12847`: correctly format ticklabels when EngFormatter is used with usetex = True +* :ghpull:`12851`: Keep Collections and Patches property aliases in sync. +* :ghpull:`12849`: Update docstrings in path.py, and small cleanups. +* :ghpull:`12805`: Don't insert spurious newlines by joining tex.preamble. +* :ghpull:`12827`: Remove unused imports +* :ghpull:`12560`: Add matplotlib.testing to the documentation +* :ghpull:`12821`: MNT: remove debug from update_title_pos +* :ghpull:`12764`: Cleanup Renderer/GraphicsContext docs. +* :ghpull:`12759`: Warn on FreeType missing glyphs. +* :ghpull:`12799`: Reword some colorbar docs. +* :ghpull:`12633`: Added support for MacOSX backend for PyPy +* :ghpull:`12798`: Replace assignments to array.shape by calls to reshape(). +* :ghpull:`11851`: Simpler check for whether a Framework Python build is being used. +* :ghpull:`12259`: BUG: Fix face orientations of bar3d +* :ghpull:`12565`: Make FontManager.score_weight less lenient. +* :ghpull:`12674`: Allow "real" LaTeX code for pgf.preamble in matplotlibrc +* :ghpull:`12770`: Simplify implementation of FontProperties.copy(). +* :ghpull:`12753`: MNT: remove _hold shims to support basemap + cartopy +* :ghpull:`12450`: Attach a FigureCanvasBase by default to Figures. +* :ghpull:`12643`: Allow unit input to FancyArrowPatch +* :ghpull:`12767`: Make colorbars constructible with dataless ScalarMappables. +* :ghpull:`12526`: Rename jquery files +* :ghpull:`12552`: Update docs for writing image comparison tests. +* :ghpull:`12746`: Use skipif, not xfail, for uncomparable image formats. +* :ghpull:`12747`: Prefer log.warning("%s", ...) to log.warning("%s" % ...). +* :ghpull:`11753`: FIX: Apply aspect before drawing starts +* :ghpull:`12749`: Move toolmanager warning from logging to warning. +* :ghpull:`12598`: Support Cn colors with n>=10. +* :ghpull:`12727`: Reorder API docs: separate file per module +* :ghpull:`12738`: Add unobtrusive depreaction note to the first line of the docstring. +* :ghpull:`11663`: Refactor color parsing of Axes.scatter +* :ghpull:`12736`: Move deprecation note to end of docstring +* :ghpull:`12704`: Rename tkinter import from Tk to tk. +* :ghpull:`12715`: Cleanup dviread. +* :ghpull:`12717`: Delete some ``if __name__ == "__main__"`` clauses. +* :ghpull:`10575`: FIX patch.update_from to also copy _original_edge/facecolor +* :ghpull:`12537`: Improve error message on failing test_pyplot_up_to_date +* :ghpull:`12721`: Make get_scale_docs() internal +* :ghpull:`12706`: Extend sphinx Makefile to cleanup completely +* :ghpull:`12481`: Warn if plot_surface Z values contain NaN +* :ghpull:`12685`: Make ticks in demo_axes_rgb.py visible +* :ghpull:`12523`: Run flake8 before pytest on travis +* :ghpull:`12691`: DOC: Link to "How to make a PR" tutorials as badge and in contributing +* :ghpull:`11974`: Make code match comment in sankey. +* :ghpull:`12440`: Make arguments to @deprecated/warn_deprecated keyword-only. +* :ghpull:`12470`: Update AutoDateFormatter with locator +* :ghpull:`12586`: Improve linestyles example +* :ghpull:`12006`: Replace warnings.warn with cbook._warn_external or logging.warning +* :ghpull:`12659`: Add note that developer discussions are private +* :ghpull:`12543`: Make rcsetup.py flak8 compliant +* :ghpull:`12642`: Don't silence TypeErrors in fmt_{x,y}data. +* :ghpull:`12442`: Deprecate passing drawstyle with linestyle as single string. +* :ghpull:`12625`: Shorten some docstrings. +* :ghpull:`12627`: Be a bit more stringent on invalid inputs. +* :ghpull:`12629`: Fix issue with PyPy on macOS +* :ghpull:`10933`: Remove "experimental" fontconfig font_manager backend. +* :ghpull:`12600`: Minor style fixes. +* :ghpull:`12570`: Fix mathtext tutorial for build with Sphinx 1.8. +* :ghpull:`12487`: Update docs/tests for the deprecation of aname and label1On/label2On/etc. +* :ghpull:`12521`: Improve docstring of draw_idle() +* :ghpull:`12574`: Remove some unused imports +* :ghpull:`12568`: Add note regarding builds of old Matplotlibs. +* :ghpull:`12547`: Disable sticky edge accumulation if no autoscaling. +* :ghpull:`12546`: Avoid quadratic behavior when accumulating stickies. +* :ghpull:`11789`: endless looping GIFs with PillowWriter +* :ghpull:`12525`: Fix some flake8 issues +* :ghpull:`12516`: Don't handle impossible values for ``align`` in hist() +* :ghpull:`12500`: Adjust the widths of the messages during the build. +* :ghpull:`12492`: Simplify radar_chart example. +* :ghpull:`11984`: Strip out pkg-config machinery for agg and libqhull. +* :ghpull:`12463`: Document Artist.cursor_data() parameter +* :ghpull:`12482`: Test slider orientation +* :ghpull:`12317`: Always install mpl_toolkits. +* :ghpull:`12246`: Be less tolerant of broken installs. +* :ghpull:`12477`: Use \N{MICRO SIGN} instead of \N{GREEK SMALL LETTER MU} in EngFormatter. +* :ghpull:`12483`: Kill FontManager.update_fonts. +* :ghpull:`12474`: Throw ValueError when irregularly gridded data is passed to streamplot. +* :ghpull:`12466`: np.fromstring -> np.frombuffer. +* :ghpull:`12369`: Improved exception handling on animation failure +* :ghpull:`12460`: Deprecate RendererBase.strip_math. +* :ghpull:`12453`: Rollback erronous commit to whats_new.rst from #10746 +* :ghpull:`12452`: Minor updates to the FAQ. +* :ghpull:`10746`: Adjusted matplotlib.widgets.Slider to have optional vertical orientatation +* :ghpull:`12441`: Get rid of a signed-compare warning. +* :ghpull:`12430`: Deprecate Axes3D.plot_surface(shade=None) +* :ghpull:`12435`: Fix numpydoc parameter formatting +* :ghpull:`12434`: Clarify documentation for textprops keyword parameter of TextArea +* :ghpull:`12427`: Document Artist.get_cursor_data +* :ghpull:`10322`: Use np.hypot whereever possible. +* :ghpull:`10809`: Fix for scatter not showing points with valid x/y but invalid color +* :ghpull:`12423`: Minor simplifications to backend_svg. +* :ghpull:`10356`: fix detecting which artist(s) the mouse is over +* :ghpull:`10268`: Dvi caching +* :ghpull:`10238`: Call kpsewhich with more arguments at one time +* :ghpull:`10236`: Cache kpsewhich results persistently +* :ghpull:`4675`: Deprecate color keyword argument in scatter +* :ghpull:`5054`: Diverging norm +* :ghpull:`12416`: Move font cache rebuild out of exception handler +* :ghpull:`4762`: Traitlets +* :ghpull:`5414`: WIP: New FreeType wrappers +* :ghpull:`3875`: ENH: passing colors (and other optional keyword arguments) to violinplot() +* :ghpull:`1959`: PS backend optionally jpeg-compresses the embedded images +* :ghpull:`11891`: Group some print()s in backend_ps. +* :ghpull:`12165`: Remove deprecated mlab code +* :ghpull:`12387`: Update HTML animation as slider is dragged +* :ghpull:`12333`: ENH: add colorbar method to axes +* :ghpull:`10088`: Deprecate Tick.{gridOn,tick1On,label1On,...} in favor of set_visible. +* :ghpull:`12393`: Deprecate to-days converters in matplotlib dates +* :ghpull:`11232`: FIX: fix figure.set_dpi when pixel ratio not 1 +* :ghpull:`12247`: Machinery for deprecating properties. +* :ghpull:`12371`: Move check for ImageMagick Windows path to bin_path(). +* :ghpull:`12384`: Cleanup axislines style. +* :ghpull:`9565`: Stem performance boost +* :ghpull:`12368`: Don't use stdlib private API in animation.py. +* :ghpull:`12351`: dviread: find_tex_file: Ensure the encoding on windows +* :ghpull:`12372`: Remove two examples. +* :ghpull:`12356`: Fix stripping of CRLF on Windows. +* :ghpull:`12283`: FIX: errorbar xywhere should return ndarray +* :ghpull:`12304`: TST: Merge Qt tests into one file. +* :ghpull:`12340`: Catch test deprecation warnings for mlab.demean +* :ghpull:`12296`: Make FooConverter inherit from ConversionInterface in examples +* :ghpull:`12309`: Deduplicate implementations of FooNorm.autoscale{,_None} +* :ghpull:`7716`: [NF] Add 'truncate' and 'join' methods to colormaps. +* :ghpull:`12314`: Deprecate ``axis('normal')`` in favor of ``axis('auto')``. +* :ghpull:`12307`: Clarify missing-property error message. +* :ghpull:`12260`: Fix docs : change from issue #12191, remove "if 1:" blocks in examples +* :ghpull:`12253`: Handle utf-8 output by kpathsea on Windows. +* :ghpull:`12292`: TST: Modify the bar3d test to show three more angles +* :ghpull:`12284`: Don't try to autoscale if no data present to autoscale to +* :ghpull:`12255`: Deduplicate inherited docstrings. +* :ghpull:`12222`: Remove extraneous if 1 statements in demo_axisline_style.py +* :ghpull:`12137`: MAINT: Vectorize bar3d +* :ghpull:`12219`: Merge OSXInstalledFonts into findSystemFonts. +* :ghpull:`12229`: Less ACCEPTS, more numpydoc. +* :ghpull:`11621`: TST: make E402 a universal flake8 ignore +* :ghpull:`12231`: CI: Speed up Appveyor repository cloning +* :ghpull:`11661`: Update blocking_input.py +* :ghpull:`12199`: Allow disabling specific mouse actions in blocking_input +* :ghpull:`12210`: Axes.tick_params() argument checking +* :ghpull:`12211`: Fix typo +* :ghpull:`12200`: Slightly clarify some invalid shape exceptions for image data. +* :ghpull:`12151`: Don't pretend @deprecated applies to classmethods. +* :ghpull:`12190`: Remove some unused variables and imports +* :ghpull:`12192`: Exclude examples from lgtm analysis +* :ghpull:`12196`: Give Carreau the ability to mention the backport bot. +* :ghpull:`12171`: Remove internal warning due to zsort deprecation +* :ghpull:`12030`: Speed up canvas redraw for GTK3Agg backend. +* :ghpull:`12156`: Cleanup the GridSpec demos. +* :ghpull:`12144`: Add explicit getters and setters for Annotation.anncoords. +* :ghpull:`12152`: Use _warn_external for deprecations warnings. +* :ghpull:`12147`: DOC: update the gh_stats code +* :ghpull:`12139`: Unbreak build re: mplot3d style. +* :ghpull:`11367`: Raise TypeError on unsupported kwargs of spy() +* :ghpull:`9990`: Fix and document lightsource argument in mplot3d +* :ghpull:`12124`: Correctly infer units from emtpy arrays +* :ghpull:`11994`: Cleanup unused variables and imports +* :ghpull:`12122`: MNT: re-add cbook import art3d +* :ghpull:`12086`: FIX: make MaxNLocator only follow visible ticks for order of magnitude +* :ghpull:`12032`: Remove unused imports +* :ghpull:`12093`: Correct the removal of -Wstrict-prototypes from compiler flags. +* :ghpull:`12069`: Style fixes for mplot3d. +* :ghpull:`11997`: Cleanup some axes_grid1 examples +* :ghpull:`12098`: Improve layout of HTML animation +* :ghpull:`12094`: Fine-tune logging notes in contributing.rst. +* :ghpull:`12079`: Clarifications to **im_show()** doc regarding *interpolation='none'*. +* :ghpull:`12068`: More style fixes. +* :ghpull:`11499`: FIX: layout for mixed descent multiline text objects +* :ghpull:`11921`: FIX: allow reshape 2-D to return a bare 1-d list +* :ghpull:`12070`: Avoid some uses of np.isscalar. +* :ghpull:`12067`: DOC: make Line2D docstring definition easier to find +* :ghpull:`12054`: More style fixes. +* :ghpull:`12066`: fix indentation in docstring interpolation for spy. +* :ghpull:`11931`: Remove separate autosummary_inher template. +* :ghpull:`12049`: Make Poly3DCollection.set_zsort less lenient. +* :ghpull:`12050`: Various cleanups. +* :ghpull:`12038`: Modernize ArtistInspector a bit... +* :ghpull:`12033`: DOC: formatting fixes to mplot3d +* :ghpull:`12051`: Is bool +* :ghpull:`12045`: Fix 999.9... edge case in ticker.EngFormatter for negative numbers +* :ghpull:`12044`: Update doc on the *progressive* and *optimize* keywords in savefig +* :ghpull:`12061`: Small refactor/simplification. +* :ghpull:`12060`: INSTALL.rst fixes +* :ghpull:`12055`: Fix invalid escape in docstring. +* :ghpull:`12026`: whitespace(-mostly) style cleanup. +* :ghpull:`12043`: Deprecate get_py2exe_datafiles. +* :ghpull:`12046`: Make HTMLWriter constructor a bit more strict. +* :ghpull:`12034`: Doc markup fixes. +* :ghpull:`11972`: FIX: close mem leak for repeated draw +* :ghpull:`12024`: Fix typos +* :ghpull:`11996`: Minor javascript cleanup +* :ghpull:`11989`: Remove support for ghostscript 8.60. +* :ghpull:`12004`: Update acorr and xcorr docs to match numpy docs +* :ghpull:`11998`: No clf() needed after creating a figure +* :ghpull:`12001`: Do not use an explicit figum in plt.figure(1, ...) in simple cases +* :ghpull:`11999`: Do not use an explicit fignum plt.figure(1) in simple cases +* :ghpull:`11995`: Don't use bare except statements +* :ghpull:`11993`: DOC: fixed typos +* :ghpull:`11992`: Use pytest.warns instead of home-baked warnings capture. +* :ghpull:`11975`: Derive plt.figlegend.__doc__ from Figure.legend.__doc__. +* :ghpull:`11980`: Remove __version__numpy__; simplify dependencies check. +* :ghpull:`11982`: Remove and old keyword documentation. +* :ghpull:`11981`: Some extra typos +* :ghpull:`11979`: Fix a couple of typoes. +* :ghpull:`11959`: cbook.iterable -> np.iterable. +* :ghpull:`11965`: Move the removal of the -Wstrict-prototypes flag to setup.py. +* :ghpull:`11958`: Remove unused code +* :ghpull:`11960`: Make jpl_units a bit less painful to read. +* :ghpull:`11951`: Improve Artist docstrings +* :ghpull:`11954`: No need to define _log twice in matplotlib.dates. +* :ghpull:`11948`: Minor fixes to docs and gitignore. +* :ghpull:`11777`: Avoid incorrect warning in savefig +* :ghpull:`11942`: Deprecate Artist.aname and Axes.aname +* :ghpull:`11935`: Remove ginput demo example +* :ghpull:`11939`: Improve alias signatures +* :ghpull:`11940`: Do not use aliases of properties in internal code +* :ghpull:`11941`: Fix test_large_subscript_title() +* :ghpull:`11938`: More docstring cleanup of Line2D. +* :ghpull:`11920`: Add LGTM.com code quality badge +* :ghpull:`11922`: Improve docstrings of Line2D +* :ghpull:`11924`: Minor formatting update on alias docstrings +* :ghpull:`11926`: Minor fix to ginput_demo. +* :ghpull:`11912`: BLD: update PR template for flake8 +* :ghpull:`11909`: Simplify linestyle and fillstyle reference docs. +* :ghpull:`11502`: FIX: move title(s) up if subscripts hang too low. +* :ghpull:`11906`: fix format of bar_of_pie example +* :ghpull:`11741`: Factor out common code between Patch.draw and FancyArrowPatch.draw. +* :ghpull:`11784`: Argument checking for grid() +* :ghpull:`11888`: Factor out a subprocess log-and-check helper. +* :ghpull:`11740`: Deprecate support for 3rd-party backends without set_hatch_color. +* :ghpull:`11884`: Deprecate the tk_window_focus function. +* :ghpull:`11689`: Don't cache the renderer on the Axes instance. +* :ghpull:`11698`: For property, use decorator or lambdas. +* :ghpull:`11872`: Make all builtin cmaps picklable. +* :ghpull:`11870`: More style fixes. +* :ghpull:`11873`: Remove mention of deprecated/removed methods from mlab's docstring. +* :ghpull:`11869`: Style fixes. +* :ghpull:`11874`: Remove some remnants of Py2-handling in test_rcparams. +* :ghpull:`11865`: example file for making a bar of pie chart +* :ghpull:`11868`: mathtext.py style fixes. +* :ghpull:`11854`: Accept anything that's not a directory for $MATPLOTLIBRC. +* :ghpull:`11589`: WIP ENH secondary axes: +* :ghpull:`8449`: Including Additional Metadata using the SVG Backend +* :ghpull:`11465`: ENH: optimize Collection non-affine transform to call transform once + +Issues (161): + +* :ghissue:`4001`: Qt5 Backend: dblclick is always False on 'mouse_release_event' +* :ghissue:`14152`: qt_compat.py performing wrong test for PyQt5 +* :ghissue:`10875`: Annotation.contains and FancyArrow.contains return incorrect values +* :ghissue:`458`: JPG quality keyword in savefig +* :ghissue:`4354`: scatter not showing valid x/y points with invalid color +* :ghissue:`14113`: scatter could not raise when colors are provided but position data are empty +* :ghissue:`14003`: numpydoc 0.9 breaks doc build +* :ghissue:`14054`: ticks sometimes disappear when zooming interactively +* :ghissue:`10189`: The data decorator does not integrate well with numpydoc +* :ghissue:`14034`: pyplot plot raises ValueError when plotting NaN against datetime dates +* :ghissue:`14039`: bar plot yerr lines/caps should respect zorder +* :ghissue:`14042`: dynamic_image.py + saving animation broken +* :ghissue:`14013`: osx backend not usable with ipython/jupyter from conda? +* :ghissue:`13993`: Tests files installed by default? +* :ghissue:`13991`: MaxNLocator.default_params deprecation may break Cartopy +* :ghissue:`5045`: Axes.grid() not honoring specified "zorder" kwarg +* :ghissue:`4371`: LaTeX and PGF preambles do not allow commas +* :ghissue:`13982`: hist() no longer respects range=... when density=True +* :ghissue:`13963`: Dataless colorbars break when updated +* :ghissue:`10381`: Issue when setting scatter color in separate method call +* :ghissue:`13618`: Minor ticklabels are missing at positions of major ticks. +* :ghissue:`13880`: Adding documentation for Text.fontfamily default, set_fontfamily(None)? +* :ghissue:`13865`: Appveyor broken +* :ghissue:`8636`: plt.hist chooses improper range when using string-based bin options +* :ghissue:`7300`: weird mathtext doc markup +* :ghissue:`8862`: Replace \mathcircled by \textcircled +* :ghissue:`13759`: DOC: matplotlib.patches.Arc +* :ghissue:`13785`: Imshow gives values out of the extent +* :ghissue:`13786`: Cannot import matplotlib.animation +* :ghissue:`13561`: Progress of animation.save (for long animations) +* :ghissue:`13735`: title doesn't move for ticklables.... +* :ghissue:`12175`: Example link near markevery in the "What's new in 3.0" page is malformed/broken +* :ghissue:`13713`: Boxplot xlim not correctly calculated +* :ghissue:`11070`: Add a "density" kwarg to hist2d +* :ghissue:`11337`: Cannot plot fully masked array against datetimes +* :ghissue:`10165`: Adapt stem plot +* :ghissue:`10976`: ENH: secondary axis for a x or y scale. +* :ghissue:`10763`: Cairo in 2.2.0 not working for new backends +* :ghissue:`9737`: setupext should not explicitly add /usr/{,local/}include to the include path +* :ghissue:`11217`: Crash on zero-length FancyArrow +* :ghissue:`13623`: do not cause warning in seaborn +* :ghissue:`13480`: Segfault on help('modules') command when matplotlib is installed +* :ghissue:`13604`: legend's framealpha kwarg does not apply when writing to an eps file +* :ghissue:`12311`: 'off' vs. False bug +* :ghissue:`10237`: Setting an alpha value to a Poly3DCollection +* :ghissue:`11781`: fill_between interpolation & nan issue +* :ghissue:`1077`: 3d plots with aspect='equal' +* :ghissue:`11761`: Still naming inconsistency in API on axes limits +* :ghissue:`11623`: Regression: "TypeError: Period('2000-12-31', 'D') is not a string" when a Series with date index was plotted +* :ghissue:`12655`: auto-ticks do not handle values near bounds gracefully +* :ghissue:`13487`: labelpad is not the spacing between the axis and the label +* :ghissue:`13540`: Docs for matplotlib.pyplot.specgram() reference an unsupported mode setting +* :ghissue:`8997`: Proposal: Grid arrangement by number of plots +* :ghissue:`6928`: Cannot run ``setup.py build`` with numpy master +* :ghissue:`12697`: Axes are drawn at wrong positions +* :ghissue:`13478`: FuncAnimation: interactive zoom/pan with blitting does not work +* :ghissue:`11575`: Setting axis ticks in log scale produces duplicate tick labels. +* :ghissue:`13464`: set_rlim(bottom=...) no longer works +* :ghissue:`12628`: Write canonical example of how to use Matplotlib inside a webserver +* :ghissue:`10022`: boxplot: positions used to take Int64Index +* :ghissue:`11647`: Disable buttons in ginput +* :ghissue:`12987`: issues parsing AFM fonts +* :ghissue:`12667`: Colorbar ticks.... +* :ghissue:`13137`: Travis for Python 3.7 sometimes fails due to missing font +* :ghissue:`7969`: Stem is slow and will crash if I try to close the window +* :ghissue:`13002`: Hist color kwarg broken for multiple empty datasets +* :ghissue:`5581`: [mpl_toolkits] Things drawn on parasite axes don't fire pick events +* :ghissue:`13417`: Secondary axis doesn't resize properly +* :ghissue:`8120`: Inconsistent inset_axes position between show(), savefig(format='png') and savefig(format='pdf') +* :ghissue:`8947`: Different result, slower runtime of heatmap between 2.0.0 and 2.0.1 +* :ghissue:`13264`: Use of logging in matplotlib +* :ghissue:`11602`: animation error +* :ghissue:`12925`: Python pandas datetime plot xticks in unexpected location +* :ghissue:`11025`: AxesGrid ticks missing on x-axis +* :ghissue:`10974`: Examples not shown in API docs for many methods. +* :ghissue:`13392`: boxplot broken for empty inputs +* :ghissue:`12345`: Need more tests for units and errorbar +* :ghissue:`10361`: FigureCanvas.draw() with tight_layout () needs to be called twice with Matplotlib 2.1.0 +* :ghissue:`11376`: Temporary styling ignores color cycle +* :ghissue:`11546`: import time +* :ghissue:`13286`: AttributeError: 'float' object has no attribute 'deg2rad' +* :ghissue:`11508`: bi-directional perceptually flat colormaps in matplotlib? +* :ghissue:`12918`: Mac shows an icon in the dock when using matplotlib.pyplot. +* :ghissue:`13339`: Log Colorbar minorticks_off reverted if ticks set... +* :ghissue:`13228`: MPL 3 + Colorbar + PowerNorm bug +* :ghissue:`13096`: Matplotlib.get_backend()/matplotlib.use() cause NSException with Anaconda +* :ghissue:`7712`: Number of ticks for dates still gives overlapping labels +* :ghissue:`9978`: General poor default formatting of datetimes on plot x-axis +* :ghissue:`13253`: imsave outputs JPEG with wrong dimension +* :ghissue:`11391`: Use data argument for scatter plotting timestamps from pandas +* :ghissue:`13145`: widgets.RadioButtons: select by closest in position +* :ghissue:`13267`: "double-pendulum" example's speed not correct / varying +* :ghissue:`13257`: Allow turning off minorticks for Colorbar with LogNorm? +* :ghissue:`13237`: Sankey basic gallery example is not rendered properly. +* :ghissue:`12836`: matplotlib.rc_file resets to default template before updating rcparams +* :ghissue:`13186`: ax.bar throws when x axis is pandas datetime +* :ghissue:`5397`: Expose compression and filter PNG options through savefig +* :ghissue:`13142`: Cannot plot bar graph with dates: "TypeError: ufunc subtract cannot use operands with types dtype('`. + + +mplot3d Line3D now allows {set,get}_data_3d +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Lines created with the 3d projection in mplot3d can now access the +data using `~.mplot3d.art3d.Line3D.get_data_3d()` which returns a +tuple of array_likes containing the (x, y, z) data. The equivalent +`~.mplot3d.art3d.Line3D.set_data_3d` can be used to modify the data of +an existing Line3D. + + +``Axes3D.voxels`` now shades the resulting voxels +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The :meth:`~mpl_toolkits.mplot3d.Axes3D.voxels` method now takes a +*shade* parameter that defaults to `True`. This shades faces based +on their orientation, behaving just like the matching parameters to +:meth:`~mpl_toolkits.mplot3d.Axes3D.trisurf` and +:meth:`~mpl_toolkits.mplot3d.Axes3D.bar3d`. The plot below shows how +this affects the output. + +.. plot:: + + import matplotlib.pyplot as plt + import numpy as np + + # prepare some coordinates + x, y, z = np.indices((8, 8, 8)) + + # draw cuboids in the top left and bottom right corners, and a link between them + cube1 = (x < 3) & (y < 3) & (z < 3) + cube2 = (x >= 5) & (y >= 5) & (z >= 5) + link = abs(x - y) + abs(y - z) + abs(z - x) <= 2 + + # combine the objects into a single boolean array + voxels = cube1 | cube2 | link + + # set the colors of each object + colors = np.empty(voxels.shape, dtype=object) + colors[link] = 'red' + colors[cube1] = 'blue' + colors[cube2] = 'green' + + # and plot everything + fig = plt.figure(figsize=plt.figaspect(0.5)) + ax, ax_shaded = fig.subplots(1, 2, subplot_kw=dict(projection='3d')) + ax.voxels(voxels, facecolors=colors, edgecolor='k', shade=False) + ax.set_title("Unshaded") + ax_shaded.voxels(voxels, facecolors=colors, edgecolor='k', shade=True) + ax_shaded.set_title("Shaded (default)") + + plt.show() + +Axis and Ticks +-------------- + +Added `.Axis.get_inverted` and `.Axis.set_inverted` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The `.Axis.get_inverted` and `.Axis.set_inverted` methods query and set whether +the axis uses "inverted" orientation (i.e. increasing to the left for the +x-axis and to the bottom for the y-axis). + +They perform tasks similar to `.Axes.xaxis_inverted`, +`.Axes.yaxis_inverted`, `.Axes.invert_xaxis`, and +`.Axes.invert_yaxis`, with the specific difference that +`.Axes..set_inverted` makes it easier to set the invertedness of an +axis regardless of whether it had previously been inverted before. + +Adjust default minor tick spacing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Default minor tick spacing was changed from 0.625 to 0.5 for major ticks spaced +2.5 units apart. + + +`.EngFormatter` now accepts `usetex`, `useMathText` as keyword only arguments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A public API has been added to `EngFormatter` to control how the +numbers in the ticklabels will be rendered. By default, +``useMathText`` evaluates to +:rc:`axes.formatter.use_mathtext'` and ``usetex`` evaluates +to :rc:`'text.usetex'`. + +If either is `True` then the numbers will be encapsulated by ``$`` +signs. When using ``TeX`` this implies that the numbers will be shown +in TeX's math font. When using mathtext, the ``$`` signs around +numbers will ensure unicode rendering (as implied by mathtext). This +will make sure that the minus signs in the ticks are rendered as the +unicode=minus (U+2212) when using mathtext (without relying on the +`~.Fomatter.fix_minus` method). + + + +Animation and Interactivity +--------------------------- + +Support for forward/backward mouse buttons +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Figure managers now support a ``button_press`` event for mouse +buttons, similar to the ``key_press`` events. This allows binding +actions to mouse buttons (see `.MouseButton`) The first application of +this mechanism is support of forward/backward mouse buttons in figures +created with the Qt5 backend. + + +*progress_callback* argument to `~.Animation.save()` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The method `.Animation.save` gained an optional +*progress_callback* argument to notify the saving progress. + + +Add ``cache_frame_data`` keyword-only argument into `.animation.FuncAnimation` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.matplotlib.animation.FuncAnimation` has been caching frame data by +default; however, this caching is not ideal in certain cases e.g. When +`.FuncAnimation` needs to be only drawn(not saved) interactively and +memory required by frame data is quite large. By adding +*cache_frame_data* keyword-only argument, users can now disable this +caching; thereby, this new argument provides a fix for issue +:ghissue:`8528`. + + +Endless Looping GIFs with PillowWriter +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +We acknowledge that most people want to watch a gif more than +once. Saving an animation as a gif with PillowWriter now produces an +endless looping gif. + + +Adjusted `.matplotlib.widgets.Slider` to have vertical orientation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The :class:`matplotlib.widgets.Slider` widget now takes an optional +argument *orientation* which indicates the direction +(``'horizontal'`` or ``'vertical'``) that the slider should take. + +Improved formatting of image values under cursor when a colorbar is present +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When a colorbar is present, its formatter is now used to format the image +values under the mouse cursor in the status bar. For example, for an image +displaying the values 10,000 and 10,001, the statusbar will now (using default +settings) display the values as ``10000`` and ``10001``), whereas both values +were previously displayed as ``1e+04``. + +MouseEvent button attribute is now an IntEnum +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The :attr:`button` attribute of `~.MouseEvent` instances can take the values +None, 1 (left button), 2 (middle button), 3 (right button), "up" (scroll), and +"down" (scroll). For better legibility, the 1, 2, and 3 values are now +represented using the `IntEnum` class `matplotlib.backend_bases.MouseButton`, +with the values `MouseButton.LEFT` (``== 1``), `MouseButton.MIDDLE` (``== 2``), +and `MouseButton.RIGHT` (``== 3``). + + +Configuration, Install, and Development +--------------------------------------- + +The MATPLOTLIBRC environment variable can now point to any "file" path +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This includes device files; in particular, on Unix systems, one can set +``MATPLOTLIBRC`` to ``/dev/null`` to ignore the user's matplotlibrc file and +fall back to Matplotlib's defaults. + +As a reminder, if ``MATPLOTLIBRC`` points to a directory, Matplotlib will try +to load the matplotlibrc file from ``$MATPLOTLIBRC/matplotlibrc``. + + +Allow LaTeX code ``pgf.preamble`` and ``text.latex.preamble`` in MATPLOTLIBRC file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Previously, the rc file keys :rc:`pgf.preamble` and +:rc:`text.latex.preamble` were parsed using commas as separators. This +would break valid LaTeX code, such as:: + + \usepackage[protrusion=true, expansion=false]{microtype} + +The parsing has been modified to pass the complete line to the LaTeX +system, keeping all commas. Passing a list of strings from within a +Python script still works as it used to. + + + +New logging API +~~~~~~~~~~~~~~~ + +`matplotlib.set_loglevel` / `.pyplot.set_loglevel` can be called to +display more (or less) detailed logging output. diff --git a/doc/users/prev_whats_new/whats_new_3.2.0.rst b/doc/users/prev_whats_new/whats_new_3.2.0.rst new file mode 100644 index 000000000000..4044e3a04b08 --- /dev/null +++ b/doc/users/prev_whats_new/whats_new_3.2.0.rst @@ -0,0 +1,126 @@ + +What's new in Matplotlib 3.2 +============================ + +For a list of all of the issues and pull requests since the last +revision, see the :ref:`github-stats`. + +.. contents:: Table of Contents + :depth: 4 + +.. toctree:: + :maxdepth: 4 + + +Unit converters recognize subclasses +------------------------------------ +Unit converters now also handle instances of subclasses of the class they have +been registered for. + +`~.pyplot.imsave` accepts metadata and PIL options +-------------------------------------------------- +`~.pyplot.imsave` has gained support for the ``metadata`` and ``pil_kwargs`` +parameters. These parameters behave similarly as for the `.Figure.savefig()` +method. + +`cbook.normalize_kwargs` +------------------------ +`.cbook.normalize_kwargs` now presents a convenient interface to normalize +artist properties (e.g., from "lw" to "linewidth"): + +>>> cbook.normalize_kwargs({"lw": 1}, Line2D) +{"linewidth": 1} + +The first argument is the mapping to be normalized, and the second argument can +be an artist class or an artist instance (it can also be a mapping in a +specific format; see the function's docstring for details). + +`.FontProperties` accepts `os.PathLike` +--------------------------------------- +The *fname* argument to `.FontProperties` can now be an `os.PathLike`, +e.g. + +>>> FontProperties(fname=pathlib.Path("/path/to/font.ttf")) + +Gouraud-shading alpha channel in PDF backend +-------------------------------------------- +The pdf backend now supports an alpha channel in Gouraud-shaded +triangle meshes. + +Kerning adjustments now use correct values +------------------------------------------ +Due to an error in how kerning adjustments were applied, previous versions of +Matplotlib would under-correct kerning. This version will now correctly apply +kerning (for fonts supported by FreeType). To restore the old behavior (e.g., +for test images), you may set :rc:`text.kerning_factor` to 6 (instead of 0). +Other values have undefined behavior. + +.. plot:: + + import matplotlib.pyplot as plt + + # Use old kerning values: + plt.rcParams['text.kerning_factor'] = 6 + fig, ax = plt.subplots() + ax.text(0.0, 0.05, 'BRAVO\nAWKWARD\nVAT\nW.Test', fontsize=56) + ax.set_title('Before (text.kerning_factor = 6)') + +Note how the spacing between characters is uniform between their bounding boxes +(above). With corrected kerning (below), slanted characters (e.g., AV or VA) +will be spaced closer together, as well as various other character pairs, +depending on font support (e.g., T and e, or the period after the W). + +.. plot:: + + import matplotlib.pyplot as plt + + # Use new kerning values: + plt.rcParams['text.kerning_factor'] = 0 + fig, ax = plt.subplots() + ax.text(0.0, 0.05, 'BRAVO\nAWKWARD\nVAT\nW.Test', fontsize=56) + ax.set_title('After (text.kerning_factor = 0)') + + +bar3d lightsource shading +------------------------- +:meth:`~.Axes3D.bar3d` now supports lighting from different angles when the *shade* +parameter is ``True``, which can be configured using the ``lightsource`` +parameter. + +Shifting errorbars +------------------ +Previously, `.plt.errorbar()` accepted a kwarg ``errorevery`` such that the +command ``plt.errorbar(x, y, yerr, errorevery=6)`` would add error bars to +datapoints ``x[::6], y[::6]``. + +`.plt.errorbar()` now also accepts a tuple for `errorevery` such that +``plt.errorbar(x, y, yerr, errorevery=(start, N))`` adds error bars to points +``x[start::N], y[start::N]``. + +Improvements in Logit scale ticker and formatter +------------------------------------------------ +Introduced in version 1.5, the logit scale didn't have an appropriate ticker and +formatter. Previously, the location of ticks was not zoom dependent, too many labels +were displayed causing overlapping which broke readability, and label formatting +did not adapt to precision. + +Starting from this version, the logit locator has nearly the same behavior as the +locator for the log scale or the linear +scale, depending on used zoom. The number of ticks is controlled. Some minor +labels are displayed adaptively as sublabels in log scale. Formatting is adapted +for probabilities and the precision adapts to the scale. + +rcParams for axes title location and color +------------------------------------------ +Two new rcParams have been added: :rc:`axes.titlelocation` denotes the default axes title +alignment, and :rc:`axes.titlecolor` the default axes title color. + +Valid values for ``axes.titlelocation`` are: left, center, and right. +Valid values for ``axes.titlecolor`` are: auto or a color. Setting it to auto +will fall back to previous behaviour, which is using the color in ``text.color``. + +3-digit and 4-digit hex colors +------------------------------ +Colors can now be specified using 3-digit or 4-digit hex colors, shorthand for +the colors obtained by duplicating each character, e.g. ``#123`` is equivalent to +``#112233`` and ``#123a`` is equivalent to ``#112233aa``. diff --git a/doc/users/whats_new_old.rst b/doc/users/whats_new_old.rst new file mode 100644 index 000000000000..d24992a1b242 --- /dev/null +++ b/doc/users/whats_new_old.rst @@ -0,0 +1,12 @@ + +=================== +Previous What's New +=================== + +.. toctree:: + :glob: + :maxdepth: 1 + :reversed: + + prev_whats_new/changelog + prev_whats_new/whats_new_* diff --git a/examples/images_contours_and_fields/image_antialiasing.py b/examples/images_contours_and_fields/image_antialiasing.py new file mode 100644 index 000000000000..3d2dc32c2ef4 --- /dev/null +++ b/examples/images_contours_and_fields/image_antialiasing.py @@ -0,0 +1,81 @@ +""" +================== +Image Antialiasing +================== + +Images are represented by discrete pixels, either on the screen or in an +image file. When data that makes up the image has a different resolution +than its representation on the screen we will see aliasing effects. + +The default image interpolation in Matplotlib is 'antialiased'. This uses a +hanning interpolation for reduced aliasing in most situations. Only when there +is upsampling by a factor of 1, 2 or >=3 is 'nearest' neighbor interpolation +used. + +Other anti-aliasing filters can be specified in `.Axes.imshow` using the +*interpolation* kwarg. +""" + +import numpy as np +import matplotlib.pyplot as plt + +############################################################################### +# First we generate an image with varying frequency content: +x = np.arange(500) / 500 - 0.5 +y = np.arange(500) / 500 - 0.5 + +X, Y = np.meshgrid(x, y) +R = np.sqrt(X**2 + Y**2) +f0 = 10 +k = 250 +a = np.sin(np.pi * 2 * (f0 * R + k * R**2 / 2)) + + +############################################################################### +# The following images are subsampled from 1000 data pixels to 604 rendered +# pixels. The Moire patterns in the "nearest" interpolation are caused by the +# high-frequency data being subsampled. The "antialiased" image +# still has some Moire patterns as well, but they are greatly reduced. +fig, axs = plt.subplots(1, 2, figsize=(7, 4), constrained_layout=True) +for n, interp in enumerate(['nearest', 'antialiased']): + im = axs[n].imshow(a, interpolation=interp, cmap='gray') + axs[n].set_title(interp) +plt.show() + +############################################################################### +# Even up-sampling an image will lead to Moire patterns unless the upsample +# is an integer number of pixels. +fig, ax = plt.subplots(1, 1, figsize=(5.3, 5.3)) +ax.set_position([0, 0, 1, 1]) +im = ax.imshow(a, interpolation='nearest', cmap='gray') +plt.show() + +############################################################################### +# The patterns aren't as bad, but still benefit from anti-aliasing +fig, ax = plt.subplots(1, 1, figsize=(5.3, 5.3)) +ax.set_position([0, 0, 1, 1]) +im = ax.imshow(a, interpolation='antialiased', cmap='gray') +plt.show() + +############################################################################### +# If the small Moire patterns in the default "hanning" antialiasing are +# still undesireable, then we can use other filters. +fig, axs = plt.subplots(1, 2, figsize=(7, 4), constrained_layout=True) +for n, interp in enumerate(['hanning', 'lanczos']): + im = axs[n].imshow(a, interpolation=interp, cmap='gray') + axs[n].set_title(interp) +plt.show() + + +############################################################################# +# +# ------------ +# +# References +# """""""""" +# +# The use of the following functions and methods is shown +# in this example: + +import matplotlib +matplotlib.axes.Axes.imshow diff --git a/examples/lines_bars_and_markers/horizontal_barchart_distribution.py b/examples/lines_bars_and_markers/horizontal_barchart_distribution.py new file mode 100644 index 000000000000..c851997ad29a --- /dev/null +++ b/examples/lines_bars_and_markers/horizontal_barchart_distribution.py @@ -0,0 +1,91 @@ +""" +============================================= +Discrete distribution as horizontal bar chart +============================================= + +Stacked bar charts can be used to visualize discrete distributions. + +This example visualizes the result of a survey in which people could rate +their agreement to questions on a five-element scale. + +The horizontal stacking is achieved by calling `~.Axes.barh()` for each +category and passing the starting point as the cumulative sum of the +already drawn bars via the parameter ``left``. +""" + +import numpy as np +import matplotlib.pyplot as plt + + +category_names = ['Strongly disagree', 'Disagree', + 'Neither agree nor disagree', 'Agree', 'Strongly agree'] +results = { + 'Question 1': [10, 15, 17, 32, 26], + 'Question 2': [26, 22, 29, 10, 13], + 'Question 3': [35, 37, 7, 2, 19], + 'Question 4': [32, 11, 9, 15, 33], + 'Question 5': [21, 29, 5, 5, 40], + 'Question 6': [8, 19, 5, 30, 38] +} + + +def survey(results, category_names): + """ + Parameters + ---------- + results : dict + A mapping from question labels to a list of answers per category. + It is assumed all lists contain the same number of entries and that + it matches the length of *category_names*. + category_names : list of str + The category labels. + """ + labels = list(results.keys()) + data = np.array(list(results.values())) + data_cum = data.cumsum(axis=1) + category_colors = plt.get_cmap('RdYlGn')( + np.linspace(0.15, 0.85, data.shape[1])) + + fig, ax = plt.subplots(figsize=(9.2, 5)) + ax.invert_yaxis() + ax.xaxis.set_visible(False) + ax.set_xlim(0, np.sum(data, axis=1).max()) + + for i, (colname, color) in enumerate(zip(category_names, category_colors)): + widths = data[:, i] + starts = data_cum[:, i] - widths + ax.barh(labels, widths, left=starts, height=0.5, + label=colname, color=color) + xcenters = starts + widths / 2 + + r, g, b, _ = color + text_color = 'white' if r * g * b < 0.5 else 'darkgrey' + for y, (x, c) in enumerate(zip(xcenters, widths)): + ax.text(x, y, str(int(c)), ha='center', va='center', + color=text_color) + ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1), + loc='lower left', fontsize='small') + + return fig, ax + + +survey(results, category_names) +plt.show() + +############################################################################# +# +# ------------ +# +# References +# """""""""" +# +# The use of the following functions, methods, classes and modules is shown +# in this example: + +import matplotlib +matplotlib.axes.Axes.barh +matplotlib.pyplot.barh +matplotlib.axes.Axes.text +matplotlib.pyplot.text +matplotlib.axes.Axes.legend +matplotlib.pyplot.legend diff --git a/examples/misc/plotfile_demo_sgskip.py b/examples/misc/plotfile_demo_sgskip.py new file mode 100644 index 000000000000..29bc0c1fac31 --- /dev/null +++ b/examples/misc/plotfile_demo_sgskip.py @@ -0,0 +1,170 @@ +""" +========================= +Plotting data from a file +========================= + +Plotting data from a file is actually a two-step process. + +1. Interpreting the file and loading the data. +2. Creating the actual plot. + +`.pyplot.plotfile` tried to do both at once. But each of the steps has so many +possible variations and parameters that it does not make sense to squeeze both +into a single function. Therefore, `.pyplot.plotfile` has been deprecated. + +The recommended way of plotting data from a file is therefore to use dedicated +functions such as `numpy.loadtxt` or `pandas.read_csv` to read the data. These +are more powerful and faster. Then plot the obtained data using matplotlib. + +Note that `pandas.DataFrame.plot` is a convenient wrapper around Matplotlib +to create simple plots. +""" + +import matplotlib.pyplot as plt +import matplotlib.cbook as cbook + +import numpy as np +import pandas as pd + +############################################################################### +# Using pandas +# ============ +# +# Subsequent are a few examples of how to replace `~.pyplot.plotfile` with +# `pandas`. All examples need the the `pandas.read_csv` call first. Note that +# you can use the filename directly as a parameter:: +# +# msft = pd.read_csv('msft.csv') +# +# The following slightly more involved `pandas.read_csv` call is only to make +# automatic rendering of the example work: + +fname = cbook.get_sample_data('msft.csv', asfileobj=False) +with cbook.get_sample_data('msft.csv') as file: + msft = pd.read_csv(file) + +############################################################################### +# When working with dates, additionally call +# `pandas.plotting.register_matplotlib_converters` and use the ``parse_dates`` +# argument of `pandas.read_csv`:: + +pd.plotting.register_matplotlib_converters() + +with cbook.get_sample_data('msft.csv') as file: + msft = pd.read_csv(file, parse_dates=['Date']) + + +############################################################################### +# Use indices +# ----------- + +# Deprecated: +plt.plotfile(fname, (0, 5, 6)) + +# Use instead: +msft.plot(0, [5, 6], subplots=True) + +############################################################################### +# Use names +# --------- + +# Deprecated: +plt.plotfile(fname, ('date', 'volume', 'adj_close')) + +# Use instead: +msft.plot("Date", ["Volume", "Adj. Close*"], subplots=True) + +############################################################################### +# Use semilogy for volume +# ----------------------- + +# Deprecated: +plt.plotfile(fname, ('date', 'volume', 'adj_close'), + plotfuncs={'volume': 'semilogy'}) + +# Use instead: +fig, axs = plt.subplots(2, sharex=True) +msft.plot("Date", "Volume", ax=axs[0], logy=True) +msft.plot("Date", "Adj. Close*", ax=axs[1]) + + +############################################################################### +# Use semilogy for volume (by index) +# ---------------------------------- + +# Deprecated: +plt.plotfile(fname, (0, 5, 6), plotfuncs={5: 'semilogy'}) + +# Use instead: +fig, axs = plt.subplots(2, sharex=True) +msft.plot(0, 5, ax=axs[0], logy=True) +msft.plot(0, 6, ax=axs[1]) + +############################################################################### +# Single subplot +# -------------- + +# Deprecated: +plt.plotfile(fname, ('date', 'open', 'high', 'low', 'close'), subplots=False) + +# Use instead: +msft.plot("Date", ["Open", "High", "Low", "Close"]) + +############################################################################### +# Use bar for volume +# ------------------ + +# Deprecated: +plt.plotfile(fname, (0, 5, 6), plotfuncs={5: "bar"}) + +# Use instead: +fig, axs = plt.subplots(2, sharex=True) +axs[0].bar(msft.iloc[:, 0], msft.iloc[:, 5]) +axs[1].plot(msft.iloc[:, 0], msft.iloc[:, 6]) +fig.autofmt_xdate() + +############################################################################### +# Using numpy +# =========== + +fname2 = cbook.get_sample_data('data_x_x2_x3.csv', asfileobj=False) +with cbook.get_sample_data('data_x_x2_x3.csv') as file: + array = np.loadtxt(file) + +############################################################################### +# Labeling, if no names in csv-file +# --------------------------------- + +# Deprecated: +plt.plotfile(fname2, cols=(0, 1, 2), delimiter=' ', + names=['$x$', '$f(x)=x^2$', '$f(x)=x^3$']) + +# Use instead: +fig, axs = plt.subplots(2, sharex=True) +axs[0].plot(array[:, 0], array[:, 1]) +axs[0].set(ylabel='$f(x)=x^2$') +axs[1].plot(array[:, 0], array[:, 2]) +axs[1].set(xlabel='$x$', ylabel='$f(x)=x^3$') + +############################################################################### +# More than one file per figure +# ----------------------------- + +# For simplicity of the example we reuse the same file. +# In general they will be different. +fname3 = fname2 + +# Depreacted: +plt.plotfile(fname2, cols=(0, 1), delimiter=' ') +plt.plotfile(fname3, cols=(0, 2), delimiter=' ', + newfig=False) # use current figure +plt.xlabel(r'$x$') +plt.ylabel(r'$f(x) = x^2, x^3$') + +# Use instead: +fig, ax = plt.subplots() +ax.plot(array[:, 0], array[:, 1]) +ax.plot(array[:, 0], array[:, 2]) +ax.set(xlabel='$x$', ylabel='$f(x)=x^3$') + +plt.show() diff --git a/examples/scales/logit_demo.py b/examples/scales/logit_demo.py new file mode 100644 index 000000000000..a79060f5ab47 --- /dev/null +++ b/examples/scales/logit_demo.py @@ -0,0 +1,61 @@ +""" +================ +Logit Demo +================ + +Examples of plots with logit axes. +""" + +import numpy as np +import matplotlib.pyplot as plt + +xmax = 10 +x = np.linspace(-xmax, xmax, 10000) +cdf_norm = np.array([np.math.erf(w / np.sqrt(2)) / 2 + 1 / 2 for w in x]) +cdf_laplacian = np.array( + [1 / 2 * np.exp(w) if w < 0 else 1 - 1 / 2 * np.exp(-w) for w in x] +) +cdf_cauchy = 1 / np.pi * np.arctan(x) + 1 / 2 + +fig, axs = plt.subplots(nrows=3, ncols=2, figsize=(6.4, 8.5)) + +# Common part, for the example, we will do the same plots on all graphs +for i in range(3): + for j in range(2): + axs[i, j].plot(x, cdf_norm, label=r"$\mathcal{N}$") + axs[i, j].plot(x, cdf_laplacian, label=r"$\mathcal{L}$") + axs[i, j].plot(x, cdf_cauchy, label="Cauchy") + axs[i, j].legend() + axs[i, j].grid() + +# First line, logitscale, with standard notation +axs[0, 0].set(title="logit scale") +axs[0, 0].set_yscale("logit") +axs[0, 0].set_ylim(1e-5, 1 - 1e-5) + +axs[0, 1].set(title="logit scale") +axs[0, 1].set_yscale("logit") +axs[0, 1].set_xlim(0, xmax) +axs[0, 1].set_ylim(0.8, 1 - 5e-3) + +# Second line, logitscale, with survival notation (with `use_overline`), and +# other format display 1/2 +axs[1, 0].set(title="logit scale") +axs[1, 0].set_yscale("logit", one_half="1/2", use_overline=True) +axs[1, 0].set_ylim(1e-5, 1 - 1e-5) + +axs[1, 1].set(title="logit scale") +axs[1, 1].set_yscale("logit", one_half="1/2", use_overline=True) +axs[1, 1].set_xlim(0, xmax) +axs[1, 1].set_ylim(0.8, 1 - 5e-3) + +# Third line, linear scale +axs[2, 0].set(title="linear scale") +axs[2, 0].set_ylim(0, 1) + +axs[2, 1].set(title="linear scale") +axs[2, 1].set_xlim(0, xmax) +axs[2, 1].set_ylim(0.8, 1) + +fig.tight_layout() +plt.show() diff --git a/examples/statistics/confidence_ellipse.py b/examples/statistics/confidence_ellipse.py new file mode 100644 index 000000000000..2db715237d57 --- /dev/null +++ b/examples/statistics/confidence_ellipse.py @@ -0,0 +1,223 @@ +""" +====================================================== +Plot a confidence ellipse of a two-dimensional dataset +====================================================== + +This example shows how to plot a confidence ellipse of a +two-dimensional dataset, using its pearson correlation coefficient. + +The approach that is used to obtain the correct geometry is +explained and proved here: + +https://carstenschelp.github.io/2018/09/14/Plot_Confidence_Ellipse_001.html + +The method avoids the use of an iterative eigen decomposition algorithm +and makes use of the fact that a normalized covariance matrix (composed of +pearson correlation coefficients and ones) is particularly easy to handle. +""" + + +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.patches import Ellipse +import matplotlib.transforms as transforms + + +############################################################################# +# +# The plotting function itself +# """""""""""""""""""""""""""" +# +# This function plots the confidence ellipse of the covariance of the given +# array-like variables x and y. The ellipse is plotted into the given +# axes-object ax. +# +# The radiuses of the ellipse can be controlled by n_std which is the number +# of standard deviations. The default value is 3 which makes the ellipse +# enclose 99.7% of the points (given the data is normally distributed +# like in these examples). + + +def confidence_ellipse(x, y, ax, n_std=3.0, facecolor='none', **kwargs): + """ + Create a plot of the covariance confidence ellipse of *x* and *y*. + + Parameters + ---------- + x, y : array-like, shape (n, ) + Input data. + + ax : matplotlib.axes.Axes + The axes object to draw the ellipse into. + + n_std : float + The number of standard deviations to determine the ellipse's radiuses. + + Returns + ------- + matplotlib.patches.Ellipse + + Other parameters + ---------------- + kwargs : `~matplotlib.patches.Patch` properties + """ + if x.size != y.size: + raise ValueError("x and y must be the same size") + + cov = np.cov(x, y) + pearson = cov[0, 1]/np.sqrt(cov[0, 0] * cov[1, 1]) + # Using a special case to obtain the eigenvalues of this + # two-dimensionl dataset. + ell_radius_x = np.sqrt(1 + pearson) + ell_radius_y = np.sqrt(1 - pearson) + ellipse = Ellipse((0, 0), + width=ell_radius_x * 2, + height=ell_radius_y * 2, + facecolor=facecolor, + **kwargs) + + # Calculating the stdandard deviation of x from + # the squareroot of the variance and multiplying + # with the given number of standard deviations. + scale_x = np.sqrt(cov[0, 0]) * n_std + mean_x = np.mean(x) + + # calculating the stdandard deviation of y ... + scale_y = np.sqrt(cov[1, 1]) * n_std + mean_y = np.mean(y) + + transf = transforms.Affine2D() \ + .rotate_deg(45) \ + .scale(scale_x, scale_y) \ + .translate(mean_x, mean_y) + + ellipse.set_transform(transf + ax.transData) + return ax.add_patch(ellipse) + + +############################################################################# +# +# A helper function to create a correlated dataset +# """""""""""""""""""""""""""""""""""""""""""""""" +# +# Creates a random two-dimesional dataset with the specified +# two-dimensional mean (mu) and dimensions (scale). +# The correlation can be controlled by the param 'dependency', +# a 2x2 matrix. + +def get_correlated_dataset(n, dependency, mu, scale): + latent = np.random.randn(n, 2) + dependent = latent.dot(dependency) + scaled = dependent * scale + scaled_with_offset = scaled + mu + # return x and y of the new, correlated dataset + return scaled_with_offset[:, 0], scaled_with_offset[:, 1] + + +############################################################################# +# +# Positive, negative and weak correlation +# """"""""""""""""""""""""""""""""""""""" +# +# Note that the shape for the weak correlation (right) is an ellipse, +# not a circle because x and y are differently scaled. +# However, the fact that x and y are uncorrelated is shown by +# the axes of the ellipse being aligned with the x- and y-axis +# of the coordinate system. + +np.random.seed(0) + +PARAMETERS = { + 'Positive correlation': np.array([[0.85, 0.35], + [0.15, -0.65]]), + 'Negative correlation': np.array([[0.9, -0.4], + [0.1, -0.6]]), + 'Weak correlation': np.array([[1, 0], + [0, 1]]), +} + +mu = 2, 4 +scale = 3, 5 + +fig, axs = plt.subplots(1, 3, figsize=(9, 3)) +for ax, (title, dependency) in zip(axs, PARAMETERS.items()): + x, y = get_correlated_dataset(800, dependency, mu, scale) + ax.scatter(x, y, s=0.5) + + ax.axvline(c='grey', lw=1) + ax.axhline(c='grey', lw=1) + + confidence_ellipse(x, y, ax, edgecolor='red') + + ax.scatter(mu[0], mu[1], c='red', s=3) + ax.set_title(title) + +plt.show() + + +############################################################################# +# +# Different number of standard deviations +# """"""""""""""""""""""""""""""""""""""" +# +# A plot with n_std = 3 (blue), 2 (purple) and 1 (red) + +fig, ax_nstd = plt.subplots(figsize=(6, 6)) + +dependency_nstd = np.array([ + [0.8, 0.75], + [-0.2, 0.35] +]) +mu = 0, 0 +scale = 8, 5 + +ax_nstd.axvline(c='grey', lw=1) +ax_nstd.axhline(c='grey', lw=1) + +x, y = get_correlated_dataset(500, dependency_nstd, mu, scale) +ax_nstd.scatter(x, y, s=0.5) + +confidence_ellipse(x, y, ax_nstd, n_std=1, + label=r'$1\sigma$', edgecolor='firebrick') +confidence_ellipse(x, y, ax_nstd, n_std=2, + label=r'$2\sigma$', edgecolor='fuchsia', linestyle='--') +confidence_ellipse(x, y, ax_nstd, n_std=3, + label=r'$3\sigma$', edgecolor='blue', linestyle=':') + +ax_nstd.scatter(mu[0], mu[1], c='red', s=3) +ax_nstd.set_title('Different standard deviations') +ax_nstd.legend() +plt.show() + + +############################################################################# +# +# Using the keyword arguments +# """"""""""""""""""""""""""" +# +# Use the kwargs specified for matplotlib.patches.Patch in order +# to have the ellipse rendered in different ways. + +fig, ax_kwargs = plt.subplots(figsize=(6, 6)) +dependency_kwargs = np.array([ + [-0.8, 0.5], + [-0.2, 0.5] +]) +mu = 2, -3 +scale = 6, 5 + +ax_kwargs.axvline(c='grey', lw=1) +ax_kwargs.axhline(c='grey', lw=1) + +x, y = get_correlated_dataset(500, dependency_kwargs, mu, scale) +# Plot the ellipse with zorder=0 in order to demonstrate +# its transparency (caused by the use of alpha). +confidence_ellipse(x, y, ax_kwargs, + alpha=0.5, facecolor='pink', edgecolor='purple', zorder=0) + +ax_kwargs.scatter(x, y, s=0.5) +ax_kwargs.scatter(mu[0], mu[1], c='red', s=3) +ax_kwargs.set_title(f'Using kwargs') + +fig.subplots_adjust(hspace=0.25) +plt.show() diff --git a/lib/matplotlib/_text_layout.py b/lib/matplotlib/_text_layout.py new file mode 100644 index 000000000000..e9fed131677d --- /dev/null +++ b/lib/matplotlib/_text_layout.py @@ -0,0 +1,38 @@ +""" +Text layouting utilities. +""" + +from .ft2font import KERNING_DEFAULT, LOAD_NO_HINTING + + +def layout(string, font, *, kern_mode=KERNING_DEFAULT): + """ + Render *string* with *font*. For each character in *string*, yield a + (glyph-index, x-position) pair. When such a pair is yielded, the font's + glyph is set to the corresponding character. + + Parameters + ---------- + string : str + The string to be rendered. + font : FT2Font + The font. + kern_mode : int + A FreeType kerning mode. + + Yields + ------ + glyph_index : int + x_position : float + """ + x = 0 + last_glyph_idx = None + for char in string: + glyph_idx = font.get_char_index(ord(char)) + kern = (font.get_kerning(last_glyph_idx, glyph_idx, kern_mode) + if last_glyph_idx is not None else 0) / 64 + x += kern + glyph = font.load_glyph(glyph_idx, flags=LOAD_NO_HINTING) + yield glyph_idx, x + x += glyph.linearHoriAdvance / 65536 + last_glyph_idx = glyph_idx diff --git a/lib/matplotlib/mpl-data/images/matplotlib_128.ppm b/lib/matplotlib/mpl-data/images/matplotlib_128.ppm new file mode 100644 index 000000000000..d9a647b08a5a --- /dev/null +++ b/lib/matplotlib/mpl-data/images/matplotlib_128.ppm @@ -0,0 +1,4 @@ +P6 +128 128 +255 +џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў№єіиущРвмЉСЯ‘БУ„ЇЛЅЙ}ЂЗ}ЂЗЅЙ„ЇЛ‘БУЉСЯСгниущ№єіўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџѕјљЩйсšЗЧj•­= LooseVersion('1.3'): + html_theme = 'classic' +else: + html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'tinypagesdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'tinypages.tex', 'tinypages Documentation', + 'Matplotlib developers', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'tinypages', 'tinypages Documentation', + ['Matplotlib developers'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'tinypages', 'tinypages Documentation', + 'Matplotlib developers', 'tinypages', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/lib/matplotlib/tests/tinypages/index.rst b/lib/matplotlib/tests/tinypages/index.rst new file mode 100644 index 000000000000..3905483a8a57 --- /dev/null +++ b/lib/matplotlib/tests/tinypages/index.rst @@ -0,0 +1,21 @@ +.. tinypages documentation master file, created by + sphinx-quickstart on Tue Mar 18 11:58:34 2014. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to tinypages's documentation! +===================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + some_plots + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/lib/matplotlib/tests/tinypages/range4.py b/lib/matplotlib/tests/tinypages/range4.py new file mode 100644 index 000000000000..0772fc84ad4e --- /dev/null +++ b/lib/matplotlib/tests/tinypages/range4.py @@ -0,0 +1,5 @@ +from matplotlib import pyplot as plt + +plt.figure() +plt.plot(range(4)) +plt.show() diff --git a/lib/matplotlib/tests/tinypages/range6.py b/lib/matplotlib/tests/tinypages/range6.py new file mode 100644 index 000000000000..7e78816bdfab --- /dev/null +++ b/lib/matplotlib/tests/tinypages/range6.py @@ -0,0 +1,13 @@ +from matplotlib import pyplot as plt + + +def range4(): + '''This is never be called if plot_directive works as expected.''' + raise NotImplementedError + + +def range6(): + '''This is the function that should be executed.''' + plt.figure() + plt.plot(range(6)) + plt.show() diff --git a/lib/matplotlib/tests/tinypages/some_plots.rst b/lib/matplotlib/tests/tinypages/some_plots.rst new file mode 100644 index 000000000000..615908b0107f --- /dev/null +++ b/lib/matplotlib/tests/tinypages/some_plots.rst @@ -0,0 +1,129 @@ +########## +Some plots +########## + +Plot 1 does not use context: + +.. plot:: + + plt.plot(range(10)) + a = 10 + +Plot 2 doesn't use context either; has length 6: + +.. plot:: + + plt.plot(range(6)) + +Plot 3 has length 4: + +.. plot:: + + plt.plot(range(4)) + +Plot 4 shows that a new block with context does not see the variable defined +in the no-context block: + +.. plot:: + :context: + + assert 'a' not in globals() + +Plot 5 defines ``a`` in a context block: + +.. plot:: + :context: + + plt.plot(range(6)) + a = 10 + +Plot 6 shows that a block with context sees the new variable. It also uses +``:nofigs:``: + +.. plot:: + :context: + :nofigs: + + assert a == 10 + b = 4 + +Plot 7 uses a variable previously defined in previous ``nofigs`` context. It +also closes any previous figures to create a fresh figure: + +.. plot:: + :context: close-figs + + assert b == 4 + plt.plot(range(b)) + +Plot 8 shows that a non-context block still doesn't have ``a``: + +.. plot:: + :nofigs: + + assert 'a' not in globals() + +Plot 9 has a context block, and does have ``a``: + +.. plot:: + :context: + :nofigs: + + assert a == 10 + +Plot 10 resets context, and ``a`` has gone again: + +.. plot:: + :context: reset + :nofigs: + + assert 'a' not in globals() + c = 10 + +Plot 11 continues the context, we have the new value, but not the old: + +.. plot:: + :context: + + assert c == 10 + assert 'a' not in globals() + plt.plot(range(c)) + +Plot 12 opens a new figure. By default the directive will plot both the first +and the second figure: + +.. plot:: + :context: + + plt.figure() + plt.plot(range(6)) + +Plot 13 shows ``close-figs`` in action. ``close-figs`` closes all figures +previous to this plot directive, so we get always plot the figure we create in +the directive: + +.. plot:: + :context: close-figs + + plt.figure() + plt.plot(range(4)) + +Plot 14 uses ``include-source``: + +.. plot:: + :include-source: + + # Only a comment + +Plot 15 uses an external file with the plot commands and a caption: + +.. plot:: range4.py + + This is the caption for plot 15. + + +Plot 16 uses a specific function in a file with plot commands: + +.. plot:: range6.py range6 + +