diff --git a/.circleci/config.yml b/.circleci/config.yml index bade4c7042a6..4a0f262a4eb7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -59,6 +59,7 @@ commands: fonts-crosextra-carlito \ fonts-freefont-otf \ fonts-humor-sans \ + fonts-noto-cjk \ optipng fonts-install: @@ -104,6 +105,13 @@ commands: - run: name: Install Matplotlib command: python -m pip install --user -ve . + - save_cache: + key: build-deps-1 + paths: + # FreeType 2.6.1 tarball. + - ~/.cache/matplotlib/0a3c7dfbda6da1e8fce29232e8e96d987ababbbf71ebc8c75659e4132c367014 + # Qhull 2020.2 tarball. + - ~/.cache/matplotlib/b5c2d7eb833278881b952c8a52d20179eab87766b00b865000469a45c1838b7e doc-build: steps: diff --git a/.flake8 b/.flake8 index 06ad576c1b19..7094b6c49b5f 100644 --- a/.flake8 +++ b/.flake8 @@ -120,11 +120,15 @@ per-file-ignores = examples/style_sheets/plot_solarizedlight2.py: E501 examples/subplots_axes_and_figures/demo_constrained_layout.py: E402 examples/text_labels_and_annotations/custom_legends.py: E402 - examples/ticks_and_spines/date_concise_formatter.py: E402 + examples/ticks/date_concise_formatter.py: E402 examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py: E402 examples/user_interfaces/embedding_in_gtk3_sgskip.py: E402 - examples/user_interfaces/gtk_spreadsheet_sgskip.py: E402 + examples/user_interfaces/embedding_in_gtk4_panzoom_sgskip.py: E402 + examples/user_interfaces/embedding_in_gtk4_sgskip.py: E402 + examples/user_interfaces/gtk3_spreadsheet_sgskip.py: E402 + examples/user_interfaces/gtk4_spreadsheet_sgskip.py: E402 examples/user_interfaces/mpl_with_glade3_sgskip.py: E402 - examples/user_interfaces/pylab_with_gtk_sgskip.py: E402 + examples/user_interfaces/pylab_with_gtk3_sgskip.py: E402 + examples/user_interfaces/pylab_with_gtk4_sgskip.py: E402 examples/user_interfaces/toolmanager_sgskip.py: E402 examples/userdemo/pgf_preamble_sgskip.py: E402 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2bef7ab95a56..5c9afed3c02b 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,3 @@ # These are supported funding model platforms -github: [numfocus] +github: [matplotlib, numfocus] custom: https://numfocus.org/donate-to-matplotlib diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml index 9114df686a96..6bd35f22567d 100644 --- a/.github/workflows/cibuildwheel.yml +++ b/.github/workflows/cibuildwheel.yml @@ -15,6 +15,7 @@ jobs: env: min-numpy-version: "1.17.3" min-numpy-hash: "b6/d6/be8f975f5322336f62371c9abeb936d592c98c047ad63035f1b38ae08efe" + CIBW_ARCHS_MACOS: "x86_64 universal2 arm64" strategy: matrix: os: [ubuntu-18.04, windows-latest, macos-latest] @@ -60,6 +61,18 @@ jobs: CIBW_BUILD: "cp37-* cp38-*" CIBW_ARCHS: aarch64 + - name: Build wheels for CPython 3.10 + run: | + python -m cibuildwheel --output-dir dist + if: matrix.os != 'macos-latest' + env: + CIBW_BUILD: "cp310-*" + CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 + CIBW_MANYLINUX_I686_IMAGE: manylinux2014 + CIBW_BEFORE_BUILD: pip install certifi numpy==1.21.2 + MPL_DISABLE_FH4: "yes" + CIBW_ARCHS: ${{ matrix.cibw_archs }} + - name: Build wheels for CPython 3.9 run: | python -m cibuildwheel --output-dir dist diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b4a1bbbf35fa..c5f578d54be5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -70,6 +70,7 @@ jobs: cm-super \ dvipng \ ffmpeg \ + fonts-noto-cjk \ gdb \ gir1.2-gtk-3.0 \ graphviz \ @@ -106,6 +107,8 @@ jobs: ;; macOS) brew install ccache + brew tap homebrew/cask-fonts + brew install font-noto-sans-cjk-sc ;; esac diff --git a/.gitignore b/.gitignore index 05eedcb24ef2..7d0e549e0125 100644 --- a/.gitignore +++ b/.gitignore @@ -72,6 +72,7 @@ doc/plot_types doc/pyplots/tex_demo.png doc/tutorials lib/dateutil +examples/*/*.bmp examples/*/*.eps examples/*/*.pdf examples/*/*.png diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5d51afa86f67..13e6d709c42f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -82,6 +82,7 @@ stages: cm-super \ dvipng \ ffmpeg \ + fonts-noto-cjk \ gdb \ gir1.2-gtk-3.0 \ graphviz \ @@ -102,6 +103,8 @@ stages: darwin) brew install --cask xquartz brew install pkg-config ffmpeg imagemagick mplayer ccache + brew tap homebrew/cask-fonts + brew install font-noto-sans-cjk-sc ;; win32) ;; diff --git a/doc/_static/mpl.css b/doc/_static/mpl.css index 88c620d559e8..b5ac4b6ddd3a 100644 --- a/doc/_static/mpl.css +++ b/doc/_static/mpl.css @@ -212,3 +212,11 @@ table.property-table th, table.property-table td { padding: 4px 10px; } + +.donate-button { + margin: 1em 0; +} + +.sphinxsidebarwrapper { + margin: 0 1em; +} diff --git a/doc/_templates/cheatsheet_sidebar.html b/doc/_templates/cheatsheet_sidebar.html new file mode 100644 index 000000000000..615c2bc4cd04 --- /dev/null +++ b/doc/_templates/cheatsheet_sidebar.html @@ -0,0 +1,9 @@ + +
+

Matplotlib cheatsheets

+ + Matplotlib cheatsheets + +
diff --git a/doc/_templates/donate_sidebar.html b/doc/_templates/donate_sidebar.html index fc7310b70088..02d5ff6fc46c 100644 --- a/doc/_templates/donate_sidebar.html +++ b/doc/_templates/donate_sidebar.html @@ -1,6 +1,8 @@ - - -
-

Matplotlib cheatsheets

- - Matplotlib cheatsheets - -
diff --git a/doc/api/backend_gtk4_api.rst b/doc/api/backend_gtk4_api.rst new file mode 100644 index 000000000000..c2bc05d6f36c --- /dev/null +++ b/doc/api/backend_gtk4_api.rst @@ -0,0 +1,16 @@ +**NOTE** These backends are not documented here, to avoid adding a dependency +to building the docs. + +.. redirect-from:: /api/backend_gtk4agg_api +.. redirect-from:: /api/backend_gtk4cairo_api + + +:mod:`matplotlib.backends.backend_gtk4agg` +========================================== + +.. module:: matplotlib.backends.backend_gtk4agg + +:mod:`matplotlib.backends.backend_gtk4cairo` +============================================ + +.. module:: matplotlib.backends.backend_gtk4cairo diff --git a/doc/api/index.rst b/doc/api/index.rst index 9c33f38ad6d8..ed0e7f310275 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -101,21 +101,6 @@ Alphabetical list of modules: widgets_api.rst _api_api.rst _enums_api.rst - -Toolkits --------- - -:ref:`toolkits-index` are collections of application-specific functions that extend -Matplotlib. The following toolkits are included: - -.. toctree:: - :hidden: - - toolkits/index.rst - -.. toctree:: - :maxdepth: 1 - toolkits/mplot3d.rst toolkits/axes_grid1.rst toolkits/axisartist.rst diff --git a/doc/api/index_backend_api.rst b/doc/api/index_backend_api.rst index ad2febf8dc38..25c06820c9da 100644 --- a/doc/api/index_backend_api.rst +++ b/doc/api/index_backend_api.rst @@ -10,6 +10,7 @@ backend_agg_api.rst backend_cairo_api.rst backend_gtk3_api.rst + backend_gtk4_api.rst backend_nbagg_api.rst backend_pdf_api.rst backend_pgf_api.rst diff --git a/doc/api/next_api_changes/behavior/21031-AL.rst b/doc/api/next_api_changes/behavior/21031-AL.rst new file mode 100644 index 000000000000..ec1a80f9478a --- /dev/null +++ b/doc/api/next_api_changes/behavior/21031-AL.rst @@ -0,0 +1,3 @@ +Setting invalid ``rcParams["date.converter"]`` now raises ValueError +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Previously, invalid values would be ignored with a UserWarning. diff --git a/doc/api/next_api_changes/deprecations/20995-AL.rst b/doc/api/next_api_changes/deprecations/20995-AL.rst new file mode 100644 index 000000000000..bdccd8f5d333 --- /dev/null +++ b/doc/api/next_api_changes/deprecations/20995-AL.rst @@ -0,0 +1,3 @@ +``backend_gtk3.icon_filename`` and ``backend_gtk3.window_icon`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... are deprecated with no replacement. diff --git a/doc/api/next_api_changes/deprecations/21056-AL.rst b/doc/api/next_api_changes/deprecations/21056-AL.rst new file mode 100644 index 000000000000..1b169ae49d2b --- /dev/null +++ b/doc/api/next_api_changes/deprecations/21056-AL.rst @@ -0,0 +1,3 @@ +Calling ``MarkerStyle()`` with no arguments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... is deprecated; use ``MarkerStyle("")`` to construct an empty marker style. diff --git a/doc/api/next_api_changes/removals/20990-AL.rst b/doc/api/next_api_changes/removals/20990-AL.rst new file mode 100644 index 000000000000..29e24786be85 --- /dev/null +++ b/doc/api/next_api_changes/removals/20990-AL.rst @@ -0,0 +1,4 @@ +Support for passing tool names to ``ToolManager.add_tool`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... has been removed. The second parameter to add_tool must now always be a +tool class. diff --git a/doc/api/prev_api_changes/api_changes_1.1.x.rst b/doc/api/prev_api_changes/api_changes_1.1.x.rst index 8320e2c4fc09..790b669081b7 100644 --- a/doc/api/prev_api_changes/api_changes_1.1.x.rst +++ b/doc/api/prev_api_changes/api_changes_1.1.x.rst @@ -1,6 +1,6 @@ -Changes in 1.1.x -================ +API Changes in 1.1.x +==================== * Added new :class:`matplotlib.sankey.Sankey` for generating Sankey diagrams. diff --git a/doc/api/prev_api_changes/api_changes_1.2.x.rst b/doc/api/prev_api_changes/api_changes_1.2.x.rst index 6d83874e6471..45a2f35cf29e 100644 --- a/doc/api/prev_api_changes/api_changes_1.2.x.rst +++ b/doc/api/prev_api_changes/api_changes_1.2.x.rst @@ -1,5 +1,5 @@ -Changes in 1.2.x -================ +API Changes in 1.2.x +==================== * The ``classic`` option of the rc parameter ``toolbar`` is deprecated and will be removed in the next release. diff --git a/doc/api/prev_api_changes/api_changes_1.3.x.rst b/doc/api/prev_api_changes/api_changes_1.3.x.rst index 5b596d83b5e2..1cfba079bb5e 100644 --- a/doc/api/prev_api_changes/api_changes_1.3.x.rst +++ b/doc/api/prev_api_changes/api_changes_1.3.x.rst @@ -1,8 +1,8 @@ .. _changes_in_1_3: -Changes in 1.3.x -================ +API Changes in 1.3.x +==================== Changes in 1.3.1 ---------------- diff --git a/doc/api/prev_api_changes/api_changes_1.4.x.rst b/doc/api/prev_api_changes/api_changes_1.4.x.rst index 2d49b4b6651a..d0952784677c 100644 --- a/doc/api/prev_api_changes/api_changes_1.4.x.rst +++ b/doc/api/prev_api_changes/api_changes_1.4.x.rst @@ -1,5 +1,5 @@ -Changes in 1.4.x -================ +API Changes in 1.4.x +==================== Code changes ------------ diff --git a/doc/api/prev_api_changes/api_changes_1.5.0.rst b/doc/api/prev_api_changes/api_changes_1.5.0.rst index abed630b126c..b51f311d8836 100644 --- a/doc/api/prev_api_changes/api_changes_1.5.0.rst +++ b/doc/api/prev_api_changes/api_changes_1.5.0.rst @@ -1,6 +1,6 @@ -Changes in 1.5.0 -================ +API Changes in 1.5.0 +==================== Code Changes ------------ diff --git a/doc/api/prev_api_changes/api_changes_1.5.2.rst b/doc/api/prev_api_changes/api_changes_1.5.2.rst index d2ee33546314..85c504fa6f12 100644 --- a/doc/api/prev_api_changes/api_changes_1.5.2.rst +++ b/doc/api/prev_api_changes/api_changes_1.5.2.rst @@ -1,5 +1,5 @@ -Changes in 1.5.2 -================ +API Changes in 1.5.2 +==================== Default Behavior Changes diff --git a/doc/api/prev_api_changes/api_changes_1.5.3.rst b/doc/api/prev_api_changes/api_changes_1.5.3.rst index 0dc025111eae..ff5d6a9cf996 100644 --- a/doc/api/prev_api_changes/api_changes_1.5.3.rst +++ b/doc/api/prev_api_changes/api_changes_1.5.3.rst @@ -1,5 +1,5 @@ -Changes in 1.5.3 -================ +API Changes in 1.5.3 +==================== ``ax.plot(..., marker=None)`` gives default marker -------------------------------------------------- diff --git a/doc/api/toolkits/index.rst b/doc/api/toolkits/index.rst deleted file mode 100644 index 59c01ab21a69..000000000000 --- a/doc/api/toolkits/index.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _toolkits-index: - -.. _toolkits: - -######## -Toolkits -######## - -Toolkits are collections of application-specific functions that extend -Matplotlib. - -.. _toolkit_mplot3d: - -mplot3d -======= - -:mod:`mpl_toolkits.mplot3d` provides some basic 3D -plotting (scatter, surf, line, mesh) tools. Not the fastest or most feature -complete 3D library out there, but it ships with Matplotlib and thus may be a -lighter weight solution for some use cases. Check out the -:doc:`mplot3d tutorial ` for more -information. - -.. figure:: ../../gallery/mplot3d/images/sphx_glr_contourf3d_2_001.png - :target: ../../gallery/mplot3d/contourf3d_2.html - :align: center - :scale: 50 - -.. toctree:: - :maxdepth: 2 - - mplot3d/index.rst - mplot3d/faq.rst - -Links ------ -* mpl3d API: :ref:`toolkit_mplot3d-api` - -.. include:: axes_grid1.rst - :start-line: 1 - -.. include:: axisartist.rst - :start-line: 1 - -.. include:: axes_grid.rst - :start-line: 1 diff --git a/doc/api/toolkits/mplot3d.rst b/doc/api/toolkits/mplot3d.rst index 97d3bf13246f..5b3cb52571bb 100644 --- a/doc/api/toolkits/mplot3d.rst +++ b/doc/api/toolkits/mplot3d.rst @@ -1,8 +1,32 @@ -.. _toolkit_mplot3d-api: +.. _toolkit_mplot3d-index: +.. currentmodule:: mpl_toolkits.mplot3d + +************************ +``mpl_toolkits.mplot3d`` +************************ + +The mplot3d toolkit adds simple 3D plotting capabilities (scatter, surface, +line, mesh, etc.) to Matplotlib by supplying an Axes object that can create +a 2D projection of a 3D scene. The resulting graph will have the same look +and feel as regular 2D plots. Not the fastest or most feature complete 3D +library out there, but it ships with Matplotlib and thus may be a lighter +weight solution for some use cases. + +See the :doc:`mplot3d tutorial ` for +more information. + +.. image:: /_static/demo_mplot3d.png + :align: center + +The interactive backends also provide the ability to rotate and zoom the 3D +scene. One can rotate the 3D scene by simply clicking-and-dragging the scene. +Zooming is done by right-clicking the scene and dragging the mouse up and down +(unlike 2D plots, the toolbar zoom button is not used). + +.. toctree:: + :maxdepth: 2 -*********** -mplot3d API -*********** + mplot3d/faq.rst .. note:: `.pyplot` cannot be used to add content to 3D plots, because its function diff --git a/doc/api/toolkits/mplot3d/index.rst b/doc/api/toolkits/mplot3d/index.rst deleted file mode 100644 index 8b153c06903f..000000000000 --- a/doc/api/toolkits/mplot3d/index.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. _toolkit_mplot3d-index: -.. currentmodule:: mpl_toolkits.mplot3d - -******* -mplot3d -******* - -Matplotlib mplot3d toolkit -========================== -The mplot3d toolkit adds simple 3D plotting capabilities to matplotlib by -supplying an axes object that can create a 2D projection of a 3D scene. -The resulting graph will have the same look and feel as regular 2D plots. - -See the :doc:`mplot3d tutorial ` for -more information on how to use this toolkit. - -.. image:: /_static/demo_mplot3d.png - -The interactive backends also provide the ability to rotate and zoom -the 3D scene. One can rotate the 3D scene by simply clicking-and-dragging -the scene. Zooming is done by right-clicking the scene and dragging the -mouse up and down. Note that one does not use the zoom button like one -would use for regular 2D plots. - -.. toctree:: - :maxdepth: 2 - - faq.rst diff --git a/doc/conf.py b/doc/conf.py index 00f7ed7c5ea2..77b879d6f371 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -71,12 +71,15 @@ 'sphinxext.skip_deprecated', 'sphinxext.redirect_from', 'sphinx_copybutton', + 'sphinx_panels', ] exclude_patterns = [ 'api/prev_api_changes/api_changes_*/*', ] +panels_add_bootstrap_css = False + def _check_dependencies(): names = { @@ -312,8 +315,9 @@ def _check_dependencies(): "url": "https://twitter.com/matplotlib/", "icon": "fab fa-twitter-square", }, - ], + "show_prev_next": False, + "navbar_center": ["mpl_nav_bar.html"], } include_analytics = False if include_analytics: @@ -341,8 +345,10 @@ def _check_dependencies(): # Custom sidebar templates, maps page names to templates. html_sidebars = { "index": [ + 'search-field.html', # 'sidebar_announcement.html', "sidebar_versions.html", + "cheatsheet_sidebar.html", "donate_sidebar.html", ], # '**': ['localtoc.html', 'pagesource.html'] diff --git a/doc/contents.rst b/doc/contents.rst index 37fd17172ce2..f9d10936c7fc 100644 --- a/doc/contents.rst +++ b/doc/contents.rst @@ -1,4 +1,4 @@ - +.. _complete_sitemap: Contents ======== @@ -15,13 +15,10 @@ Contents :maxdepth: 2 users/installing.rst - plot_types/index.rst - gallery/index.rst - tutorials/index.rst - api/index.rst users/index.rst + users/backmatter.rst devel/index.rst - Third-party packages + users/release_notes.rst .. only:: html diff --git a/doc/devel/MEP/MEP15.rst b/doc/devel/MEP/MEP15.rst index dc1802e33b8c..8e2f80707429 100644 --- a/doc/devel/MEP/MEP15.rst +++ b/doc/devel/MEP/MEP15.rst @@ -1,6 +1,6 @@ -========================================================================== - MEP15 - Fix axis autoscaling when limits are specified for one axis only -========================================================================== +========================================================================= + MEP15: Fix axis autoscaling when limits are specified for one axis only +========================================================================= .. contents:: :local: diff --git a/doc/devel/MEP/MEP24.rst b/doc/devel/MEP/MEP24.rst index 53f0609f3e9b..b0620ce3dc8f 100644 --- a/doc/devel/MEP/MEP24.rst +++ b/doc/devel/MEP/MEP24.rst @@ -1,5 +1,5 @@ ======================================= - MEP24: negative radius in polar plots + MEP24: Negative radius in polar plots ======================================= .. contents:: diff --git a/doc/devel/MEP/MEP27.rst b/doc/devel/MEP/MEP27.rst index 13ed37cb73cb..d4ea57f1b6a6 100644 --- a/doc/devel/MEP/MEP27.rst +++ b/doc/devel/MEP/MEP27.rst @@ -1,5 +1,5 @@ ====================================== - MEP27: decouple pyplot from backends + MEP27: Decouple pyplot from backends ====================================== .. contents:: diff --git a/doc/devel/dependencies.rst b/doc/devel/dependencies.rst index 5502664f4b35..1007210b8ba9 100644 --- a/doc/devel/dependencies.rst +++ b/doc/devel/dependencies.rst @@ -42,9 +42,9 @@ and the capabilities they provide. * Tk_ (>= 8.4, != 8.6.0 or 8.6.1) [#]_: for the Tk-based backends. * PyQt6_ (>= 6.1), PySide6_, PyQt5_, or PySide2_: for the Qt-based backends. -* PyGObject_: for the GTK3-based backends [#]_. +* PyGObject_: for the GTK-based backends [#]_. * wxPython_ (>= 4) [#]_: for the wx-based backends. -* pycairo_ (>= 1.11.0) or cairocffi_ (>= 0.8): for the GTK3 and/or cairo-based +* pycairo_ (>= 1.11.0) or cairocffi_ (>= 0.8): for the GTK and/or cairo-based backends. * Tornado_: for the WebAgg backend. diff --git a/doc/devel/testing.rst b/doc/devel/testing.rst index aa189948003c..65898b95ee0c 100644 --- a/doc/devel/testing.rst +++ b/doc/devel/testing.rst @@ -244,7 +244,7 @@ The correct target folder can be found using:: python -c "import matplotlib.tests; print(matplotlib.tests.__file__.rsplit('/', 1)[0])" An analogous copying of :file:`lib/mpl_toolkits/tests/baseline_images` -is necessary for testing the :ref:`toolkits`. +is necessary for testing ``mpl_toolkits``. Run the tests ^^^^^^^^^^^^^ diff --git a/doc/faq/index.rst b/doc/faq/index.rst index def68fc84c71..bb477de21f0e 100644 --- a/doc/faq/index.rst +++ b/doc/faq/index.rst @@ -1,8 +1,8 @@ .. _faq-index: -################## -The Matplotlib FAQ -################## +###### +How-to +###### .. only:: html diff --git a/doc/index.rst b/doc/index.rst index 0350a1047a9f..9d77ba0a4d39 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -4,43 +4,109 @@ .. module:: matplotlib -Matplotlib documentation ------------------------- -Release: |release| +Matplotlib |release| documentation +---------------------------------- Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. -Learn -===== - -- :doc:`Quick-start Guide ` -- Basic :doc:`Plot Types ` and :doc:`Example Gallery ` -- `Introductory Tutorials <../tutorials/index.html#introductory>`_ -- :doc:`External Learning Resources ` - -Reference -========= +Installation +============ -- :doc:`API Reference ` +.. panels:: + :card: + install-card + :column: col-lg-6 col-md-6 col-sm-12 col-xs-12 p-3 - - :doc:`pyplot API `: top-level interface to create - Figures (`.pyplot.figure`) and Subplots (`.pyplot.subplots`, - `.pyplot.subplot_mosaic`) - - :doc:`Axes API ` for *most* plotting methods - - :doc:`Figure API ` for figure-level methods + Installing using `conda `__ + ^^^^^^^^^^^^^^^^^^^^^^ -- :doc:`Extra Toolkits ` -How-tos -======= -- :doc:`Installation Guide ` -- :doc:`Contributing to Matplotlib ` -- :doc:`Matplotlib FAQ ` + .. code-block:: bash -Understand how Matplotlib works -=============================== + conda install matplotlib -- Many of the :doc:`Tutorials ` have explanatory material + --- + + Installing using `pip `__ + ^^^^^^^^^^^^^^^^^^^^ + + + .. code-block:: bash + + pip install matplotlib + + +Further details are available in the :doc:`Installation Guide `. + + +Learning resources +================== + + +.. panels:: + + Tutorials + ^^^^^^^^^ + + - :doc:`Quick-start Guide ` + - :doc:`Plot Types ` + - `Introductory Tutorials <../tutorials/index.html#introductory>`_ + - :doc:`External Learning Resources ` + + --- + + How-tos + ^^^^^^^ + - :doc:`Example Gallery ` + - :doc:`Matplotlib FAQ ` + + --- + + Understand how Matplotlib works + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + - The :ref:`users-guide-explain` section of the :doc:`Users guide ` + - Many of the :ref:`Intermediate ` and + :ref:`Advanced ` Tutorials + have explanatory material + + --- + + Reference + ^^^^^^^^^ + + - :doc:`API Reference ` + - :doc:`Axes API ` for *most* plotting methods + - :doc:`Figure API ` for figure-level methods + - Top-level interfaces to create: + + - Figures (`.pyplot.figure`) + - Subplots (`.pyplot.subplots`, `.pyplot.subplot_mosaic`) + + + +Third-party packages +-------------------- + +There are many `Third-party packages +`_ built on top of and extending +Matplotlib. + + +Contributing +------------ + +Matplotlib is a community project maitained for and by its users. There are many ways +you can help! + +- Help other users `on discourse `__ +- report a bug or request a feature `on GitHub `__ +- or improve the :ref:`documentation and code ` + + +Site map +-------- + +The :ref:`complete contents of the docs `. diff --git a/doc/thirdpartypackages/index.rst b/doc/thirdpartypackages/index.rst index e6c6aa401526..81dc4d710a52 100644 --- a/doc/thirdpartypackages/index.rst +++ b/doc/thirdpartypackages/index.rst @@ -1,369 +1,5 @@ :orphan: -.. note:: +.. raw:: html - This page has been moved to , - where you will find an up-to-date list of packages. - - -******************** -Third party packages -******************** - -Several external packages that extend or build on Matplotlib functionality are -listed below. You can find more packages at `PyPI `_. -They are maintained and distributed separately from Matplotlib, -and thus need to be installed individually. - -If you have a created a package that extends or builds on Matplotlib -and would like to have your package listed on this page, please submit -an issue or pull request on GitHub. The pull request should include a short -description of the library and an image demonstrating the functionality. -To be included in the PyPI listing, please include ``Framework :: Matplotlib`` -in the classifier list in the ``setup.py`` file for your package. We are also -happy to host third party packages within the `Matplotlib GitHub Organization -`_. - - -Mapping toolkits -**************** - -Basemap -======= -`Basemap `_ plots data on map projections, -with continental and political boundaries. - -.. image:: /_static/basemap_contour1.png - :height: 400px - -Cartopy -======= -`Cartopy `_ builds on top -of Matplotlib to provide object oriented map projection definitions -and close integration with Shapely for powerful yet easy-to-use vector -data processing tools. An example plot from the `Cartopy gallery -`_: - -.. image:: /_static/cartopy_hurricane_katrina_01_00.png - :height: 400px - -Geoplot -======= -`Geoplot `_ builds on top -of Matplotlib and Cartopy to provide a "standard library" of simple, powerful, -and customizable plot types. An example plot from the `Geoplot gallery -`_: - -.. image:: /_static/geoplot_nyc_traffic_tickets.png - :height: 400px - -Ridge Map -========= -`ridge_map `_ uses Matplotlib, -SRTM.py, NumPy, and scikit-image to make ridge plots of your favorite -ridges. - -.. image:: /_static/ridge_map_white_mountains.png - :height: 364px - -Declarative libraries -********************* - -ggplot -====== -`ggplot `_ is a port of the R ggplot2 package -to python based on Matplotlib. - -.. image:: /_static/ggplot.png - :height: 195px - -holoviews -========= -`holoviews `_ makes it easier to visualize data -interactively, especially in a `Jupyter notebook `_, by -providing a set of declarative plotting objects that store your data and -associated metadata. Your data is then immediately visualizable alongside or -overlaid with other data, either statically or with automatically provided -widgets for parameter exploration. - -.. image:: /_static/holoviews.png - :height: 354px - -plotnine -======== - -`plotnine `_ implements a grammar -of graphics, similar to R's `ggplot2 `_. -The grammar allows users to compose plots by explicitly mapping data to the -visual objects that make up the plot. - -.. image:: /_static/plotnine.png - -Specialty plots -*************** - -Broken Axes -=========== -`brokenaxes `_ supplies an axes -class that can have a visual break to indicate a discontinuous range. - -.. image:: /_static/brokenaxes.png - -DeCiDa -====== - -`DeCiDa `_ is a library of functions -and classes for electron device characterization, electronic circuit design and -general data visualization and analysis. - -matplotlib-scalebar -=================== - -`matplotlib-scalebar `_ provides a new artist to display a scale bar, aka micron bar. -It is particularly useful when displaying calibrated images plotted using ``plt.imshow(...)``. - -.. image:: /_static/gold_on_carbon.jpg - -Matplotlib-Venn -=============== -`Matplotlib-Venn `_ provides a -set of functions for plotting 2- and 3-set area-weighted (or unweighted) Venn -diagrams. - -mpl-probscale -============= -`mpl-probscale `_ is a small extension -that allows Matplotlib users to specify probability scales. Simply importing the -``probscale`` module registers the scale with Matplotlib, making it accessible -via e.g., ``ax.set_xscale('prob')`` or ``plt.yscale('prob')``. - -.. image:: /_static/probscale_demo.png - -mpl-scatter-density -=================== - -`mpl-scatter-density `_ is a -small package that makes it easy to make scatter plots of large numbers -of points using a density map. The following example contains around 13 million -points and the plotting (excluding reading in the data) took less than a -second on an average laptop: - -.. image:: /_static/mpl-scatter-density.png - :height: 400px - -When used in interactive mode, the density map is downsampled on-the-fly while -panning/zooming in order to provide a smooth interactive experience. - -mplstereonet -============ -`mplstereonet `_ provides -stereonets for plotting and analyzing orientation data in Matplotlib. - -Natgrid -======= -`mpl_toolkits.natgrid `_ is an interface -to the natgrid C library for gridding irregularly spaced data. - -pyUpSet -======= -`pyUpSet `_ is a -static Python implementation of the `UpSet suite by Lex et al. -`_ to explore complex intersections of -sets and data frames. - -seaborn -======= -`seaborn `_ is a high level interface for drawing -statistical graphics with Matplotlib. It aims to make visualization a central -part of exploring and understanding complex datasets. - -.. image:: /_static/seaborn.png - :height: 157px - -WCSAxes -======= - -The `Astropy `_ core package includes a submodule -called WCSAxes (available at `astropy.visualization.wcsaxes -`_) which -adds Matplotlib projections for Astronomical image data. The following is an -example of a plot made with WCSAxes which includes the original coordinate -system of the image and an overlay of a different coordinate system: - -.. image:: /_static/wcsaxes.jpg - :height: 400px - -Windrose -======== -`Windrose `_ is a Python Matplotlib, -Numpy library to manage wind data, draw windroses (also known as polar rose -plots), draw probability density functions and fit Weibull distributions. - -Yellowbrick -=========== -`Yellowbrick `_ is a suite of visual diagnostic tools for machine learning that enables human steering of the model selection process. Yellowbrick combines scikit-learn with matplotlib using an estimator-based API called the ``Visualizer``, which wraps both sklearn models and matplotlib Axes. ``Visualizer`` objects fit neatly into the machine learning workflow allowing data scientists to integrate visual diagnostic and model interpretation tools into experimentation without extra steps. - -.. image:: /_static/yellowbrick.png - :height: 400px - -Animations -********** - -animatplot -========== -`animatplot `_ is a library for -producing interactive animated plots with the goal of making production of -animated plots almost as easy as static ones. - -.. image:: /_static/animatplot.png - -For an animated version of the above picture and more examples, see the -`animatplot gallery. `_ - -gif -=== -`gif `_ is an ultra lightweight animated gif API. - -.. image:: /_static/gif_attachment_example.png - -numpngw -======= - -`numpngw `_ provides functions for writing -NumPy arrays to PNG and animated PNG files. It also includes the class -``AnimatedPNGWriter`` that can be used to save a Matplotlib animation as an -animated PNG file. See the example on the PyPI page or at the ``numpngw`` -`github repository `_. - -.. image:: /_static/numpngw_animated_example.png - -Interactivity -************* - -mplcursors -========== -`mplcursors `_ provides interactive data -cursors for Matplotlib. - -MplDataCursor -============= -`MplDataCursor `_ is a toolkit -written by Joe Kington to provide interactive "data cursors" (clickable -annotation boxes) for Matplotlib. - -mpl_interactions -================ -`mpl_interactions `_ -makes it easy to create interactive plots controlled by sliders and other -widgets. It also provides several handy capabilities such as manual -image segmentation, comparing cross-sections of arrays, and using the -scroll wheel to zoom. - -.. image:: /_static/mpl-interactions-slider-animated.png - -Rendering backends -****************** - -mplcairo -======== -`mplcairo `_ is a cairo backend for -Matplotlib, with faster and more accurate marker drawing, support for a wider -selection of font formats and complex text layout, and various other features. - -gr -== -`gr `_ is a framework for cross-platform -visualisation applications, which can be used as a high-performance Matplotlib -backend. - -GUI integration -*************** - -wxmplot -======= -`WXMPlot `_ provides advanced wxPython -widgets for plotting and image display of numerical data based on Matplotlib. - -Miscellaneous -************* - -adjustText -========== -`adjustText `_ is a small library for -automatically adjusting text position in Matplotlib plots to minimize overlaps -between them, specified points and other objects. - -.. image:: /_static/adjustText.png - -iTerm2 terminal backend -======================= -`matplotlib_iterm2 `_ is an -external Matplotlib backend using the iTerm2 nightly build inline image display -feature. - -.. image:: /_static/matplotlib_iterm2_demo.png - -mpl-template -============ -`mpl-template `_ provides -a customizable way to add engineering figure elements such as a title block, -border, and logo. - -.. image:: /_static/mpl_template_example.png - :height: 330px - -figpager -======== -`figpager `_ provides customizable figure -elements such as text, lines and images and subplot layout control for single -or multi page output. - - .. image:: /_static/figpager.png - -blume -===== - -`blume `_ provides a replacement for -the Matplotlib ``table`` module. It fixes a number of issues with the -existing table. See the `blume github repository -`_ for more details. - -.. image:: /_static/blume_table_example.png - -highlight-text -============== - -`highlight-text `_ is a small library -that provides an easy way to effectively annotate plots by highlighting -substrings with the font properties of your choice. -See the `highlight-text github repository -`_ for more details and examples. - -.. image:: /_static/highlight_text_examples.png - -DNA Features Viewer -=================== - -`DNA Features Viewer `_ -provides methods to plot annotated DNA sequence maps (possibly along other Matplotlib -plots) for Bioinformatics and Synthetic Biology applications. - -.. image:: /_static/dna_features_viewer_screenshot.png - -GUI applications -**************** - -sviewgui -======== - -`sviewgui `_ is a PyQt-based GUI for -visualisation of data from csv files or `pandas.DataFrame`\s. Main features: - -- Scatter, line, density, histogram, and box plot types -- Settings for the marker size, line width, number of bins of histogram, - colormap (from cmocean) -- Save figure as editable PDF -- Code of the plotted graph is available so that it can be reused and modified - outside of sviewgui - -.. image:: /_static/sviewgui_sample.png + diff --git a/doc/users/backmatter.rst b/doc/users/backmatter.rst new file mode 100644 index 000000000000..8d9fc0407d6f --- /dev/null +++ b/doc/users/backmatter.rst @@ -0,0 +1,11 @@ + +Project Information +------------------- + +.. toctree:: + :maxdepth: 1 + + license.rst + ../citing.rst + credits.rst + history.rst diff --git a/doc/users/explain.rst b/doc/users/explain.rst new file mode 100644 index 000000000000..d9d7a8474dbb --- /dev/null +++ b/doc/users/explain.rst @@ -0,0 +1,10 @@ +.. _users-guide-explain: + +Explanations +------------ + +.. toctree:: + :maxdepth: 1 + + interactive.rst + fonts.rst diff --git a/doc/users/fonts.rst b/doc/users/fonts.rst index e385c98284c0..1b9861df7414 100644 --- a/doc/users/fonts.rst +++ b/doc/users/fonts.rst @@ -1,16 +1,16 @@ -Fonts in Matplotlib Text Engine +Fonts in Matplotlib text engine =============================== Matplotlib needs fonts to work with its text engine, some of which are shipped alongside the installation. However, users can configure the default fonts, or -even provide their own custom fonts! For more details, see :doc:`Customizing +even provide their own custom fonts! For more details, see :doc:`Customizing text properties `. However, Matplotlib also provides an option to offload text rendering to a TeX engine (``usetex=True``), see :doc:`Text rendering with LaTeX `. -Font Specifications +Font specifications ------------------- Fonts have a long and sometimes incompatible history in computing, leading to different platforms supporting different types of fonts. In practice, there are @@ -40,7 +40,7 @@ fonts', more about which is explained later in the guide): NOTE: Adobe will disable support for authoring with Type 1 fonts in January 2023. `Read more here. `_ -Special Mentions +Special mentions ^^^^^^^^^^^^^^^^ Other font specifications which Matplotlib supports: diff --git a/doc/users/github_stats.rst b/doc/users/github_stats.rst index 4dfcd6e6fd1f..ea9966613f12 100644 --- a/doc/users/github_stats.rst +++ b/doc/users/github_stats.rst @@ -1,9 +1,9 @@ .. _github-stats: -GitHub statistics -================= +GitHub statistics (Aug 12, 2021) +================================ -GitHub statistics for 2021/05/08 - 2021/08/12 (tag: v3.4.2) +GitHub statistics for 2021/05/08 (tag: v3.4.2) - 2021/08/12 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/index.rst b/doc/users/index.rst index c4ec864df787..32d70d3537fe 100644 --- a/doc/users/index.rst +++ b/doc/users/index.rst @@ -1,23 +1,24 @@ .. _users-guide-index: -############ -User's guide -############ +########### +Usage Guide +########### .. only:: html :Release: |version| :Date: |today| + + + .. toctree:: - :maxdepth: 2 - - interactive.rst - fonts.rst - release_notes.rst - license.rst - ../citing.rst - ../resources/index.rst - ../faq/index.rst - credits.rst - history.rst + :maxdepth: 2 + + ../plot_types/index.rst + ../tutorials/index.rst + ../gallery/index.rst + explain.rst + ../faq/index.rst + ../api/index.rst + ../resources/index.rst diff --git a/doc/users/next_whats_new/callbacks_on_norms.rst b/doc/users/next_whats_new/callbacks_on_norms.rst new file mode 100644 index 000000000000..1904a92d2fba --- /dev/null +++ b/doc/users/next_whats_new/callbacks_on_norms.rst @@ -0,0 +1,8 @@ +A callback registry has been added to Normalize objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`.colors.Normalize` objects now have a callback registry, ``callbacks``, +that can be connected to by other objects to be notified when the norm is +updated. The callback emits the key ``changed`` when the norm is modified. +`.cm.ScalarMappable` is now a listener and will register a change +when the norm's vmin, vmax or other attributes are changed. diff --git a/doc/users/next_whats_new/fig_draw_no_output.rst b/doc/users/next_whats_new/fig_draw_no_output.rst deleted file mode 100644 index 293c6590b8c9..000000000000 --- a/doc/users/next_whats_new/fig_draw_no_output.rst +++ /dev/null @@ -1,10 +0,0 @@ -Figure now has draw_no_output method ------------------------------------- - -Rarely, the user will want to trigger a draw without making output to -either the screen or a file. This is useful for determining the final -position of artists on the figure that require a draw, like text artists. -This could be accomplished via ``fig.canvas.draw()`` but has side effects, -sometimes requires an open file, and is documented on an object most users -do not need to access. The `.Figure.draw_no_output` is provided to trigger -a draw without pushing to the final output, and with fewer side effects. \ No newline at end of file diff --git a/doc/users/next_whats_new/fig_draw_without_rendering.rst b/doc/users/next_whats_new/fig_draw_without_rendering.rst new file mode 100644 index 000000000000..8b9e3147bf07 --- /dev/null +++ b/doc/users/next_whats_new/fig_draw_without_rendering.rst @@ -0,0 +1,12 @@ +Figure now has ``draw_without_rendering`` method +------------------------------------------------ + +Some aspects of a figure are only determined at draw-time, such as the exact +position of text artists or deferred computation like automatic data limits. +If you need these values, you can use ``figure.canvas.draw()`` to force a full +draw. However, this has side effects, sometimes requires an open file, and is +doing more work than is needed. + +The new `.Figure.draw_without_rendering` method runs all the updates that +``draw()`` does, but skips rendering the figure. It's thus more efficient if you +need the updated values to configure further aspects of the figure. diff --git a/doc/users/next_whats_new/marker_none.rst b/doc/users/next_whats_new/marker_none.rst new file mode 100644 index 000000000000..b37f07ea1333 --- /dev/null +++ b/doc/users/next_whats_new/marker_none.rst @@ -0,0 +1,5 @@ +``marker`` can now be set to the string "none" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +... to mean *no-marker*, consistently with other APIs which support the +lowercase version. Using "none" is recommended over using "None", to avoid +confusion with the None object. diff --git a/doc/users/next_whats_new/widget_clear.rst b/doc/users/next_whats_new/widget_clear.rst new file mode 100644 index 000000000000..3c72dd60cc52 --- /dev/null +++ b/doc/users/next_whats_new/widget_clear.rst @@ -0,0 +1,7 @@ +Clear selector +-------------- +The selectors (`~matplotlib.widgets.SpanSelector`, `~matplotlib.widgets.RectangleSelector`, +`~matplotlib.widgets.EllipseSelector`, `~matplotlib.widgets.PolygonSelector` and +`~matplotlib.widgets.LassoSelector` have a new method *clear*, which will clear +the current selection and get the selector ready to make a new selection. This +is equivalent to press the *escape* key. diff --git a/doc/users/prev_whats_new/changelog.rst b/doc/users/prev_whats_new/changelog.rst index ae9d40680e7c..483f6eda53c3 100644 --- a/doc/users/prev_whats_new/changelog.rst +++ b/doc/users/prev_whats_new/changelog.rst @@ -7,4029 +7,4743 @@ This is a list of the changes made to Matplotlib from 2003 to 2015. For more recent changes, please refer to the `what's new <../whats_new.html>`_ or the `API changes <../../api/api_changes.html>`_. -2015-11-16 Levels passed to contour(f) and tricontour(f) must be in increasing - order. +2015-11-16 + Levels passed to contour(f) and tricontour(f) must be in increasing order. -2015-10-21 Added TextBox widget +2015-10-21 + Added TextBox widget + +2015-10-21 + Added get_ticks_direction() + +2015-02-27 + Added the rcParam 'image.composite_image' to permit users to decide whether + they want the vector graphics backends to combine all images within a set + of axes into a single composite image. (If images do not get combined, + users can open vector graphics files in Adobe Illustrator or Inkscape and + edit each image individually.) + +2015-02-19 + Rewrite of C++ code that calculates contours to add support for corner + masking. This is controlled by the 'corner_mask' keyword in plotting + commands 'contour' and 'contourf'. - IMT + +2015-01-23 + Text bounding boxes are now computed with advance width rather than ink + area. This may result in slightly different placement of text. + +2014-10-27 + Allowed selection of the backend using the :envvar:`MPLBACKEND` environment + variable. Added documentation on backend selection methods. + +2014-09-27 + Overhauled `.colors.LightSource`. Added `.LightSource.hillshade` to allow + the independent generation of illumination maps. Added new types of + blending for creating more visually appealing shaded relief plots (e.g. + ``blend_mode="overlay"``, etc, in addition to the legacy "hsv" mode). + +2014-06-10 + Added Colorbar.remove() + +2014-06-07 + Fixed bug so radial plots can be saved as ps in py3k. + +2014-06-01 + Changed the fmt kwarg of errorbar to support the the mpl convention that + "none" means "don't draw it", and to default to the empty string, so that + plotting of data points is done with the plot() function defaults. + Deprecated use of the None object in place "none". + +2014-05-22 + Allow the linscale keyword parameter of symlog scale to be smaller than + one. + +2014-05-20 + Added logic to in FontManager to invalidate font-cache if if font-family + rcparams have changed. + +2014-05-16 + Fixed the positioning of multi-line text in the PGF backend. + +2014-05-14 + Added Axes.add_image() as the standard way to add AxesImage instances to + Axes. This improves the consistency with add_artist(), add_collection(), + add_container(), add_line(), add_patch(), and add_table(). + +2014-05-02 + Added colorblind-friendly colormap, named 'Wistia'. + +2014-04-27 + Improved input clean up in Axes.{h|v}lines + Coerce input into a 1D ndarrays (after dealing with units). + +2014-04-27 + removed un-needed cast to float in stem + +2014-04-23 + Updated references to "ipython -pylab" The preferred method for invoking + pylab is now using the "%pylab" magic. + -Chris G. + +2014-04-22 + Added (re-)generate a simple automatic legend to "Figure Options" dialog of + the Qt4Agg backend. + +2014-04-22 + Added an example showing the difference between interpolation = 'none' and + interpolation = 'nearest' in `~.Axes.imshow` when saving vector graphics + files. + +2014-04-22 + Added violin plotting functions. See `.Axes.violinplot`, `.Axes.violin`, + `.cbook.violin_stats` and `.mlab.GaussianKDE` for details. + +2014-04-10 + Fixed the triangular marker rendering error. The "Up" triangle was rendered + instead of "Right" triangle and vice-versa. + +2014-04-08 + Fixed a bug in parasite_axes.py by making a list out of a generator at line + 263. + +2014-04-02 + Added ``clipon=False`` to patch creation of wedges and shadows in + `~.Axes.pie`. + +2014-02-25 + In backend_qt4agg changed from using update -> repaint under windows. See + comment in source near ``self._priv_update`` for longer explanation. + +2014-03-27 + Added tests for pie ccw parameter. Removed pdf and svg images from tests + for pie linewidth parameter. + +2014-03-24 + Changed the behaviour of axes to not ignore leading or trailing patches of + height 0 (or width 0) while calculating the x and y axis limits. Patches + having both height == 0 and width == 0 are ignored. + +2014-03-24 + Added bool kwarg (manage_xticks) to boxplot to enable/disable the + managemnet of the xlimits and ticks when making a boxplot. Default in True + which maintains current behavior by default. + +2014-03-23 + Fixed a bug in projections/polar.py by making sure that the theta value + being calculated when given the mouse coordinates stays within the range of + 0 and 2 * pi. + +2014-03-22 + Added the keyword arguments wedgeprops and textprops to pie. Users can + control the wedge and text properties of the pie in more detail, if they + choose. + +2014-03-17 + Bug was fixed in append_axes from the AxesDivider class would not append + axes in the right location with respect to the reference locator axes + +2014-03-13 + Add parameter 'clockwise' to function pie, True by default. + +2014-02-28 + Added 'origin' kwarg to `~.Axes.spy` + +2014-02-27 + Implemented separate horizontal/vertical axes padding to the ImageGrid in + the AxesGrid toolkit + +2014-02-27 + Allowed markevery property of matplotlib.lines.Line2D to be, an int numpy + fancy index, slice object, or float. The float behaviour turns on markers + at approximately equal display-coordinate-distances along the line. + +2014-02-25 + In backend_qt4agg changed from using update -> repaint under windows. See + comment in source near ``self._priv_update`` for longer explanation. + +2014-01-02 + `~.Axes.triplot` now returns the artist it adds and support of line and + marker kwargs has been improved. GBY + +2013-12-30 + Made streamplot grid size consistent for different types of density + argument. A 30x30 grid is now used for both density=1 and density=(1, 1). + +2013-12-03 + Added a pure boxplot-drawing method that allow a more complete + customization of boxplots. It takes a list of dicts contains stats. Also + created a function (`.cbook.boxplot_stats`) that generates the stats + needed. + +2013-11-28 + Added qhull extension module to perform Delaunay triangulation more + robustly than before. It is used by tri.Triangulation (and hence all + pyplot.tri* methods) and mlab.griddata. Deprecated matplotlib.delaunay + module. - IMT + +2013-11-05 + Add power-law normalization method. This is useful for, e.g., showing small + populations in a "hist2d" histogram. + +2013-10-27 + Added get_rlabel_position and set_rlabel_position methods to PolarAxes to + control angular position of radial tick labels. + +2013-10-06 + Add stride-based functions to mlab for easy creation of 2D arrays with less + memory. + +2013-10-06 + Improve window and detrend functions in mlab, particulart support for 2D + arrays. + +2013-10-06 + Improve performance of all spectrum-related mlab functions and plots. + +2013-10-06 + Added support for magnitude, phase, and angle spectrums to axes.specgram, + and support for magnitude, phase, angle, and complex spectrums to + mlab-specgram. + +2013-10-06 + Added magnitude_spectrum, angle_spectrum, and phase_spectrum plots, as well + as magnitude_spectrum, angle_spectrum, phase_spectrum, and complex_spectrum + functions to mlab + +2013-07-12 + Added support for datetime axes to 2d plots. Axis values are passed through + Axes.convert_xunits/Axes.convert_yunits before being used by + contour/contourf, pcolormesh and pcolor. + +2013-07-12 + Allowed matplotlib.dates.date2num, matplotlib.dates.num2date, and + matplotlib.dates.datestr2num to accept n-d inputs. Also factored in support + for n-d arrays to matplotlib.dates.DateConverter and + matplotlib.units.Registry. + +2013-06-26 + Refactored the axes module: the axes module is now a folder, containing the + following submodule: + + - _subplots.py, containing all the subplots helper methods + - _base.py, containing several private methods and a new _AxesBase class. + This _AxesBase class contains all the methods that are not directly + linked to plots of the "old" Axes + - _axes.py contains the Axes class. This class now inherits from _AxesBase: + it contains all "plotting" methods and labelling methods. + + This refactoring should not affect the API. Only private methods are not + importable from the axes module anymore. + +2013-05-18 + Added support for arbitrary rasterization resolutions to the SVG backend. + Previously the resolution was hard coded to 72 dpi. Now the backend class + takes a image_dpi argument for its constructor, adjusts the image bounding + box accordingly and forwards a magnification factor to the image renderer. + The code and results now resemble those of the PDF backend. + - MW + +2013-05-08 + Changed behavior of hist when given stacked=True and normed=True. + Histograms are now stacked first, then the sum is normalized. Previously, + each histogram was normalized, then they were stacked. + +2013-04-25 + Changed all instances of:: + + from matplotlib import MatplotlibDeprecationWarning as mplDeprecation + + to:: + + from cbook import mplDeprecation + + and removed the import into the matplotlib namespace in __init__.py + - Thomas Caswell + +2013-04-15 + Added 'axes.xmargin' and 'axes.ymargin' to rpParams to set default margins + on auto-scaleing. - TAC + +2013-04-16 + Added patheffect support for Line2D objects. -JJL + +2013-03-31 + Added support for arbitrary unstructured user-specified triangulations to + Axes3D.tricontour[f] - Damon McDougall + +2013-03-19 + Added support for passing *linestyle* kwarg to `~.Axes.step` so all + `~.Axes.plot` kwargs are passed to the underlying `~.Axes.plot` call. -TAC + +2013-02-25 + Added classes CubicTriInterpolator, UniformTriRefiner, TriAnalyzer to + matplotlib.tri module. - GBy + +2013-01-23 + Add 'savefig.directory' to rcParams to remember and fill in the last + directory saved to for figure save dialogs - Martin Spacek + +2013-01-13 + Add eventplot method to axes and pyplot and EventCollection class to + collections. + +2013-01-08 + Added two extra titles to axes which are flush with the left and right + edges of the plot respectively. Andrew Dawson + +2013-01-07 + Add framealpha keyword argument to legend - PO + +2013-01-16 + Till Stensitzki added a baseline feature to stackplot + +2012-12-22 + Added classes for interpolation within triangular grids + (LinearTriInterpolator) and to find the triangles in which points lie + (TrapezoidMapTriFinder) to matplotlib.tri module. - IMT + +2012-12-05 + Added MatplotlibDeprecationWarning class for signaling deprecation. + Matplotlib developers can use this class as follows:: + + from matplotlib import MatplotlibDeprecationWarning as mplDeprecation + + In light of the fact that Python builtin DeprecationWarnings are ignored by + default as of Python 2.7, this class was put in to allow for the signaling + of deprecation, but via UserWarnings which are not ignored by default. - PI + +2012-11-27 + Added the *mtext* parameter for supplying matplotlib.text.Text instances to + RendererBase.draw_tex and RendererBase.draw_text. This allows backends to + utilize additional text attributes, like the alignment of text elements. - + pwuertz + +2012-11-26 + deprecate matplotlib/mpl.py, which was used only in pylab.py and is now + replaced by the more suitable ``import matplotlib as mpl``. - PI + +2012-11-25 + Make rc_context available via pyplot interface - PI + +2012-11-16 + plt.set_cmap no longer throws errors if there is not already an active + colorable artist, such as an image, and just sets up the colormap to use + from that point forward. - PI + +2012-11-16 + Added the funcction _get_rbga_face, which is identical to _get_rbg_face + except it return a (r,g,b,a) tuble, to line2D. Modified Line2D.draw to use + _get_rbga_face to get the markerface color so that any alpha set by + markerfacecolor will respected. - Thomas Caswell + +2012-11-13 + Add a symmetric log normalization class to colors.py. Also added some + tests for the normalization class. Till Stensitzki +2012-11-12 + Make axes.stem take at least one argument. Uses a default range(n) when + the first arg not provided. Damon McDougall -2015-10-21 Added get_ticks_direction() +2012-11-09 + Make plt.subplot() without arguments act as subplot(111) - PI -2015-02-27 Added the rcParam 'image.composite_image' to permit users - to decide whether they want the vector graphics backends to combine - all images within a set of axes into a single composite image. - (If images do not get combined, users can open vector graphics files - in Adobe Illustrator or Inkscape and edit each image individually.) +2012-11-08 + Replaced plt.figure and plt.subplot calls by the newer, more convenient + single call to plt.subplots() in the documentation examples - PI -2015-02-19 Rewrite of C++ code that calculates contours to add support for - corner masking. This is controlled by the 'corner_mask' keyword - in plotting commands 'contour' and 'contourf'. - IMT +2012-10-05 + Add support for saving animations as animated GIFs. - JVDP + +2012-08-11 + Fix path-closing bug in patches.Polygon, so that regardless of whether the + path is the initial one or was subsequently set by set_xy(), get_xy() will + return a closed path if and only if get_closed() is True. Thanks to Jacob + Vanderplas. - EF + +2012-08-05 + When a norm is passed to contourf, either or both of the vmin, vmax + attributes of that norm are now respected. Formerly they were respected + only if both were specified. In addition, vmin and/or vmax can now be + passed to contourf directly as kwargs. - EF + +2012-07-24 + Contourf handles the extend kwarg by mapping the extended ranges outside + the normed 0-1 range so that they are handled by colormap colors determined + by the set_under and set_over methods. Previously the extended ranges were + mapped to 0 or 1 so that the "under" and "over" colormap colors were + ignored. This change also increases slightly the color contrast for a given + set of contour levels. - EF + +2012-06-24 + Make use of mathtext in tick labels configurable - DSD + +2012-06-05 + Images loaded through PIL are now ordered correctly - CG + +2012-06-02 + Add new Axes method and pyplot function, hist2d. - PO + +2012-05-31 + Remove support for 'cairo.' style of backend specification. + Deprecate 'cairo.format' and 'savefig.extension' rcParams and replace with + 'savefig.format'. - Martin Spacek + +2012-05-29 + pcolormesh now obeys the passed in "edgecolor" kwarg. To support this, the + "shading" argument to pcolormesh now only takes "flat" or "gouraud". To + achieve the old "faceted" behavior, pass "edgecolors='k'". - MGD + +2012-05-22 + Added radius kwarg to pie charts. - HH + +2012-05-22 + Collections now have a setting "offset_position" to select whether the + offsets are given in "screen" coordinates (default, following the old + behavior) or "data" coordinates. This is currently used internally to + improve the performance of hexbin. + + As a result, the "draw_path_collection" backend methods have grown a new + argument "offset_position". - MGD + +2012-05-04 + Add a new argument to pie charts - startingangle - that allows one to + specify the angle offset for the first wedge of the chart. - EP + +2012-05-03 + symlog scale now obeys the logarithmic base. Previously, it was completely + ignored and always treated as base e. - MGD + +2012-05-03 + Allow linscalex/y keyword to symlog scale that allows the size of the + linear portion relative to the logarithmic portion to be adjusted. - MGD + +2012-04-14 + Added new plot style: stackplot. This new feature supports stacked area + plots. - Damon McDougall + +2012-04-06 + When path clipping changes a LINETO to a MOVETO, it also changes any + CLOSEPOLY command to a LINETO to the initial point. This fixes a problem + with pdf and svg where the CLOSEPOLY would then draw a line to the latest + MOVETO position instead of the intended initial position. - JKS + +2012-03-27 + Add support to ImageGrid for placing colorbars only at one edge of each + column/row. - RMM + +2012-03-07 + Refactor movie writing into useful classes that make use of pipes to write + image data to ffmpeg or mencoder. Also improve settings for these and the + ability to pass custom options. - RMM + +2012-02-29 + errorevery keyword added to errorbar to enable errorbar subsampling. fixes + issue #600. + +2012-02-28 + Added plot_trisurf to the mplot3d toolkit. This supports plotting three + dimensional surfaces on an irregular grid. - Damon McDougall + +2012-01-23 + The radius labels in polar plots no longer use a fixed padding, but use a + different alignment depending on the quadrant they are in. This fixes + numerical problems when (rmax - rmin) gets too small. - MGD + +2012-01-08 + Add axes.streamplot to plot streamlines of a velocity field. Adapted from + Tom Flannaghan streamplot implementation. -TSY + +2011-12-29 + ps and pdf markers are now stroked only if the line width is nonzero for + consistency with agg, fixes issue #621. - JKS + +2011-12-27 + Work around an EINTR bug in some versions of subprocess. - JKS + +2011-10-25 + added support for \operatorname to mathtext, including the ability to + insert spaces, such as $\operatorname{arg\,max}$ - PI + +2011-08-18 + Change api of Axes.get_tightbbox and add an optional keyword parameter + *call_axes_locator*. - JJL + +2011-07-29 + A new rcParam "axes.formatter.use_locale" was added, that, when True, will + use the current locale to format tick labels. This means that, for + example, in the fr_FR locale, ',' will be used as a decimal separator. - + MGD -2015-01-23 Text bounding boxes are now computed with advance width rather than - ink area. This may result in slightly different placement of text. +2011-07-15 + The set of markers available in the plot() and scatter() commands has been + unified. In general, this gives more options to both than were previously + available, however, there is one backward-incompatible change to the + markers in scatter: + + "d" used to mean "diamond", it now means "narrow diamond". "D" can be + used for a "diamond". + + -MGD + +2011-07-13 + Fix numerical problems in symlog scale, particularly when linthresh <= 1.0. + Symlog plots may look different if one was depending on the old broken + behavior - MGD + +2011-07-10 + Fixed argument handling error in tripcolor/triplot/tricontour, issue #203. + - IMT + +2011-07-08 + Many functions added to mplot3d.axes3d to bring Axes3D objects more + feature-parity with regular Axes objects. Significant revisions to the + documentation as well. - BVR + +2011-07-07 + Added compatibility with IPython strategy for picking a version of Qt4 + support, and an rcParam for making the choice explicitly: backend.qt4. - EF + +2011-07-07 + Modified AutoMinorLocator to improve automatic choice of the number of + minor intervals per major interval, and to allow one to specify this number + via a kwarg. - EF -2014-10-27 Allowed selection of the backend using the :envvar:`MPLBACKEND` environment - variable. Added documentation on backend selection methods. +2011-06-28 + 3D versions of scatter, plot, plot_wireframe, plot_surface, bar3d, and some + other functions now support empty inputs. - BVR -2014-09-27 Overhauled `.colors.LightSource`. Added `.LightSource.hillshade` to - allow the independent generation of illumination maps. Added new - types of blending for creating more visually appealing shaded relief - plots (e.g. ``blend_mode="overlay"``, etc, in addition to the legacy - "hsv" mode). +2011-06-22 + Add set_theta_offset, set_theta_direction and set_theta_zero_location to + polar axes to control the location of 0 and directionality of theta. - MGD -2014-06-10 Added Colorbar.remove() +2011-06-22 + Add axes.labelweight parameter to set font weight to axis labels - MGD. -2014-06-07 Fixed bug so radial plots can be saved as ps in py3k. +2011-06-20 + Add pause function to pyplot. - EF -2014-06-01 Changed the fmt kwarg of errorbar to support the - the mpl convention that "none" means "don't draw it", - and to default to the empty string, so that plotting - of data points is done with the plot() function - defaults. Deprecated use of the None object in place - "none". +2011-06-16 + Added *bottom* keyword parameter for the stem command. Also, implemented a + legend handler for the stem plot. - JJL -2014-05-22 Allow the linscale keyword parameter of symlog scale to be - smaller than one. +2011-06-16 + Added legend.frameon rcParams. - Mike Kaufman -2014-05-20 Added logic to in FontManager to invalidate font-cache if - if font-family rcparams have changed. +2011-05-31 + Made backend_qt4 compatible with PySide . - Gerald Storer -2014-05-16 Fixed the positioning of multi-line text in the PGF backend. +2011-04-17 + Disable keyboard auto-repeat in qt4 backend by ignoring key events + resulting from auto-repeat. This makes constrained zoom/pan work. - EF -2014-05-14 Added Axes.add_image() as the standard way to add AxesImage - instances to Axes. This improves the consistency with - add_artist(), add_collection(), add_container(), add_line(), - add_patch(), and add_table(). +2011-04-14 + interpolation="nearest" always interpolate images. A new mode "none" is + introduced for no interpolation - JJL -2014-05-02 Added colorblind-friendly colormap, named 'Wistia'. +2011-04-03 + Fixed broken pick interface to AsteriskCollection objects used by scatter. + - EF -2014-04-27 Improved input clean up in Axes.{h|v}lines - Coerce input into a 1D ndarrays (after dealing with units). +2011-04-01 + The plot directive Sphinx extension now supports all of the features in the + Numpy fork of that extension. These include doctest formatting, an + 'include-source' option, and a number of new configuration options. - MGD -2014-04-27 removed un-needed cast to float in stem +2011-03-29 + Wrapped ViewVCCachedServer definition in a factory function. This class + now inherits from urllib2.HTTPSHandler in order to fetch data from github, + but HTTPSHandler is not defined if python was built without SSL support. - + DSD -2014-04-23 Updated references to "ipython -pylab" - The preferred method for invoking pylab is now using the - "%pylab" magic. - -Chris G. +2011-03-10 + Update pytz version to 2011c, thanks to Simon Cross. - JKS -2014-04-22 Added (re-)generate a simple automatic legend to "Figure Options" - dialog of the Qt4Agg backend. +2011-03-06 + Add standalone tests.py test runner script. - JKS + +2011-03-06 + Set edgecolor to 'face' for scatter asterisk-type symbols; this fixes a bug + in which these symbols were not responding to the c kwarg. The symbols + have no face area, so only the edgecolor is visible. - EF -2014-04-22 Added an example showing the difference between - interpolation = 'none' and interpolation = 'nearest' in - `~.Axes.imshow` when saving vector graphics files. +2011-02-27 + Support libpng version 1.5.x; suggestion by Michael Albert. Changed + installation specification to a minimum of libpng version 1.2. - EF -2014-04-22 Added violin plotting functions. See `.Axes.violinplot`, - `.Axes.violin`, `.cbook.violin_stats` and `.mlab.GaussianKDE` for - details. +2011-02-20 + clabel accepts a callable as an fmt kwarg; modified patch by Daniel Hyams. + - EF -2014-04-10 Fixed the triangular marker rendering error. The "Up" triangle was - rendered instead of "Right" triangle and vice-versa. +2011-02-18 + scatter([], []) is now valid. Also fixed issues with empty collections - + BVR -2014-04-08 Fixed a bug in parasite_axes.py by making a list out - of a generator at line 263. +2011-02-07 + Quick workaround for dviread bug #3175113 - JKS -2014-04-02 Added ``clipon=False`` to patch creation of wedges and shadows - in `~.Axes.pie`. +2011-02-05 + Add cbook memory monitoring for Windows, using tasklist. - EF -2014-02-25 In backend_qt4agg changed from using update -> repaint under - windows. See comment in source near ``self._priv_update`` for - longer explanation. +2011-02-05 + Speed up Normalize and LogNorm by using in-place operations and by using + float32 for float32 inputs and for ints of 2 bytes or shorter; based on + patch by Christoph Gohlke. - EF -2014-03-27 Added tests for pie ccw parameter. Removed pdf and svg images - from tests for pie linewidth parameter. +2011-02-04 + Changed imshow to use rgba as uint8 from start to finish, instead of going + through an intermediate step as double precision; thanks to Christoph + Gohlke. - EF -2014-03-24 Changed the behaviour of axes to not ignore leading or trailing - patches of height 0 (or width 0) while calculating the x and y - axis limits. Patches having both height == 0 and width == 0 are - ignored. +2011-01-13 + Added zdir and offset arguments to contourf3d to bring contourf3d in + feature parity with contour3d. - BVR -2014-03-24 Added bool kwarg (manage_xticks) to boxplot to enable/disable - the managemnet of the xlimits and ticks when making a boxplot. - Default in True which maintains current behavior by default. +2011-01-04 + Tag 1.0.1 for release at r8896 -2014-03-23 Fixed a bug in projections/polar.py by making sure that the theta - value being calculated when given the mouse coordinates stays within - the range of 0 and 2 * pi. +2011-01-03 + Added display of ticker offset to 3d plots. - BVR + +2011-01-03 + Turn off tick labeling on interior subplots for pyplots.subplots when + sharex/sharey is True. - JDH -2014-03-22 Added the keyword arguments wedgeprops and textprops to pie. - Users can control the wedge and text properties of the pie - in more detail, if they choose. +2010-12-29 + Implement axes_divider.HBox and VBox. -JJL -2014-03-17 Bug was fixed in append_axes from the AxesDivider class would not - append axes in the right location with respect to the reference - locator axes +2010-11-22 + Fixed error with Hammer projection. - BVR + +2010-11-12 + Fixed the placement and angle of axis labels in 3D plots. - BVR + +2010-11-07 + New rc parameters examples.download and examples.directory allow bypassing + the download mechanism in get_sample_data. - JKS + +2010-10-04 + Fix JPEG saving bug: only accept the kwargs documented by PIL for JPEG + files. - JKS + +2010-09-15 + Remove unused _wxagg extension and numerix.h. - EF + +2010-08-25 + Add new framework for doing animations with examples.- RM + +2010-08-21 + Remove unused and inappropriate methods from Tick classes: + set_view_interval, get_minpos, and get_data_interval are properly found in + the Axis class and don't need to be duplicated in XTick and YTick. - EF + +2010-08-21 + Change Axis.set_view_interval() so that when updating an existing interval, + it respects the orientation of that interval, and can enlarge but not + reduce the interval. This fixes a bug in which Axis.set_ticks would change + the view limits of an inverted axis. Whether set_ticks should be affecting + the viewLim at all remains an open question. - EF + +2010-08-16 + Handle NaN's correctly in path analysis routines. Fixes a bug where the + best location for a legend was not calculated correctly when the line + contains NaNs. - MGD -2014-03-13 Add parameter 'clockwise' to function pie, True by default. +2010-08-14 + Fix bug in patch alpha handling, and in bar color kwarg - EF + +2010-08-12 + Removed all traces of numerix module after 17 months of deprecation + warnings. - EF -2014-02-28 Added 'origin' kwarg to `~.Axes.spy` +2010-08-05 + Added keyword arguments 'thetaunits' and 'runits' for polar plots. Fixed + PolarAxes so that when it set default Formatters, it marked them as such. + Fixed semilogx and semilogy to no longer blindly reset the ticker + information on the non-log axis. Axes.arrow can now accept unitized data. + - JRE -2014-02-27 Implemented separate horizontal/vertical axes padding to the - ImageGrid in the AxesGrid toolkit +2010-08-03 + Add support for MPLSETUPCFG variable for custom setup.cfg filename. Used + by sage buildbot to build an mpl w/ no gui support - JDH -2014-02-27 Allowed markevery property of matplotlib.lines.Line2D to be, an int - numpy fancy index, slice object, or float. The float behaviour - turns on markers at approximately equal display-coordinate-distances - along the line. +2010-08-01 + Create directory specified by MPLCONFIGDIR if it does not exist. - ADS -2014-02-25 In backend_qt4agg changed from using update -> repaint under - windows. See comment in source near ``self._priv_update`` for - longer explanation. +2010-07-20 + Return Qt4's default cursor when leaving the canvas - DSD -2014-01-02 `~.Axes.triplot` now returns the artist it adds and support of line and - marker kwargs has been improved. GBY +2010-07-06 + Tagging for mpl 1.0 at r8502 -2013-12-30 Made streamplot grid size consistent for different types of density - argument. A 30x30 grid is now used for both density=1 and - density=(1, 1). +2010-07-05 + Added Ben Root's patch to put 3D plots in arbitrary axes, allowing you to + mix 3d and 2d in different axes/subplots or to have multiple 3D plots in + one figure. See examples/mplot3d/subplot3d_demo.py - JDH -2013-12-03 Added a pure boxplot-drawing method that allow a more complete - customization of boxplots. It takes a list of dicts contains stats. - Also created a function (`.cbook.boxplot_stats`) that generates the - stats needed. +2010-07-05 + Preferred kwarg names in set_xlim are now 'left' and 'right'; in set_ylim, + 'bottom' and 'top'; original kwargs are still accepted without complaint. - + EF -2013-11-28 Added qhull extension module to perform Delaunay triangulation more - robustly than before. It is used by tri.Triangulation (and hence - all pyplot.tri* methods) and mlab.griddata. Deprecated - matplotlib.delaunay module. - IMT +2010-07-05 + TkAgg and FltkAgg backends are now consistent with other interactive + backends: when used in scripts from the command line (not from ipython + -pylab), show blocks, and can be called more than once. - EF -2013-11-05 Add power-law normalization method. This is useful for, - e.g., showing small populations in a "hist2d" histogram. +2010-07-02 + Modified CXX/WrapPython.h to fix "swab bug" on solaris so mpl can compile + on Solaris with CXX6 in the trunk. Closes tracker bug 3022815 - JDH -2013-10-27 Added get_rlabel_position and set_rlabel_position methods to - PolarAxes to control angular position of radial tick labels. +2010-06-30 + Added autoscale convenience method and corresponding pyplot function for + simplified control of autoscaling; and changed axis, set_xlim, and set_ylim + so that by default, they turn off the autoscaling on the relevant axis or + axes. Therefore one can call set_xlim before plotting a line, for example, + and the limits will be retained. - EF -2013-10-06 Add stride-based functions to mlab for easy creation of 2D arrays - with less memory. +2010-06-20 + Added Axes.tick_params and corresponding pyplot function to control tick + and tick label appearance after an Axes has been created. - EF -2013-10-06 Improve window and detrend functions in mlab, particulart support for - 2D arrays. +2010-06-09 + Allow Axes.grid to control minor gridlines; allow Axes.grid and Axis.grid + to control major and minor gridlines in the same method call. - EF -2013-10-06 Improve performance of all spectrum-related mlab functions and plots. +2010-06-06 + Change the way we do split/dividend adjustments in finance.py to handle + dividends and fix the zero division bug reported in sf bug 2949906 and + 2123566. Note that volume is not adjusted because the Yahoo CSV does not + distinguish between share split and dividend adjustments making it near + impossible to get volume adjustment right (unless we want to guess based on + the size of the adjustment or scrape the html tables, which we don't) - JDH -2013-10-06 Added support for magnitude, phase, and angle spectrums to - axes.specgram, and support for magnitude, phase, angle, and complex - spectrums to mlab-specgram. +2010-06-06 + Updated dateutil to 1.5 and pytz to 2010h. -2013-10-06 Added magnitude_spectrum, angle_spectrum, and phase_spectrum plots, - as well as magnitude_spectrum, angle_spectrum, phase_spectrum, - and complex_spectrum functions to mlab +2010-06-02 + Add error_kw kwarg to Axes.bar(). - EF -2013-07-12 Added support for datetime axes to 2d plots. Axis values are passed - through Axes.convert_xunits/Axes.convert_yunits before being used by - contour/contourf, pcolormesh and pcolor. +2010-06-01 + Fix pcolormesh() and QuadMesh to pass on kwargs as appropriate. - RM -2013-07-12 Allowed matplotlib.dates.date2num, matplotlib.dates.num2date, - and matplotlib.dates.datestr2num to accept n-d inputs. Also - factored in support for n-d arrays to matplotlib.dates.DateConverter - and matplotlib.units.Registry. +2010-05-18 + Merge mpl_toolkits.gridspec into the main tree. - JJL + +2010-05-04 + Improve backend_qt4 so it displays figures with the correct size - DSD + +2010-04-20 + Added generic support for connecting to a timer for events. This adds + TimerBase, TimerGTK, TimerQT, TimerWx, and TimerTk to the backends and a + new_timer() method to each backend's canvas to allow ease of creating a new + timer. - RM + +2010-04-20 + Added margins() Axes method and pyplot function. - EF -2013-06-26 Refactored the axes module: the axes module is now a folder, - containing the following submodule: - - _subplots.py, containing all the subplots helper methods - - _base.py, containing several private methods and a new - _AxesBase class. This _AxesBase class contains all the methods - that are not directly linked to plots of the "old" Axes - - _axes.py contains the Axes class. This class now inherits from - _AxesBase: it contains all "plotting" methods and labelling - methods. +2010-04-18 + update the axes_grid documentation. -JJL - This refactoring should not affect the API. Only private methods - are not importable from the axes module anymore. +2010-04-18 + Control MaxNLocator parameters after instantiation, and via + Axes.locator_params method, with corresponding pyplot function. -EF -2013-05-18 Added support for arbitrary rasterization resolutions to the - SVG backend. Previously the resolution was hard coded to 72 - dpi. Now the backend class takes a image_dpi argument for - its constructor, adjusts the image bounding box accordingly - and forwards a magnification factor to the image renderer. - The code and results now resemble those of the PDF backend. - - MW +2010-04-18 + Control ScalarFormatter offsets directly and via the + Axes.ticklabel_format() method, and add that to pyplot. -EF + +2010-04-16 + Add a close_event to the backends. -RM -2013-05-08 Changed behavior of hist when given stacked=True and normed=True. - Histograms are now stacked first, then the sum is normalized. - Previously, each histogram was normalized, then they were stacked. +2010-04-06 + modify axes_grid examples to use axes_grid1 and axisartist. -JJL -2013-04-25 Changed all instances of: +2010-04-06 + rebase axes_grid using axes_grid1 and axisartist modules. -JJL - from matplotlib import MatplotlibDeprecationWarning as mplDeprecation - to: +2010-04-06 + axes_grid toolkit is split into two separate modules, axes_grid1 and + axisartist. -JJL - from cbook import mplDeprecation +2010-04-05 + Speed up import: import pytz only if and when it is needed. It is not + needed if the rc timezone is UTC. - EF - and removed the import into the matplotlib namespace in __init__.py - Thomas Caswell +2010-04-03 + Added color kwarg to Axes.hist(), based on work by Jeff Klukas. - EF -2013-04-15 Added 'axes.xmargin' and 'axes.ymargin' to rpParams to set default - margins on auto-scaleing. - TAC +2010-03-24 + refactor colorbar code so that no cla() is necessary when mappable is + changed. -JJL + +2010-03-22 + fix incorrect rubber band during the zoom mode when mouse leaves the axes. + -JJL -2013-04-16 Added patheffect support for Line2D objects. -JJL +2010-03-21 + x/y key during the zoom mode only changes the x/y limits. -JJL -2013-03-31 Added support for arbitrary unstructured user-specified - triangulations to Axes3D.tricontour[f] - Damon McDougall +2010-03-20 + Added pyplot.sca() function suggested by JJL. - EF -2013-03-19 Added support for passing *linestyle* kwarg to `~.Axes.step` so all `~.Axes.plot` - kwargs are passed to the underlying `~.Axes.plot` call. -TAC +2010-03-20 + Added conditional support for new Tooltip API in gtk backend. - EF -2013-02-25 Added classes CubicTriInterpolator, UniformTriRefiner, TriAnalyzer - to matplotlib.tri module. - GBy +2010-03-20 + Changed plt.fig_subplot() to plt.subplots() after discussion on list, and + changed its API to return axes as a numpy object array (with control of + dimensions via squeeze keyword). FP. -2013-01-23 Add 'savefig.directory' to rcParams to remember and fill in the last - directory saved to for figure save dialogs - Martin Spacek +2010-03-13 + Manually brought in commits from branch:: -2013-01-13 Add eventplot method to axes and pyplot and EventCollection class - to collections. + ------------------------------------------------------------------------ + r8191 | leejjoon | 2010-03-13 + 17:27:57 -0500 (Sat, 13 Mar 2010) | 1 line -2013-01-08 Added two extra titles to axes which are flush with the left and - right edges of the plot respectively. - Andrew Dawson + fix the bug that handles for scatter are incorrectly set when dpi!=72. + Thanks to Ray Speth for the bug report. -2013-01-07 Add framealpha keyword argument to legend - PO +2010-03-03 + Manually brought in commits from branch via diff/patch (svnmerge is broken):: -2013-01-16 Till Stensitzki added a baseline feature to stackplot + ------------------------------------------------------------------------ + r8175 | leejjoon | 2010-03-03 + 10:03:30 -0800 (Wed, 03 Mar 2010) | 1 line -2012-12-22 Added classes for interpolation within triangular grids - (LinearTriInterpolator) and to find the triangles in which points - lie (TrapezoidMapTriFinder) to matplotlib.tri module. - IMT + fix arguments of allow_rasterization.draw_wrapper + ------------------------------------------------------------------------ + r8174 | jdh2358 | 2010-03-03 + 09:15:58 -0800 (Wed, 03 Mar 2010) | 1 line -2012-12-05 Added MatplotlibDeprecationWarning class for signaling deprecation. - Matplotlib developers can use this class as follows: + added support for favicon in docs build + ------------------------------------------------------------------------ + r8173 | jdh2358 | 2010-03-03 + 08:56:16 -0800 (Wed, 03 Mar 2010) | 1 line - from matplotlib import MatplotlibDeprecationWarning as mplDeprecation + applied Mattias get_bounds patch + ------------------------------------------------------------------------ + r8172 | jdh2358 | 2010-03-03 + 08:31:42 -0800 (Wed, 03 Mar 2010) | 1 line - In light of the fact that Python builtin DeprecationWarnings are - ignored by default as of Python 2.7, this class was put in to allow - for the signaling of deprecation, but via UserWarnings which are - not ignored by default. - PI + fix svnmerge download instructions + ------------------------------------------------------------------------ + r8171 | jdh2358 | 2010-03-03 + 07:47:48 -0800 (Wed, 03 Mar 2010) | 1 line -2012-11-27 Added the *mtext* parameter for supplying matplotlib.text.Text - instances to RendererBase.draw_tex and RendererBase.draw_text. - This allows backends to utilize additional text attributes, like - the alignment of text elements. - pwuertz +2010-02-25 + add annotation_demo3.py that demonstrates new functionality. -JJL -2012-11-26 deprecate matplotlib/mpl.py, which was used only in pylab.py and is - now replaced by the more suitable ``import matplotlib as mpl``. - PI +2010-02-25 + refactor Annotation to support arbitrary Transform as xycoords or + textcoords. Also, if a tuple of two coordinates is provided, they are + interpreted as coordinates for each x and y position. -JJL -2012-11-25 Make rc_context available via pyplot interface - PI +2010-02-24 + Added pyplot.fig_subplot(), to create a figure and a group of subplots in a + single call. This offers an easier pattern than manually making figures + and calling add_subplot() multiple times. FP -2012-11-16 plt.set_cmap no longer throws errors if there is not already - an active colorable artist, such as an image, and just sets - up the colormap to use from that point forward. - PI +2010-02-17 + Added Gokhan's and Mattias' customizable keybindings patch for the toolbar. + You can now set the keymap.* properties in the matplotlibrc file. + Newbindings were added for toggling log scaling on the x-axis. JDH -2012-11-16 Added the funcction _get_rbga_face, which is identical to - _get_rbg_face except it return a (r,g,b,a) tuble, to line2D. - Modified Line2D.draw to use _get_rbga_face to get the markerface - color so that any alpha set by markerfacecolor will respected. - - Thomas Caswell +2010-02-16 + Committed TJ's filled marker patch for left|right|bottom|top|full filled + markers. See examples/pylab_examples/filledmarker_demo.py. JDH -2012-11-13 Add a symmetric log normalization class to colors.py. - Also added some tests for the normalization class. - Till Stensitzki +2010-02-11 + Added 'bootstrap' option to boxplot. This allows bootstrap estimates of + median confidence intervals. Based on an initial patch by Paul Hobson. - + ADS -2012-11-12 Make axes.stem take at least one argument. - Uses a default range(n) when the first arg not provided. - Damon McDougall +2010-02-06 + Added setup.cfg "basedirlist" option to override setting in setupext.py + "basedir" dictionary; added "gnu0" platform requested by Benjamin Drung. - + EF -2012-11-09 Make plt.subplot() without arguments act as subplot(111) - PI +2010-02-06 + Added 'xy' scaling option to EllipseCollection. - EF -2012-11-08 Replaced plt.figure and plt.subplot calls by the newer, more - convenient single call to plt.subplots() in the documentation - examples - PI +2010-02-03 + Made plot_directive use a custom PlotWarning category, so that warnings can + be turned into fatal errors easily if desired. - FP -2012-10-05 Add support for saving animations as animated GIFs. - JVDP +2010-01-29 + Added draggable method to Legend to allow mouse drag placement. Thanks + Adam Fraser. JDH -2012-08-11 Fix path-closing bug in patches.Polygon, so that regardless - of whether the path is the initial one or was subsequently - set by set_xy(), get_xy() will return a closed path if and - only if get_closed() is True. Thanks to Jacob Vanderplas. - EF +2010-01-25 + Fixed a bug reported by Olle Engdegard, when using histograms with + stepfilled and log=True - MM -2012-08-05 When a norm is passed to contourf, either or both of the - vmin, vmax attributes of that norm are now respected. - Formerly they were respected only if both were - specified. In addition, vmin and/or vmax can now - be passed to contourf directly as kwargs. - EF +2010-01-16 + Upgraded CXX to 6.1.1 - JDH -2012-07-24 Contourf handles the extend kwarg by mapping the extended - ranges outside the normed 0-1 range so that they are - handled by colormap colors determined by the set_under - and set_over methods. Previously the extended ranges - were mapped to 0 or 1 so that the "under" and "over" - colormap colors were ignored. This change also increases - slightly the color contrast for a given set of contour - levels. - EF +2009-01-16 + Don't create minor ticks on top of existing major ticks. Patch by Neil + Crighton. -ADS -2012-06-24 Make use of mathtext in tick labels configurable - DSD +2009-01-16 + Ensure three minor ticks always drawn (SF# 2924245). Patch by Neil + Crighton. -ADS -2012-06-05 Images loaded through PIL are now ordered correctly - CG +2010-01-16 + Applied patch by Ian Thomas to fix two contouring problems: now contourf + handles interior masked regions, and the boundaries of line and filled + contours coincide. - EF -2012-06-02 Add new Axes method and pyplot function, hist2d. - PO +2009-01-11 + The color of legend patch follows the rc parameters axes.facecolor and + axes.edgecolor. -JJL -2012-05-31 Remove support for 'cairo.' style of backend specification. - Deprecate 'cairo.format' and 'savefig.extension' rcParams and - replace with 'savefig.format'. - Martin Spacek +2009-01-11 + adjustable of Axes can be "box-forced" which allow sharing axes. -JJL -2012-05-29 pcolormesh now obeys the passed in "edgecolor" kwarg. - To support this, the "shading" argument to pcolormesh now only - takes "flat" or "gouraud". To achieve the old "faceted" behavior, - pass "edgecolors='k'". - MGD +2009-01-11 + Add add_click and pop_click methods in BlockingContourLabeler. -JJL -2012-05-22 Added radius kwarg to pie charts. - HH +2010-01-03 + Added rcParams['axes.color_cycle'] - EF -2012-05-22 Collections now have a setting "offset_position" to select whether - the offsets are given in "screen" coordinates (default, - following the old behavior) or "data" coordinates. This is currently - used internally to improve the performance of hexbin. +2010-01-03 + Added Pierre's qt4 formlayout editor and toolbar button - JDH - As a result, the "draw_path_collection" backend methods have grown - a new argument "offset_position". - MGD +2009-12-31 + Add support for using math text as marker symbols (Thanks to tcb) - MGD + +2009-12-31 + Commit a workaround for a regression in PyQt4-4.6.{0,1} - DSD -2012-05-04 Add a new argument to pie charts - startingangle - that - allows one to specify the angle offset for the first wedge - of the chart. - EP +2009-12-22 + Fix cmap data for gist_earth_r, etc. -JJL -2012-05-03 symlog scale now obeys the logarithmic base. Previously, it was - completely ignored and always treated as base e. - MGD +2009-12-20 + spines: put spines in data coordinates, add set_bounds() call. -ADS -2012-05-03 Allow linscalex/y keyword to symlog scale that allows the size of - the linear portion relative to the logarithmic portion to be - adjusted. - MGD +2009-12-18 + Don't limit notch size in boxplot to q1-q3 range, as this is effectively + making the data look better than it is. - ADS -2012-04-14 Added new plot style: stackplot. This new feature supports stacked - area plots. - Damon McDougall +2009-12-18 + mlab.prctile handles even-length data, such that the median is the mean of + the two middle values. - ADS -2012-04-06 When path clipping changes a LINETO to a MOVETO, it also - changes any CLOSEPOLY command to a LINETO to the initial - point. This fixes a problem with pdf and svg where the - CLOSEPOLY would then draw a line to the latest MOVETO - position instead of the intended initial position. - JKS +2009-12-15 + Add raw-image (unsampled) support for the ps backend. - JJL -2012-03-27 Add support to ImageGrid for placing colorbars only at - one edge of each column/row. - RMM +2009-12-14 + Add patch_artist kwarg to boxplot, but keep old default. Convert + boxplot_demo2.py to use the new patch_artist. - ADS -2012-03-07 Refactor movie writing into useful classes that make use - of pipes to write image data to ffmpeg or mencoder. Also - improve settings for these and the ability to pass custom - options. - RMM +2009-12-06 + axes_grid: reimplemented AxisArtist with FloatingAxes support. Added new + examples. - JJL -2012-02-29 errorevery keyword added to errorbar to enable errorbar - subsampling. fixes issue #600. +2009-12-01 + Applied Laurent Dufrechou's patch to improve blitting with the qt4 backend + - DSD -2012-02-28 Added plot_trisurf to the mplot3d toolkit. This supports plotting - three dimensional surfaces on an irregular grid. - Damon McDougall +2009-11-13 + The pdf backend now allows changing the contents of a pdf file's + information dictionary via PdfPages.infodict. - JKS -2012-01-23 The radius labels in polar plots no longer use a fixed - padding, but use a different alignment depending on the - quadrant they are in. This fixes numerical problems when - (rmax - rmin) gets too small. - MGD +2009-11-12 + font_manager.py should no longer cause EINTR on Python 2.6 (but will on the + 2.5 version of subprocess). Also the fc-list command in that file was fixed + so now it should actually find the list of fontconfig fonts. - JKS -2012-01-08 Add axes.streamplot to plot streamlines of a velocity field. - Adapted from Tom Flannaghan streamplot implementation. -TSY +2009-11-10 + Single images, and all images in renderers with option_image_nocomposite + (i.e. agg, macosx and the svg backend when rcParams['svg.image_noscale'] is + True), are now drawn respecting the zorder relative to other artists. (Note + that there may now be inconsistencies across backends when more than one + image is drawn at varying zorders, but this change introduces correct + behavior for the backends in which it's easy to do so.) -2011-12-29 ps and pdf markers are now stroked only if the line width - is nonzero for consistency with agg, fixes issue #621. - JKS +2009-10-21 + Make AutoDateLocator more configurable by adding options to control the + maximum and minimum number of ticks. Also add control of the intervals to + be used for ticking. This does not change behavior but opens previously + hard-coded behavior to runtime modification`. - RMM -2011-12-27 Work around an EINTR bug in some versions of subprocess. - JKS +2009-10-19 + Add "path_effects" support for Text and Patch. See + examples/pylab_examples/patheffect_demo.py -JJL -2011-10-25 added support for \operatorname to mathtext, - including the ability to insert spaces, such as - $\operatorname{arg\,max}$ - PI +2009-10-19 + Add "use_clabeltext" option to clabel. If True, clabels will be created + with ClabelText class, which recalculates rotation angle of the label + during the drawing time. -JJL -2011-08-18 Change api of Axes.get_tightbbox and add an optional - keyword parameter *call_axes_locator*. - JJL +2009-10-16 + Make AutoDateFormatter actually use any specified timezone setting.This was + only working correctly when no timezone was specified. - RMM -2011-07-29 A new rcParam "axes.formatter.use_locale" was added, that, - when True, will use the current locale to format tick - labels. This means that, for example, in the fr_FR locale, - ',' will be used as a decimal separator. - MGD +2009-09-27 + Beginnings of a capability to test the pdf backend. - JKS -2011-07-15 The set of markers available in the plot() and scatter() - commands has been unified. In general, this gives more - options to both than were previously available, however, - there is one backward-incompatible change to the markers in - scatter: - - "d" used to mean "diamond", it now means "narrow - diamond". "D" can be used for a "diamond". - - -MGD - -2011-07-13 Fix numerical problems in symlog scale, particularly when - linthresh <= 1.0. Symlog plots may look different if one - was depending on the old broken behavior - MGD - -2011-07-10 Fixed argument handling error in tripcolor/triplot/tricontour, - issue #203. - IMT - -2011-07-08 Many functions added to mplot3d.axes3d to bring Axes3D - objects more feature-parity with regular Axes objects. - Significant revisions to the documentation as well. - - BVR - -2011-07-07 Added compatibility with IPython strategy for picking - a version of Qt4 support, and an rcParam for making - the choice explicitly: backend.qt4. - EF - -2011-07-07 Modified AutoMinorLocator to improve automatic choice of - the number of minor intervals per major interval, and - to allow one to specify this number via a kwarg. - EF - -2011-06-28 3D versions of scatter, plot, plot_wireframe, plot_surface, - bar3d, and some other functions now support empty inputs. - BVR - -2011-06-22 Add set_theta_offset, set_theta_direction and - set_theta_zero_location to polar axes to control the - location of 0 and directionality of theta. - MGD - -2011-06-22 Add axes.labelweight parameter to set font weight to axis - labels - MGD. - -2011-06-20 Add pause function to pyplot. - EF - -2011-06-16 Added *bottom* keyword parameter for the stem command. - Also, implemented a legend handler for the stem plot. - - JJL - -2011-06-16 Added legend.frameon rcParams. - Mike Kaufman - -2011-05-31 Made backend_qt4 compatible with PySide . - Gerald Storer - -2011-04-17 Disable keyboard auto-repeat in qt4 backend by ignoring - key events resulting from auto-repeat. This makes - constrained zoom/pan work. - EF - -2011-04-14 interpolation="nearest" always interpolate images. A new - mode "none" is introduced for no interpolation - JJL - -2011-04-03 Fixed broken pick interface to AsteriskCollection objects - used by scatter. - EF - -2011-04-01 The plot directive Sphinx extension now supports all of the - features in the Numpy fork of that extension. These - include doctest formatting, an 'include-source' option, and - a number of new configuration options. - MGD - -2011-03-29 Wrapped ViewVCCachedServer definition in a factory function. - This class now inherits from urllib2.HTTPSHandler in order - to fetch data from github, but HTTPSHandler is not defined - if python was built without SSL support. - DSD - -2011-03-10 Update pytz version to 2011c, thanks to Simon Cross. - JKS - -2011-03-06 Add standalone tests.py test runner script. - JKS - -2011-03-06 Set edgecolor to 'face' for scatter asterisk-type - symbols; this fixes a bug in which these symbols were - not responding to the c kwarg. The symbols have no - face area, so only the edgecolor is visible. - EF - -2011-02-27 Support libpng version 1.5.x; suggestion by Michael - Albert. Changed installation specification to a - minimum of libpng version 1.2. - EF - -2011-02-20 clabel accepts a callable as an fmt kwarg; modified - patch by Daniel Hyams. - EF - -2011-02-18 scatter([], []) is now valid. Also fixed issues - with empty collections - BVR - -2011-02-07 Quick workaround for dviread bug #3175113 - JKS - -2011-02-05 Add cbook memory monitoring for Windows, using - tasklist. - EF - -2011-02-05 Speed up Normalize and LogNorm by using in-place - operations and by using float32 for float32 inputs - and for ints of 2 bytes or shorter; based on - patch by Christoph Gohlke. - EF - -2011-02-04 Changed imshow to use rgba as uint8 from start to - finish, instead of going through an intermediate - step as double precision; thanks to Christoph Gohlke. - EF - -2011-01-13 Added zdir and offset arguments to contourf3d to - bring contourf3d in feature parity with contour3d. - BVR - -2011-01-04 Tag 1.0.1 for release at r8896 - -2011-01-03 Added display of ticker offset to 3d plots. - BVR - -2011-01-03 Turn off tick labeling on interior subplots for - pyplots.subplots when sharex/sharey is True. - JDH - -2010-12-29 Implement axes_divider.HBox and VBox. -JJL - - -2010-11-22 Fixed error with Hammer projection. - BVR - -2010-11-12 Fixed the placement and angle of axis labels in 3D plots. - BVR - -2010-11-07 New rc parameters examples.download and examples.directory - allow bypassing the download mechanism in get_sample_data. - - JKS - -2010-10-04 Fix JPEG saving bug: only accept the kwargs documented - by PIL for JPEG files. - JKS - -2010-09-15 Remove unused _wxagg extension and numerix.h. - EF - -2010-08-25 Add new framework for doing animations with examples.- RM - -2010-08-21 Remove unused and inappropriate methods from Tick classes: - set_view_interval, get_minpos, and get_data_interval are - properly found in the Axis class and don't need to be - duplicated in XTick and YTick. - EF - -2010-08-21 Change Axis.set_view_interval() so that when updating an - existing interval, it respects the orientation of that - interval, and can enlarge but not reduce the interval. - This fixes a bug in which Axis.set_ticks would - change the view limits of an inverted axis. Whether - set_ticks should be affecting the viewLim at all remains - an open question. - EF - -2010-08-16 Handle NaN's correctly in path analysis routines. Fixes a - bug where the best location for a legend was not calculated - correctly when the line contains NaNs. - MGD - -2010-08-14 Fix bug in patch alpha handling, and in bar color kwarg - EF - -2010-08-12 Removed all traces of numerix module after 17 months of - deprecation warnings. - EF - -2010-08-05 Added keyword arguments 'thetaunits' and 'runits' for polar - plots. Fixed PolarAxes so that when it set default - Formatters, it marked them as such. Fixed semilogx and - semilogy to no longer blindly reset the ticker information - on the non-log axis. Axes.arrow can now accept unitized - data. - JRE - -2010-08-03 Add support for MPLSETUPCFG variable for custom setup.cfg - filename. Used by sage buildbot to build an mpl w/ no gui - support - JDH - -2010-08-01 Create directory specified by MPLCONFIGDIR if it does - not exist. - ADS - -2010-07-20 Return Qt4's default cursor when leaving the canvas - DSD - -2010-07-06 Tagging for mpl 1.0 at r8502 - - -2010-07-05 Added Ben Root's patch to put 3D plots in arbitrary axes, - allowing you to mix 3d and 2d in different axes/subplots or - to have multiple 3D plots in one figure. See - examples/mplot3d/subplot3d_demo.py - JDH - -2010-07-05 Preferred kwarg names in set_xlim are now 'left' and - 'right'; in set_ylim, 'bottom' and 'top'; original - kwargs are still accepted without complaint. - EF - -2010-07-05 TkAgg and FltkAgg backends are now consistent with other - interactive backends: when used in scripts from the - command line (not from ipython -pylab), show blocks, - and can be called more than once. - EF - -2010-07-02 Modified CXX/WrapPython.h to fix "swab bug" on solaris so - mpl can compile on Solaris with CXX6 in the trunk. Closes - tracker bug 3022815 - JDH - -2010-06-30 Added autoscale convenience method and corresponding - pyplot function for simplified control of autoscaling; - and changed axis, set_xlim, and set_ylim so that by - default, they turn off the autoscaling on the relevant - axis or axes. Therefore one can call set_xlim before - plotting a line, for example, and the limits will be - retained. - EF - -2010-06-20 Added Axes.tick_params and corresponding pyplot function - to control tick and tick label appearance after an Axes - has been created. - EF - -2010-06-09 Allow Axes.grid to control minor gridlines; allow - Axes.grid and Axis.grid to control major and minor - gridlines in the same method call. - EF - -2010-06-06 Change the way we do split/dividend adjustments in - finance.py to handle dividends and fix the zero division bug reported - in sf bug 2949906 and 2123566. Note that volume is not adjusted - because the Yahoo CSV does not distinguish between share - split and dividend adjustments making it near impossible to - get volume adjustment right (unless we want to guess based - on the size of the adjustment or scrape the html tables, - which we don't) - JDH - -2010-06-06 Updated dateutil to 1.5 and pytz to 2010h. - -2010-06-02 Add error_kw kwarg to Axes.bar(). - EF - -2010-06-01 Fix pcolormesh() and QuadMesh to pass on kwargs as - appropriate. - RM - -2010-05-18 Merge mpl_toolkits.gridspec into the main tree. - JJL - -2010-05-04 Improve backend_qt4 so it displays figures with the - correct size - DSD - -2010-04-20 Added generic support for connecting to a timer for events. This - adds TimerBase, TimerGTK, TimerQT, TimerWx, and TimerTk to - the backends and a new_timer() method to each backend's - canvas to allow ease of creating a new timer. - RM - -2010-04-20 Added margins() Axes method and pyplot function. - EF - -2010-04-18 update the axes_grid documentation. -JJL - -2010-04-18 Control MaxNLocator parameters after instantiation, - and via Axes.locator_params method, with corresponding - pyplot function. -EF - -2010-04-18 Control ScalarFormatter offsets directly and via the - Axes.ticklabel_format() method, and add that to pyplot. -EF - -2010-04-16 Add a close_event to the backends. -RM - -2010-04-06 modify axes_grid examples to use axes_grid1 and axisartist. -JJL - -2010-04-06 rebase axes_grid using axes_grid1 and axisartist modules. -JJL - -2010-04-06 axes_grid toolkit is split into two separate modules, - axes_grid1 and axisartist. -JJL - -2010-04-05 Speed up import: import pytz only if and when it is - needed. It is not needed if the rc timezone is UTC. - EF - -2010-04-03 Added color kwarg to Axes.hist(), based on work by - Jeff Klukas. - EF - -2010-03-24 refactor colorbar code so that no cla() is necessary when - mappable is changed. -JJL - -2010-03-22 fix incorrect rubber band during the zoom mode when mouse - leaves the axes. -JJL - -2010-03-21 x/y key during the zoom mode only changes the x/y limits. -JJL - -2010-03-20 Added pyplot.sca() function suggested by JJL. - EF - -2010-03-20 Added conditional support for new Tooltip API in gtk backend. - EF - -2010-03-20 Changed plt.fig_subplot() to plt.subplots() after discussion on - list, and changed its API to return axes as a numpy object array - (with control of dimensions via squeeze keyword). FP. - -2010-03-13 Manually brought in commits from branch:: - - ------------------------------------------------------------------------ - r8191 | leejjoon | 2010-03-13 17:27:57 -0500 (Sat, 13 Mar 2010) | 1 line - - fix the bug that handles for scatter are incorrectly set when dpi!=72. - Thanks to Ray Speth for the bug report. - - -2010-03-03 Manually brought in commits from branch via diff/patch (svnmerge is broken):: - - ------------------------------------------------------------------------ - r8175 | leejjoon | 2010-03-03 10:03:30 -0800 (Wed, 03 Mar 2010) | 1 line - - fix arguments of allow_rasterization.draw_wrapper - ------------------------------------------------------------------------ - r8174 | jdh2358 | 2010-03-03 09:15:58 -0800 (Wed, 03 Mar 2010) | 1 line - - added support for favicon in docs build - ------------------------------------------------------------------------ - r8173 | jdh2358 | 2010-03-03 08:56:16 -0800 (Wed, 03 Mar 2010) | 1 line - - applied Mattias get_bounds patch - ------------------------------------------------------------------------ - r8172 | jdh2358 | 2010-03-03 08:31:42 -0800 (Wed, 03 Mar 2010) | 1 line - - fix svnmerge download instructions - ------------------------------------------------------------------------ - r8171 | jdh2358 | 2010-03-03 07:47:48 -0800 (Wed, 03 Mar 2010) | 1 line - - - -2010-02-25 add annotation_demo3.py that demonstrates new functionality. -JJL - -2010-02-25 refactor Annotation to support arbitrary Transform as xycoords - or textcoords. Also, if a tuple of two coordinates is provided, - they are interpreted as coordinates for each x and y position. - -JJL - -2010-02-24 Added pyplot.fig_subplot(), to create a figure and a group of - subplots in a single call. This offers an easier pattern than - manually making figures and calling add_subplot() multiple times. FP - -2010-02-17 Added Gokhan's and Mattias' customizable keybindings patch - for the toolbar. You can now set the keymap.* properties - in the matplotlibrc file. Newbindings were added for - toggling log scaling on the x-axis. JDH - -2010-02-16 Committed TJ's filled marker patch for - left|right|bottom|top|full filled markers. See - examples/pylab_examples/filledmarker_demo.py. JDH - -2010-02-11 Added 'bootstrap' option to boxplot. This allows bootstrap - estimates of median confidence intervals. Based on an - initial patch by Paul Hobson. - ADS - -2010-02-06 Added setup.cfg "basedirlist" option to override setting - in setupext.py "basedir" dictionary; added "gnu0" - platform requested by Benjamin Drung. - EF - -2010-02-06 Added 'xy' scaling option to EllipseCollection. - EF - -2010-02-03 Made plot_directive use a custom PlotWarning category, so that - warnings can be turned into fatal errors easily if desired. - FP - -2010-01-29 Added draggable method to Legend to allow mouse drag - placement. Thanks Adam Fraser. JDH - -2010-01-25 Fixed a bug reported by Olle Engdegard, when using - histograms with stepfilled and log=True - MM - -2010-01-16 Upgraded CXX to 6.1.1 - JDH - -2009-01-16 Don't create minor ticks on top of existing major - ticks. Patch by Neil Crighton. -ADS - -2009-01-16 Ensure three minor ticks always drawn (SF# 2924245). Patch - by Neil Crighton. -ADS - -2010-01-16 Applied patch by Ian Thomas to fix two contouring - problems: now contourf handles interior masked regions, - and the boundaries of line and filled contours coincide. - EF - -2009-01-11 The color of legend patch follows the rc parameters - axes.facecolor and axes.edgecolor. -JJL - -2009-01-11 adjustable of Axes can be "box-forced" which allow - sharing axes. -JJL - -2009-01-11 Add add_click and pop_click methods in - BlockingContourLabeler. -JJL - - -2010-01-03 Added rcParams['axes.color_cycle'] - EF - -2010-01-03 Added Pierre's qt4 formlayout editor and toolbar button - JDH - -2009-12-31 Add support for using math text as marker symbols (Thanks to tcb) - - MGD - -2009-12-31 Commit a workaround for a regression in PyQt4-4.6.{0,1} - DSD - -2009-12-22 Fix cmap data for gist_earth_r, etc. -JJL - -2009-12-20 spines: put spines in data coordinates, add set_bounds() - call. -ADS - -2009-12-18 Don't limit notch size in boxplot to q1-q3 range, as this - is effectively making the data look better than it is. - ADS - -2009-12-18 mlab.prctile handles even-length data, such that the median - is the mean of the two middle values. - ADS - -2009-12-15 Add raw-image (unsampled) support for the ps backend. - JJL - -2009-12-14 Add patch_artist kwarg to boxplot, but keep old default. - Convert boxplot_demo2.py to use the new patch_artist. - ADS - -2009-12-06 axes_grid: reimplemented AxisArtist with FloatingAxes support. - Added new examples. - JJL - -2009-12-01 Applied Laurent Dufrechou's patch to improve blitting with - the qt4 backend - DSD - -2009-11-13 The pdf backend now allows changing the contents of - a pdf file's information dictionary via PdfPages.infodict. - JKS - -2009-11-12 font_manager.py should no longer cause EINTR on Python 2.6 - (but will on the 2.5 version of subprocess). Also the - fc-list command in that file was fixed so now it should - actually find the list of fontconfig fonts. - JKS - -2009-11-10 Single images, and all images in renderers with - option_image_nocomposite (i.e. agg, macosx and the svg - backend when rcParams['svg.image_noscale'] is True), are - now drawn respecting the zorder relative to other - artists. (Note that there may now be inconsistencies across - backends when more than one image is drawn at varying - zorders, but this change introduces correct behavior for - the backends in which it's easy to do so.) - -2009-10-21 Make AutoDateLocator more configurable by adding options - to control the maximum and minimum number of ticks. Also - add control of the intervals to be used for ticking. This - does not change behavior but opens previously hard-coded - behavior to runtime modification`. - RMM - -2009-10-19 Add "path_effects" support for Text and Patch. See - examples/pylab_examples/patheffect_demo.py -JJL - -2009-10-19 Add "use_clabeltext" option to clabel. If True, clabels - will be created with ClabelText class, which recalculates - rotation angle of the label during the drawing time. -JJL - -2009-10-16 Make AutoDateFormatter actually use any specified - timezone setting.This was only working correctly - when no timezone was specified. - RMM - -2009-09-27 Beginnings of a capability to test the pdf backend. - JKS - -2009-09-27 Add a savefig.extension rcparam to control the default - filename extension used by savefig. - JKS +2009-09-27 + Add a savefig.extension rcparam to control the default filename extension + used by savefig. - JKS =============================================== -2009-09-21 Tagged for release 0.99.1 - -2009-09-20 Fix usetex spacing errors in pdf backend. - JKS - -2009-09-20 Add Sphinx extension to highlight IPython console sessions, - originally authored (I think) by Michael Droetboom. - FP - -2009-09-20 Fix off-by-one error in dviread.Tfm, and additionally protect - against exceptions in case a dvi font is missing some metrics. - JKS +2009-09-21 + Tagged for release 0.99.1 -2009-09-15 Implement draw_text and draw_tex method of backend_base using - the textpath module. Implement draw_tex method of the svg - backend. - JJL +2009-09-20 + Fix usetex spacing errors in pdf backend. - JKS -2009-09-15 Don't fail on AFM files containing floating-point bounding boxes - JKS +2009-09-20 + Add Sphinx extension to highlight IPython console sessions, originally + authored (I think) by Michael Droetboom. - FP -2009-09-13 AxesGrid : add modified version of colorbar. Add colorbar - location howto. - JJL +2009-09-20 + Fix off-by-one error in dviread.Tfm, and additionally protect against + exceptions in case a dvi font is missing some metrics. - JKS -2009-09-07 AxesGrid : implemented axisline style. - Added a demo examples/axes_grid/demo_axisline_style.py- JJL +2009-09-15 + Implement draw_text and draw_tex method of backend_base using the textpath + module. Implement draw_tex method of the svg backend. - JJL -2009-09-04 Make the textpath class as a separate module - (textpath.py). Add support for mathtext and tex.- JJL +2009-09-15 + Don't fail on AFM files containing floating-point bounding boxes - JKS -2009-09-01 Added support for Gouraud interpolated triangles. - pcolormesh now accepts shading='gouraud' as an option. - MGD +2009-09-13 + AxesGrid : add modified version of colorbar. Add colorbar location howto. - + JJL -2009-08-29 Added matplotlib.testing package, which contains a Nose - plugin and a decorator that lets tests be marked as - KnownFailures - ADS +2009-09-07 + AxesGrid : implemented axisline style. Added a demo + examples/axes_grid/demo_axisline_style.py- JJL -2009-08-20 Added scaled dict to AutoDateFormatter for customized - scales - JDH +2009-09-04 + Make the textpath class as a separate module (textpath.py). Add support for + mathtext and tex.- JJL -2009-08-15 Pyplot interface: the current image is now tracked at the - figure and axes level, addressing tracker item 1656374. - EF +2009-09-01 + Added support for Gouraud interpolated triangles. pcolormesh now accepts + shading='gouraud' as an option. - MGD -2009-08-15 Docstrings are now manipulated with decorators defined - in a new module, docstring.py, thanks to Jason Coombs. - EF +2009-08-29 + Added matplotlib.testing package, which contains a Nose plugin and a + decorator that lets tests be marked as KnownFailures - ADS -2009-08-14 Add support for image filtering for agg back end. See the example - demo_agg_filter.py. -JJL +2009-08-20 + Added scaled dict to AutoDateFormatter for customized scales - JDH -2009-08-09 AnnotationBbox added. Similar to Annotation, but works with - OffsetBox instead of Text. See the example - demo_annotation_box.py. -JJL +2009-08-15 + Pyplot interface: the current image is now tracked at the figure and axes + level, addressing tracker item 1656374. - EF -2009-08-07 BboxImage implemented. Two examples, demo_bboximage.py and - demo_ribbon_box.py added. - JJL +2009-08-15 + Docstrings are now manipulated with decorators defined in a new module, + docstring.py, thanks to Jason Coombs. - EF -2009-08-07 In an effort to simplify the backend API, all clipping rectangles - and paths are now passed in using GraphicsContext objects, even - on collections and images. Therefore: +2009-08-14 + Add support for image filtering for agg back end. See the example + demo_agg_filter.py. -JJL - draw_path_collection(self, master_transform, cliprect, clippath, - clippath_trans, paths, all_transforms, offsets, - offsetTrans, facecolors, edgecolors, linewidths, - linestyles, antialiaseds, urls) +2009-08-09 + AnnotationBbox added. Similar to Annotation, but works with OffsetBox + instead of Text. See the example demo_annotation_box.py. -JJL - becomes: +2009-08-07 + BboxImage implemented. Two examples, demo_bboximage.py and + demo_ribbon_box.py added. - JJL - draw_path_collection(self, gc, master_transform, paths, all_transforms, - offsets, offsetTrans, facecolors, edgecolors, - linewidths, linestyles, antialiaseds, urls) +2009-08-07 + In an effort to simplify the backend API, all clipping rectangles and paths + are now passed in using GraphicsContext objects, even on collections and + images. Therefore:: + draw_path_collection(self, master_transform, cliprect, clippath, + clippath_trans, paths, all_transforms, offsets, + offsetTrans, facecolors, edgecolors, linewidths, + linestyles, antialiaseds, urls) + becomes:: - draw_quad_mesh(self, master_transform, cliprect, clippath, - clippath_trans, meshWidth, meshHeight, coordinates, - offsets, offsetTrans, facecolors, antialiased, - showedges) + draw_path_collection(self, gc, master_transform, paths, all_transforms, + offsets, offsetTrans, facecolors, edgecolors, + linewidths, linestyles, antialiaseds, urls) - becomes: + :: - draw_quad_mesh(self, gc, master_transform, meshWidth, meshHeight, - coordinates, offsets, offsetTrans, facecolors, - antialiased, showedges) + draw_quad_mesh(self, master_transform, cliprect, clippath, + clippath_trans, meshWidth, meshHeight, coordinates, + offsets, offsetTrans, facecolors, antialiased, + showedges) + becomes:: + draw_quad_mesh(self, gc, master_transform, meshWidth, meshHeight, + coordinates, offsets, offsetTrans, facecolors, + antialiased, showedges) - draw_image(self, x, y, im, bbox, clippath=None, clippath_trans=None) + :: - becomes: + draw_image(self, x, y, im, bbox, clippath=None, clippath_trans=None) - draw_image(self, gc, x, y, im) + becomes:: - - MGD + draw_image(self, gc, x, y, im) -2009-08-06 Tagging the 0.99.0 release at svn r7397 - JDH + - MGD - * fixed an alpha colormapping bug posted on sf 2832575 +2009-08-06 + Tagging the 0.99.0 release at svn r7397 - JDH - * fix typo in axes_divider.py. use nanmin, nanmax in angle_helper.py - (patch by Christoph Gohlke) + * fixed an alpha colormapping bug posted on sf 2832575 - * remove dup gui event in enter/leave events in gtk + * fix typo in axes_divider.py. use nanmin, nanmax in angle_helper.py (patch + by Christoph Gohlke) - * lots of fixes for os x binaries (Thanks Russell Owen) + * remove dup gui event in enter/leave events in gtk - * attach gtk events to mpl events -- fixes sf bug 2816580 + * lots of fixes for os x binaries (Thanks Russell Owen) - * applied sf patch 2815064 (middle button events for wx) and - patch 2818092 (resize events for wx) + * attach gtk events to mpl events -- fixes sf bug 2816580 - * fixed boilerplate.py so it doesn't break the ReST docs. + * applied sf patch 2815064 (middle button events for wx) and patch 2818092 + (resize events for wx) - * removed a couple of cases of mlab.load + * fixed boilerplate.py so it doesn't break the ReST docs. - * fixed rec2csv win32 file handle bug from sf patch 2831018 + * removed a couple of cases of mlab.load - * added two examples from Josh Hemann: examples/pylab_examples/barchart_demo2.py - and examples/pylab_examples/boxplot_demo2.py + * fixed rec2csv win32 file handle bug from sf patch 2831018 - * handled sf bugs 2831556 and 2830525; better bar error messages and - backend driver configs + * added two examples from Josh Hemann: + examples/pylab_examples/barchart_demo2.py and + examples/pylab_examples/boxplot_demo2.py - * added miktex win32 patch from sf patch 2820194 + * handled sf bugs 2831556 and 2830525; better bar error messages and + backend driver configs - * apply sf patches 2830233 and 2823885 for osx setup and 64 bit; thanks Michiel + * added miktex win32 patch from sf patch 2820194 -2009-08-04 Made cbook.get_sample_data make use of the ETag and Last-Modified - headers of mod_dav_svn. - JKS + * apply sf patches 2830233 and 2823885 for osx setup and 64 bit; thanks + Michiel -2009-08-03 Add PathCollection; modify contourf to use complex - paths instead of simple paths with cuts. - EF +2009-08-04 + Made cbook.get_sample_data make use of the ETag and Last-Modified headers + of mod_dav_svn. - JKS +2009-08-03 + Add PathCollection; modify contourf to use complex paths instead of simple + paths with cuts. - EF -2009-08-03 Fixed boilerplate.py so it doesn't break the ReST docs. - JKS +2009-08-03 + Fixed boilerplate.py so it doesn't break the ReST docs. - JKS -2009-08-03 pylab no longer provides a load and save function. These - are available in matplotlib.mlab, or you can use - numpy.loadtxt and numpy.savetxt for text files, or np.save - and np.load for binary numpy arrays. - JDH +2009-08-03 + pylab no longer provides a load and save function. These are available in + matplotlib.mlab, or you can use numpy.loadtxt and numpy.savetxt for text + files, or np.save and np.load for binary numpy arrays. - JDH -2009-07-31 Added cbook.get_sample_data for urllib enabled fetching and - caching of data needed for examples. See - examples/misc/sample_data_demo.py - JDH +2009-07-31 + Added cbook.get_sample_data for urllib enabled fetching and caching of data + needed for examples. See examples/misc/sample_data_demo.py - JDH -2009-07-31 Tagging 0.99.0.rc1 at 7314 - MGD +2009-07-31 + Tagging 0.99.0.rc1 at 7314 - MGD -2009-07-30 Add set_cmap and register_cmap, and improve get_cmap, - to provide convenient handling of user-generated - colormaps. Reorganized _cm and cm modules. - EF +2009-07-30 + Add set_cmap and register_cmap, and improve get_cmap, to provide convenient + handling of user-generated colormaps. Reorganized _cm and cm modules. - EF -2009-07-28 Quiver speed improved, thanks to tip by Ray Speth. -EF +2009-07-28 + Quiver speed improved, thanks to tip by Ray Speth. -EF -2009-07-27 Simplify argument handling code for plot method. -EF +2009-07-27 + Simplify argument handling code for plot method. -EF -2009-07-25 Allow "plot(1, 2, 'r*')" to work. - EF +2009-07-25 + Allow "plot(1, 2, 'r*')" to work. - EF -2009-07-22 Added an 'interp' keyword to griddata so the faster linear - interpolation method can be chosen. Default is 'nn', so - default behavior (using natural neighbor method) is unchanged (JSW) +2009-07-22 + Added an 'interp' keyword to griddata so the faster linear interpolation + method can be chosen. Default is 'nn', so default behavior (using natural + neighbor method) is unchanged (JSW) -2009-07-22 Improved boilerplate.py so that it generates the correct - signatures for pyplot functions. - JKS +2009-07-22 + Improved boilerplate.py so that it generates the correct signatures for + pyplot functions. - JKS -2009-07-19 Fixed the docstring of Axes.step to reflect the correct - meaning of the kwargs "pre" and "post" - See SF bug - \https://sourceforge.net/tracker/index.php?func=detail&aid=2823304&group_id=80706&atid=560720 - - JDH +2009-07-19 + Fixed the docstring of Axes.step to reflect the correct meaning of the + kwargs "pre" and "post" - See SF bug + \https://sourceforge.net/tracker/index.php?func=detail&aid=2823304&group_id=80706&atid=560720 + - JDH -2009-07-18 Fix support for hatches without color fills to pdf and svg - backends. Add an example of that to hatch_demo.py. - JKS +2009-07-18 + Fix support for hatches without color fills to pdf and svg backends. Add an + example of that to hatch_demo.py. - JKS -2009-07-17 Removed fossils from swig version of agg backend. - EF +2009-07-17 + Removed fossils from swig version of agg backend. - EF -2009-07-14 initial submission of the annotation guide. -JJL +2009-07-14 + initial submission of the annotation guide. -JJL -2009-07-14 axes_grid : minor improvements in anchored_artists and - inset_locator. -JJL +2009-07-14 + axes_grid : minor improvements in anchored_artists and inset_locator. -JJL -2009-07-14 Fix a few bugs in ConnectionStyle algorithms. Add - ConnectionPatch class. -JJL +2009-07-14 + Fix a few bugs in ConnectionStyle algorithms. Add ConnectionPatch class. + -JJL -2009-07-11 Added a fillstyle Line2D property for half filled markers - -- see examples/pylab_examples/fillstyle_demo.py JDH +2009-07-11 + Added a fillstyle Line2D property for half filled markers -- see + examples/pylab_examples/fillstyle_demo.py JDH -2009-07-08 Attempt to improve performance of qt4 backend, do not call - qApp.processEvents while processing an event. Thanks Ole - Streicher for tracking this down - DSD +2009-07-08 + Attempt to improve performance of qt4 backend, do not call + qApp.processEvents while processing an event. Thanks Ole Streicher for + tracking this down - DSD -2009-06-24 Add withheader option to mlab.rec2csv and changed - use_mrecords default to False in mlab.csv2rec since this is - partially broken - JDH +2009-06-24 + Add withheader option to mlab.rec2csv and changed use_mrecords default to + False in mlab.csv2rec since this is partially broken - JDH -2009-06-24 backend_agg.draw_marker quantizes the main path (as in the - draw_path). - JJL +2009-06-24 + backend_agg.draw_marker quantizes the main path (as in the draw_path). - + JJL -2009-06-24 axes_grid: floating axis support added. - JJL +2009-06-24 + axes_grid: floating axis support added. - JJL -2009-06-14 Add new command line options to backend_driver.py to support - running only some directories of tests - JKS +2009-06-14 + Add new command line options to backend_driver.py to support running only + some directories of tests - JKS -2009-06-13 partial cleanup of mlab and its importation in pylab - EF +2009-06-13 + partial cleanup of mlab and its importation in pylab - EF -2009-06-13 Introduce a rotation_mode property for the Text artist. See - examples/pylab_examples/demo_text_rotation_mode.py -JJL +2009-06-13 + Introduce a rotation_mode property for the Text artist. See + examples/pylab_examples/demo_text_rotation_mode.py -JJL -2009-06-07 add support for bz2 files per sf support request 2794556 - - JDH +2009-06-07 + add support for bz2 files per sf support request 2794556 - JDH -2009-06-06 added a properties method to the artist and inspector to - return a dict mapping property name -> value; see sf - feature request 2792183 - JDH +2009-06-06 + added a properties method to the artist and inspector to return a dict + mapping property name -> value; see sf feature request 2792183 - JDH -2009-06-06 added Neil's auto minor tick patch; sf patch #2789713 - JDH +2009-06-06 + added Neil's auto minor tick patch; sf patch #2789713 - JDH -2009-06-06 do not apply alpha to rgba color conversion if input is - already rgba - JDH +2009-06-06 + do not apply alpha to rgba color conversion if input is already rgba - JDH -2009-06-03 axes_grid : Initial check-in of curvelinear grid support. See - examples/axes_grid/demo_curvelinear_grid.py - JJL +2009-06-03 + axes_grid : Initial check-in of curvelinear grid support. See + examples/axes_grid/demo_curvelinear_grid.py - JJL -2009-06-01 Add set_color method to Patch - EF +2009-06-01 + Add set_color method to Patch - EF -2009-06-01 Spine is now derived from Patch - ADS +2009-06-01 + Spine is now derived from Patch - ADS -2009-06-01 use cbook.is_string_like() instead of isinstance() for spines - ADS +2009-06-01 + use cbook.is_string_like() instead of isinstance() for spines - ADS -2009-06-01 cla() support for spines - ADS +2009-06-01 + cla() support for spines - ADS -2009-06-01 Removed support for gtk < 2.4. - EF +2009-06-01 + Removed support for gtk < 2.4. - EF -2009-05-29 Improved the animation_blit_qt4 example, which was a mix - of the object-oriented and pylab interfaces. It is now - strictly object-oriented - DSD +2009-05-29 + Improved the animation_blit_qt4 example, which was a mix of the + object-oriented and pylab interfaces. It is now strictly object-oriented - + DSD -2009-05-28 Fix axes_grid toolkit to work with spine patch by ADS. - JJL +2009-05-28 + Fix axes_grid toolkit to work with spine patch by ADS. - JJL -2009-05-28 Applied fbianco's patch to handle scroll wheel events in - the qt4 backend - DSD +2009-05-28 + Applied fbianco's patch to handle scroll wheel events in the qt4 backend - + DSD -2009-05-26 Add support for "axis spines" to have arbitrary location. -ADS +2009-05-26 + Add support for "axis spines" to have arbitrary location. -ADS -2009-05-20 Add an empty matplotlibrc to the tests/ directory so that running - tests will use the default set of rcparams rather than the user's - config. - RMM +2009-05-20 + Add an empty matplotlibrc to the tests/ directory so that running tests + will use the default set of rcparams rather than the user's config. - RMM -2009-05-19 Axis.grid(): allow use of which='major,minor' to have grid - on major and minor ticks. -ADS +2009-05-19 + Axis.grid(): allow use of which='major,minor' to have grid on major and + minor ticks. -ADS -2009-05-18 Make psd(), csd(), and cohere() wrap properly for complex/two-sided - versions, like specgram() (SF #2791686) - RMM +2009-05-18 + Make psd(), csd(), and cohere() wrap properly for complex/two-sided + versions, like specgram() (SF #2791686) - RMM -2009-05-18 Fix the linespacing bug of multiline text (#1239682). See - examples/pylab_examples/multiline.py -JJL +2009-05-18 + Fix the linespacing bug of multiline text (#1239682). See + examples/pylab_examples/multiline.py -JJL -2009-05-18 Add *annotation_clip* attr. for text.Annotation class. - If True, annotation is only drawn when the annotated point is - inside the axes area. -JJL +2009-05-18 + Add *annotation_clip* attr. for text.Annotation class. If True, annotation + is only drawn when the annotated point is inside the axes area. -JJL -2009-05-17 Fix bug(#2749174) that some properties of minor ticks are - not conserved -JJL +2009-05-17 + Fix bug(#2749174) that some properties of minor ticks are not conserved + -JJL -2009-05-17 applied Michiel's sf patch 2790638 to turn off gtk event - loop in setupext for pygtk>=2.15.10 - JDH +2009-05-17 + applied Michiel's sf patch 2790638 to turn off gtk event loop in setupext + for pygtk>=2.15.10 - JDH -2009-05-17 applied Michiel's sf patch 2792742 to speed up Cairo and - macosx collections; speedups can be 20x. Also fixes some - bugs in which gc got into inconsistent state +2009-05-17 + applied Michiel's sf patch 2792742 to speed up Cairo and macosx + collections; speedups can be 20x. Also fixes some bugs in which gc got + into inconsistent state ----------------------- -2008-05-17 Release 0.98.5.3 at r7107 from the branch - JDH +2008-05-17 + Release 0.98.5.3 at r7107 from the branch - JDH -2009-05-13 An optional offset and bbox support in restore_bbox. - Add animation_blit_gtk2.py. -JJL +2009-05-13 + An optional offset and bbox support in restore_bbox. Add + animation_blit_gtk2.py. -JJL -2009-05-13 psfrag in backend_ps now uses baseline-alignment - when preview.sty is used ((default is - bottom-alignment). Also, a small API improvement - in OffsetBox-JJL +2009-05-13 + psfrag in backend_ps now uses baseline-alignment when preview.sty is used + ((default is bottom-alignment). Also, a small API improvement in + OffsetBox-JJL -2009-05-13 When the x-coordinate of a line is monotonically - increasing, it is now automatically clipped at - the stage of generating the transformed path in - the draw method; this greatly speeds up zooming and - panning when one is looking at a short segment of - a long time series, for example. - EF +2009-05-13 + When the x-coordinate of a line is monotonically increasing, it is now + automatically clipped at the stage of generating the transformed path in + the draw method; this greatly speeds up zooming and panning when one is + looking at a short segment of a long time series, for example. - EF -2009-05-11 aspect=1 in log-log plot gives square decades. -JJL +2009-05-11 + aspect=1 in log-log plot gives square decades. -JJL -2009-05-08 clabel takes new kwarg, rightside_up; if False, labels - will not be flipped to keep them rightside-up. This - allows the use of clabel to make streamfunction arrows, - as requested by Evan Mason. - EF +2009-05-08 + clabel takes new kwarg, rightside_up; if False, labels will not be flipped + to keep them rightside-up. This allows the use of clabel to make + streamfunction arrows, as requested by Evan Mason. - EF -2009-05-07 'labelpad' can now be passed when setting x/y labels. This - allows controlling the spacing between the label and its - axis. - RMM +2009-05-07 + 'labelpad' can now be passed when setting x/y labels. This allows + controlling the spacing between the label and its axis. - RMM -2009-05-06 print_ps now uses mixed-mode renderer. Axes.draw rasterize - artists whose zorder smaller than rasterization_zorder. - -JJL +2009-05-06 + print_ps now uses mixed-mode renderer. Axes.draw rasterize artists whose + zorder smaller than rasterization_zorder. -JJL -2009-05-06 Per-artist Rasterization, originally by Eric Bruning. -JJ +2009-05-06 + Per-artist Rasterization, originally by Eric Bruning. -JJ -2009-05-05 Add an example that shows how to make a plot that updates - using data from another process. Thanks to Robert - Cimrman - RMM +2009-05-05 + Add an example that shows how to make a plot that updates using data from + another process. Thanks to Robert Cimrman - RMM -2009-05-05 Add Axes.get_legend_handles_labels method. - JJL +2009-05-05 + Add Axes.get_legend_handles_labels method. - JJL -2009-05-04 Fix bug that Text.Annotation is still drawn while set to - not visible. - JJL +2009-05-04 + Fix bug that Text.Annotation is still drawn while set to not visible. - JJL -2009-05-04 Added TJ's fill_betweenx patch - JDH +2009-05-04 + Added TJ's fill_betweenx patch - JDH -2009-05-02 Added options to plotfile based on question from - Joseph Smidt and patch by Matthias Michler. - EF +2009-05-02 + Added options to plotfile based on question from Joseph Smidt and patch by + Matthias Michler. - EF +2009-05-01 + Changed add_artist and similar Axes methods to return their argument. - EF -2009-05-01 Changed add_artist and similar Axes methods to - return their argument. - EF +2009-04-30 + Incorrect eps bbox for landscape mode fixed - JJL -2009-04-30 Incorrect eps bbox for landscape mode fixed - JJL +2009-04-28 + Fixed incorrect bbox of eps output when usetex=True. - JJL -2009-04-28 Fixed incorrect bbox of eps output when usetex=True. - JJL +2009-04-24 + Changed use of os.open* to instead use subprocess.Popen. os.popen* are + deprecated in 2.6 and are removed in 3.0. - RMM -2009-04-24 Changed use of os.open* to instead use subprocess.Popen. - os.popen* are deprecated in 2.6 and are removed in 3.0. - RMM +2009-04-20 + Worked on axes_grid documentation. Added axes_grid.inset_locator. - JJL -2009-04-20 Worked on axes_grid documentation. Added - axes_grid.inset_locator. - JJL +2009-04-17 + Initial check-in of the axes_grid toolkit. - JJL -2009-04-17 Initial check-in of the axes_grid toolkit. - JJL +2009-04-17 + Added a support for bbox_to_anchor in offsetbox.AnchoredOffsetbox. Improved + a documentation. - JJL -2009-04-17 Added a support for bbox_to_anchor in - offsetbox.AnchoredOffsetbox. Improved a documentation. - - JJL +2009-04-16 + Fixed a offsetbox bug that multiline texts are not correctly aligned. - + JJL -2009-04-16 Fixed a offsetbox bug that multiline texts are not - correctly aligned. - JJL +2009-04-16 + Fixed a bug in mixed mode renderer that images produced by an rasterizing + backend are placed with incorrect size. - JJL -2009-04-16 Fixed a bug in mixed mode renderer that images produced by - an rasterizing backend are placed with incorrect size. - - JJL +2009-04-14 + Added Jonathan Taylor's Reinier Heeres' port of John Porters' mplot3d to + svn trunk. Package in mpl_toolkits.mplot3d and demo is + examples/mplot3d/demo.py. Thanks Reiner -2009-04-14 Added Jonathan Taylor's Reinier Heeres' port of John - Porters' mplot3d to svn trunk. Package in - mpl_toolkits.mplot3d and demo is examples/mplot3d/demo.py. - Thanks Reiner +2009-04-06 + The pdf backend now escapes newlines and linefeeds in strings. Fixes sf + bug #2708559; thanks to Tiago Pereira for the report. -2009-04-06 The pdf backend now escapes newlines and linefeeds in strings. - Fixes sf bug #2708559; thanks to Tiago Pereira for the report. +2009-04-06 + texmanager.make_dvi now raises an error if LaTeX failed to create an output + file. Thanks to Joao Luis Silva for reporting this. - JKS -2009-04-06 texmanager.make_dvi now raises an error if LaTeX failed to - create an output file. Thanks to Joao Luis Silva for reporting - this. - JKS +2009-04-05 + _png.read_png() reads 12 bit PNGs (patch from Tobias Wood) - ADS -2009-04-05 _png.read_png() reads 12 bit PNGs (patch from - Tobias Wood) - ADS +2009-04-04 + Allow log axis scale to clip non-positive values to small positive value; + this is useful for errorbars. - EF -2009-04-04 Allow log axis scale to clip non-positive values to - small positive value; this is useful for errorbars. - EF +2009-03-28 + Make images handle nan in their array argument. A helper, + cbook.safe_masked_invalid() was added. - EF -2009-03-28 Make images handle nan in their array argument. - A helper, cbook.safe_masked_invalid() was added. - EF +2009-03-25 + Make contour and contourf handle nan in their Z argument. - EF -2009-03-25 Make contour and contourf handle nan in their Z argument. - EF +2009-03-20 + Add AuxTransformBox in offsetbox.py to support some transformation. + anchored_text.py example is enhanced and renamed (anchored_artists.py). - + JJL -2009-03-20 Add AuxTransformBox in offsetbox.py to support some transformation. - anchored_text.py example is enhanced and renamed - (anchored_artists.py). - JJL +2009-03-20 + Add "bar" connection style for annotation - JJL -2009-03-20 Add "bar" connection style for annotation - JJL +2009-03-17 + Fix bugs in edge color handling by contourf, found by Jae-Joon Lee. - EF -2009-03-17 Fix bugs in edge color handling by contourf, found - by Jae-Joon Lee. - EF +2009-03-14 + Added 'LightSource' class to colors module for creating shaded relief maps. + shading_example.py added to illustrate usage. - JSW -2009-03-14 Added 'LightSource' class to colors module for - creating shaded relief maps. shading_example.py - added to illustrate usage. - JSW +2009-03-11 + Ensure wx version >= 2.8; thanks to Sandro Tosi and Chris Barker. - EF -2009-03-11 Ensure wx version >= 2.8; thanks to Sandro Tosi and - Chris Barker. - EF +2009-03-10 + Fix join style bug in pdf. - JKS -2009-03-10 Fix join style bug in pdf. - JKS +2009-03-07 + Add pyplot access to figure number list - EF -2009-03-07 Add pyplot access to figure number list - EF +2009-02-28 + hashing of FontProperties accounts current rcParams - JJL -2009-02-28 hashing of FontProperties accounts current rcParams - JJL +2009-02-28 + Prevent double-rendering of shared axis in twinx, twiny - EF -2009-02-28 Prevent double-rendering of shared axis in twinx, twiny - EF +2009-02-26 + Add optional bbox_to_anchor argument for legend class - JJL -2009-02-26 Add optional bbox_to_anchor argument for legend class - JJL +2009-02-26 + Support image clipping in pdf backend. - JKS -2009-02-26 Support image clipping in pdf backend. - JKS +2009-02-25 + Improve tick location subset choice in FixedLocator. - EF -2009-02-25 Improve tick location subset choice in FixedLocator. - EF +2009-02-24 + Deprecate numerix, and strip out all but the numpy part of the code. - EF -2009-02-24 Deprecate numerix, and strip out all but the numpy - part of the code. - EF +2009-02-21 + Improve scatter argument handling; add an early error message, allow inputs + to have more than one dimension. - EF -2009-02-21 Improve scatter argument handling; add an early error - message, allow inputs to have more than one dimension. - EF +2009-02-16 + Move plot_directive.py to the installed source tree. Add support for + inline code content - MGD -2009-02-16 Move plot_directive.py to the installed source tree. Add - support for inline code content - MGD +2009-02-16 + Move mathmpl.py to the installed source tree so it is available to other + projects. - MGD -2009-02-16 Move mathmpl.py to the installed source tree so it is - available to other projects. - MGD +2009-02-14 + Added the legend title support - JJL -2009-02-14 Added the legend title support - JJL +2009-02-10 + Fixed a bug in backend_pdf so it doesn't break when the setting + pdf.use14corefonts=True is used. Added test case in + unit/test_pdf_use14corefonts.py. - NGR -2009-02-10 Fixed a bug in backend_pdf so it doesn't break when the setting - pdf.use14corefonts=True is used. Added test case in - unit/test_pdf_use14corefonts.py. - NGR +2009-02-08 + Added a new imsave function to image.py and exposed it in the pyplot + interface - GR -2009-02-08 Added a new imsave function to image.py and exposed it in - the pyplot interface - GR +2009-02-04 + Some reorgnization of the legend code. anchored_text.py added as an + example. - JJL -2009-02-04 Some reorgnization of the legend code. anchored_text.py - added as an example. - JJL +2009-02-04 + Add extent keyword arg to hexbin - ADS -2009-02-04 Add extent keyword arg to hexbin - ADS +2009-02-04 + Fix bug in mathtext related to \dots and \ldots - MGD -2009-02-04 Fix bug in mathtext related to \dots and \ldots - MGD +2009-02-03 + Change default joinstyle to round - MGD -2009-02-03 Change default joinstyle to round - MGD +2009-02-02 + Reduce number of marker XObjects in pdf output - JKS -2009-02-02 Reduce number of marker XObjects in pdf output - JKS +2009-02-02 + Change default resolution on polar plot to 1 - MGD -2009-02-02 Change default resolution on polar plot to 1 - MGD +2009-02-02 + Avoid malloc errors in ttconv for fonts that don't have e.g., PostName (a + version of Tahoma triggered this) - JKS -2009-02-02 Avoid malloc errors in ttconv for fonts that don't have - e.g., PostName (a version of Tahoma triggered this) - JKS +2009-01-30 + Remove support for pyExcelerator in exceltools -- use xlwt instead - JDH -2009-01-30 Remove support for pyExcelerator in exceltools -- use xlwt - instead - JDH +2009-01-29 + Document 'resolution' kwarg for polar plots. Support it when using + pyplot.polar, not just Figure.add_axes. - MGD -2009-01-29 Document 'resolution' kwarg for polar plots. Support it - when using pyplot.polar, not just Figure.add_axes. - MGD +2009-01-29 + Rework the nan-handling/clipping/quantizing/simplification framework so + each is an independent part of a pipeline. Expose the C++-implementation + of all of this so it can be used from all Python backends. Add rcParam + "path.simplify_threshold" to control the threshold of similarity below + which vertices will be removed. -2009-01-29 Rework the nan-handling/clipping/quantizing/simplification - framework so each is an independent part of a pipeline. - Expose the C++-implementation of all of this so it can be - used from all Python backends. Add rcParam - "path.simplify_threshold" to control the threshold of - similarity below which vertices will be removed. +2009-01-26 + Improved tight bbox option of the savefig. - JJL -2009-01-26 Improved tight bbox option of the savefig. - JJL +2009-01-26 + Make curves and NaNs play nice together - MGD -2009-01-26 Make curves and NaNs play nice together - MGD +2009-01-21 + Changed the defaults of acorr and xcorr to use usevlines=True, maxlags=10 + and normed=True since these are the best defaults -2009-01-21 Changed the defaults of acorr and xcorr to use - usevlines=True, maxlags=10 and normed=True since these are - the best defaults +2009-01-19 + Fix bug in quiver argument handling. - EF -2009-01-19 Fix bug in quiver argument handling. - EF +2009-01-19 + Fix bug in backend_gtk: don't delete nonexistent toolbar. - EF -2009-01-19 Fix bug in backend_gtk: don't delete nonexistent toolbar. - EF +2009-01-16 + Implement bbox_inches option for savefig. If bbox_inches is "tight", try to + determine the tight bounding box. - JJL -2009-01-16 Implement bbox_inches option for savefig. If bbox_inches is - "tight", try to determine the tight bounding box. - JJL +2009-01-16 + Fix bug in is_string_like so it doesn't raise an unnecessary exception. - + EF -2009-01-16 Fix bug in is_string_like so it doesn't raise an - unnecessary exception. - EF +2009-01-16 + Fix an infinite recursion in the unit registry when searching for a + converter for a sequence of strings. Add a corresponding test. - RM -2009-01-16 Fix an infinite recursion in the unit registry when searching - for a converter for a sequence of strings. Add a corresponding - test. - RM +2009-01-16 + Bugfix of C typedef of MPL_Int64 that was failing on Windows XP 64 bit, as + reported by George Goussard on numpy mailing list. - ADS -2009-01-16 Bugfix of C typedef of MPL_Int64 that was failing on - Windows XP 64 bit, as reported by George Goussard on numpy - mailing list. - ADS +2009-01-16 + Added helper function LinearSegmentedColormap.from_list to facilitate + building simple custom colomaps. See + examples/pylab_examples/custom_cmap_fromlist.py - JDH -2009-01-16 Added helper function LinearSegmentedColormap.from_list to - facilitate building simple custom colomaps. See - examples/pylab_examples/custom_cmap_fromlist.py - JDH +2009-01-16 + Applied Michiel's patch for macosx backend to fix rounding bug. Closed sf + bug 2508440 - JSW -2009-01-16 Applied Michiel's patch for macosx backend to fix rounding - bug. Closed sf bug 2508440 - JSW +2009-01-10 + Applied Michiel's hatch patch for macosx backend and draw_idle patch for + qt. Closes sf patched 2497785 and 2468809 - JDH -2009-01-10 Applied Michiel's hatch patch for macosx backend and - draw_idle patch for qt. Closes sf patched 2497785 and - 2468809 - JDH +2009-01-10 + Fix bug in pan/zoom with log coordinates. - EF -2009-01-10 Fix bug in pan/zoom with log coordinates. - EF +2009-01-06 + Fix bug in setting of dashed negative contours. - EF -2009-01-06 Fix bug in setting of dashed negative contours. - EF +2009-01-06 + Be fault tolerant when len(linestyles)>NLev in contour. - MM -2009-01-06 Be fault tolerant when len(linestyles)>NLev in contour. - MM +2009-01-06 + Added marginals kwarg to hexbin to plot marginal densities JDH -2009-01-06 Added marginals kwarg to hexbin to plot marginal densities - JDH +2009-01-06 + Change user-visible multipage pdf object to PdfPages to avoid accidents + with the file-like PdfFile. - JKS -2009-01-06 Change user-visible multipage pdf object to PdfPages to - avoid accidents with the file-like PdfFile. - JKS +2009-01-05 + Fix a bug in pdf usetex: allow using non-embedded fonts. - JKS -2009-01-05 Fix a bug in pdf usetex: allow using non-embedded fonts. - JKS +2009-01-05 + optional use of preview.sty in usetex mode. - JJL -2009-01-05 optional use of preview.sty in usetex mode. - JJL +2009-01-02 + Allow multipage pdf files. - JKS -2009-01-02 Allow multipage pdf files. - JKS +2008-12-31 + Improve pdf usetex by adding support for font effects (slanting and + extending). - JKS -2008-12-31 Improve pdf usetex by adding support for font effects - (slanting and extending). - JKS +2008-12-29 + Fix a bug in pdf usetex support, which occurred if the same Type-1 font was + used with different encodings, e.g., with Minion Pro and MnSymbol. - JKS -2008-12-29 Fix a bug in pdf usetex support, which occurred if the same - Type-1 font was used with different encodings, e.g., with - Minion Pro and MnSymbol. - JKS +2008-12-20 + fix the dpi-dependent offset of Shadow. - JJL -2008-12-20 fix the dpi-dependent offset of Shadow. - JJL +2008-12-20 + fix the hatch bug in the pdf backend. minor update in docs and example - + JJL -2008-12-20 fix the hatch bug in the pdf backend. minor update - in docs and example - JJL +2008-12-19 + Add axes_locator attribute in Axes. Two examples are added. - JJL -2008-12-19 Add axes_locator attribute in Axes. Two examples are added. - - JJL +2008-12-19 + Update Axes.legend documentation. /api/api_changes.rst is also updated to + describe changes in keyword parameters. Issue a warning if old keyword + parameters are used. - JJL -2008-12-19 Update Axes.legend documentation. /api/api_changes.rst is also - updated to describe changes in keyword parameters. - Issue a warning if old keyword parameters are used. - JJL - -2008-12-18 add new arrow style, a line + filled triangles. -JJL +2008-12-18 + add new arrow style, a line + filled triangles. -JJL ---------------- -2008-12-18 Re-Released 0.98.5.2 from v0_98_5_maint at r6679 - Released 0.98.5.2 from v0_98_5_maint at r6667 - -2008-12-18 Removed configobj, experimental traits and doc/mpl_data link - JDH - -2008-12-18 Fix bug where a line with NULL data limits prevents - subsequent data limits from calculating correctly - MGD +2008-12-18 + Re-Released 0.98.5.2 from v0_98_5_maint at r6679 Released 0.98.5.2 from + v0_98_5_maint at r6667 -2008-12-17 Major documentation generator changes - MGD +2008-12-18 + Removed configobj, experimental traits and doc/mpl_data link - JDH -2008-12-17 Applied macosx backend patch with support for path - collections, quadmesh, etc... - JDH +2008-12-18 + Fix bug where a line with NULL data limits prevents subsequent data limits + from calculating correctly - MGD -2008-12-17 fix dpi-dependent behavior of text bbox and arrow in annotate - -JJL +2008-12-17 + Major documentation generator changes - MGD -2008-12-17 Add group id support in artist. Two examples which - demonstrate svg filter are added. -JJL +2008-12-17 + Applied macosx backend patch with support for path collections, quadmesh, + etc... - JDH -2008-12-16 Another attempt to fix dpi-dependent behavior of Legend. -JJL +2008-12-17 + fix dpi-dependent behavior of text bbox and arrow in annotate -JJL -2008-12-16 Fixed dpi-dependent behavior of Legend and fancybox in Text. +2008-12-17 + Add group id support in artist. Two examples which demonstrate svg filter + are added. -JJL -2008-12-16 Added markevery property to Line2D to support subsampling - of markers - JDH -2008-12-15 Removed mpl_data symlink in docs. On platforms that do not - support symlinks, these become copies, and the font files - are large, so the distro becomes unnecessarily bloated. - Keeping the mpl_examples dir because relative links are - harder for the plot directive and the \*.py files are not so - large. - JDH +2008-12-16 + Another attempt to fix dpi-dependent behavior of Legend. -JJL -2008-12-15 Fix \$ in non-math text with usetex off. Document - differences between usetex on/off - MGD +2008-12-16 + Fixed dpi-dependent behavior of Legend and fancybox in Text. -2008-12-15 Fix anti-aliasing when auto-snapping - MGD +2008-12-16 + Added markevery property to Line2D to support subsampling of markers - JDH -2008-12-15 Fix grid lines not moving correctly during pan and zoom - MGD +2008-12-15 + Removed mpl_data symlink in docs. On platforms that do not support + symlinks, these become copies, and the font files are large, so the distro + becomes unnecessarily bloated. Keeping the mpl_examples dir because + relative links are harder for the plot directive and the \*.py files are + not so large. - JDH -2008-12-12 Preparations to eliminate maskedarray rcParams key: its - use will now generate a warning. Similarly, importing - the obsolote numerix.npyma will generate a warning. - EF +2008-12-15 + Fix \$ in non-math text with usetex off. Document differences between + usetex on/off - MGD -2008-12-12 Added support for the numpy.histogram() weights parameter - to the axes hist() method. Docs taken from numpy - MM +2008-12-15 + Fix anti-aliasing when auto-snapping - MGD -2008-12-12 Fixed warning in hist() with numpy 1.2 - MM +2008-12-15 + Fix grid lines not moving correctly during pan and zoom - MGD -2008-12-12 Removed external packages: configobj and enthought.traits - which are only required by the experimental traited config - and are somewhat out of date. If needed, install them - independently, see: +2008-12-12 + Preparations to eliminate maskedarray rcParams key: its use will now + generate a warning. Similarly, importing the obsolote numerix.npyma will + generate a warning. - EF - http://code.enthought.com/pages/traits.html +2008-12-12 + Added support for the numpy.histogram() weights parameter to the axes + hist() method. Docs taken from numpy - MM - and: +2008-12-12 + Fixed warning in hist() with numpy 1.2 - MM - http://www.voidspace.org.uk/python/configobj.html +2008-12-12 + Removed external packages: configobj and enthought.traits which are only + required by the experimental traited config and are somewhat out of date. + If needed, install them independently, see + http://code.enthought.com/pages/traits.html and + http://www.voidspace.org.uk/python/configobj.html -2008-12-12 Added support to assign labels to histograms of multiple - data. - MM +2008-12-12 + Added support to assign labels to histograms of multiple data. - MM ------------------------- -2008-12-11 Released 0.98.5 at svn r6573 +2008-12-11 + Released 0.98.5 at svn r6573 -2008-12-11 Use subprocess.Popen instead of os.popen in dviread - (Windows problem reported by Jorgen Stenarson) - JKS +2008-12-11 + Use subprocess.Popen instead of os.popen in dviread (Windows problem + reported by Jorgen Stenarson) - JKS -2008-12-10 Added Michael's font_manager fix and Jae-Joon's - figure/subplot fix. Bumped version number to 0.98.5 - JDH +2008-12-10 + Added Michael's font_manager fix and Jae-Joon's figure/subplot fix. Bumped + version number to 0.98.5 - JDH ---------------------------- -2008-12-09 Released 0.98.4 at svn r6536 - -2008-12-08 Added mdehoon's native macosx backend from sf patch 2179017 - JDH - -2008-12-08 Removed the prints in the set_*style commands. Return the - list of pprinted strings instead - JDH - -2008-12-08 Some of the changes Michael made to improve the output of - the property tables in the rest docs broke of made - difficult to use some of the interactive doc helpers, e.g., - setp and getp. Having all the rest markup in the ipython - shell also confused the docstrings. I added a new rc param - docstring.hardcopy, to format the docstrings differently for - hard copy and other use. The ArtistInspector could use a - little refactoring now since there is duplication of effort - between the rest out put and the non-rest output - JDH - -2008-12-08 Updated spectral methods (psd, csd, etc.) to scale one-sided - densities by a factor of 2 and, optionally, scale all densities - by the sampling frequency. This gives better MatLab - compatibility. -RM - -2008-12-08 Fixed alignment of ticks in colorbars. -MGD - -2008-12-07 drop the deprecated "new" keyword of np.histogram() for - numpy 1.2 or later. -JJL - -2008-12-06 Fixed a bug in svg backend that new_figure_manager() - ignores keywords arguments such as figsize, etc. -JJL +2008-12-09 + Released 0.98.4 at svn r6536 + +2008-12-08 + Added mdehoon's native macosx backend from sf patch 2179017 - JDH + +2008-12-08 + Removed the prints in the set_*style commands. Return the list of pprinted + strings instead - JDH -2008-12-05 Fixed a bug that the handlelength of the new legend class - set too short when numpoints=1 -JJL +2008-12-08 + Some of the changes Michael made to improve the output of the property + tables in the rest docs broke of made difficult to use some of the + interactive doc helpers, e.g., setp and getp. Having all the rest markup + in the ipython shell also confused the docstrings. I added a new rc param + docstring.hardcopy, to format the docstrings differently for hard copy and + other use. The ArtistInspector could use a little refactoring now since + there is duplication of effort between the rest out put and the non-rest + output - JDH -2008-12-04 Added support for data with units (e.g., dates) to - Axes.fill_between. -RM +2008-12-08 + Updated spectral methods (psd, csd, etc.) to scale one-sided densities by a + factor of 2 and, optionally, scale all densities by the sampling frequency. + This gives better MatLab compatibility. -RM -2008-12-04 Added fancybox keyword to legend. Also applied some changes - for better look, including baseline adjustment of the - multiline texts so that it is center aligned. -JJL +2008-12-08 + Fixed alignment of ticks in colorbars. -MGD -2008-12-02 The transmuter classes in the patches.py are reorganized as - subclasses of the Style classes. A few more box and arrow - styles are added. -JJL +2008-12-07 + drop the deprecated "new" keyword of np.histogram() for numpy 1.2 or later. + -JJL -2008-12-02 Fixed a bug in the new legend class that didn't allowed - a tuple of coordinate values as loc. -JJL +2008-12-06 + Fixed a bug in svg backend that new_figure_manager() ignores keywords + arguments such as figsize, etc. -JJL -2008-12-02 Improve checks for external dependencies, using subprocess - (instead of deprecated popen*) and distutils (for version - checking) - DSD +2008-12-05 + Fixed a bug that the handlelength of the new legend class set too short + when numpoints=1 -JJL -2008-11-30 Reimplementation of the legend which supports baseline alignment, - multi-column, and expand mode. - JJL +2008-12-04 + Added support for data with units (e.g., dates) to Axes.fill_between. -RM -2008-12-01 Fixed histogram autoscaling bug when bins or range are given - explicitly (fixes Debian bug 503148) - MM +2008-12-04 + Added fancybox keyword to legend. Also applied some changes for better + look, including baseline adjustment of the multiline texts so that it is + center aligned. -JJL -2008-11-25 Added rcParam axes.unicode_minus which allows plain hyphen - for minus when False - JDH +2008-12-02 + The transmuter classes in the patches.py are reorganized as subclasses of + the Style classes. A few more box and arrow styles are added. -JJL -2008-11-25 Added scatterpoints support in Legend. patch by Erik - Tollerud - JJL +2008-12-02 + Fixed a bug in the new legend class that didn't allowed a tuple of + coordinate values as loc. -JJL -2008-11-24 Fix crash in log ticking. - MGD +2008-12-02 + Improve checks for external dependencies, using subprocess (instead of + deprecated popen*) and distutils (for version checking) - DSD + +2008-11-30 + Reimplementation of the legend which supports baseline alignment, + multi-column, and expand mode. - JJL + +2008-12-01 + Fixed histogram autoscaling bug when bins or range are given explicitly + (fixes Debian bug 503148) - MM -2008-11-20 Added static helper method BrokenHBarCollection.span_where - and Axes/pyplot method fill_between. See - examples/pylab/fill_between.py - JDH +2008-11-25 + Added rcParam axes.unicode_minus which allows plain hyphen for minus when + False - JDH + +2008-11-25 + Added scatterpoints support in Legend. patch by Erik Tollerud - JJL + +2008-11-24 + Fix crash in log ticking. - MGD -2008-11-12 Add x_isdata and y_isdata attributes to Artist instances, - and use them to determine whether either or both - coordinates are used when updating dataLim. This is - used to fix autoscaling problems that had been triggered - by axhline, axhspan, axvline, axvspan. - EF +2008-11-20 + Added static helper method BrokenHBarCollection.span_where and Axes/pyplot + method fill_between. See examples/pylab/fill_between.py - JDH + +2008-11-12 + Add x_isdata and y_isdata attributes to Artist instances, and use them to + determine whether either or both coordinates are used when updating + dataLim. This is used to fix autoscaling problems that had been triggered + by axhline, axhspan, axvline, axvspan. - EF + +2008-11-11 + Update the psd(), csd(), cohere(), and specgram() methods of Axes and the + csd() cohere(), and specgram() functions in mlab to be in sync with the + changes to psd(). In fact, under the hood, these all call the same core to + do computations. - RM + +2008-11-11 + Add 'pad_to' and 'sides' parameters to mlab.psd() to allow controlling of + zero padding and returning of negative frequency components, respecitively. + These are added in a way that does not change the API. - RM + +2008-11-10 + Fix handling of c kwarg by scatter; generalize is_string_like to accept + numpy and numpy.ma string array scalars. - RM and EF + +2008-11-09 + Fix a possible EINTR problem in dviread, which might help when saving pdf + files from the qt backend. - JKS + +2008-11-05 + Fix bug with zoom to rectangle and twin axes - MGD + +2008-10-24 + Added Jae Joon's fancy arrow, box and annotation enhancements -- see + examples/pylab_examples/annotation_demo2.py + +2008-10-23 + Autoscaling is now supported with shared axes - EF -2008-11-11 Update the psd(), csd(), cohere(), and specgram() methods - of Axes and the csd() cohere(), and specgram() functions - in mlab to be in sync with the changes to psd(). - In fact, under the hood, these all call the same core - to do computations. - RM +2008-10-23 + Fixed exception in dviread that happened with Minion - JKS -2008-11-11 Add 'pad_to' and 'sides' parameters to mlab.psd() to - allow controlling of zero padding and returning of - negative frequency components, respecitively. These are - added in a way that does not change the API. - RM +2008-10-21 + set_xlim, ylim now return a copy of the viewlim array to avoid modify + inplace surprises -2008-11-10 Fix handling of c kwarg by scatter; generalize - is_string_like to accept numpy and numpy.ma string - array scalars. - RM and EF +2008-10-20 + Added image thumbnail generating function matplotlib.image.thumbnail. See + examples/misc/image_thumbnail.py - JDH -2008-11-09 Fix a possible EINTR problem in dviread, which might help - when saving pdf files from the qt backend. - JKS +2008-10-20 + Applied scatleg patch based on ideas and work by Erik Tollerud and Jae-Joon + Lee. - MM -2008-11-05 Fix bug with zoom to rectangle and twin axes - MGD +2008-10-11 + Fixed bug in pdf backend: if you pass a file object for output instead of a + filename, e.g., in a wep app, we now flush the object at the end. - JKS -2008-10-24 Added Jae Joon's fancy arrow, box and annotation - enhancements -- see - examples/pylab_examples/annotation_demo2.py +2008-10-08 + Add path simplification support to paths with gaps. - EF -2008-10-23 Autoscaling is now supported with shared axes - EF +2008-10-05 + Fix problem with AFM files that don't specify the font's full name or + family name. - JKS -2008-10-23 Fixed exception in dviread that happened with Minion - JKS +2008-10-04 + Added 'scilimits' kwarg to Axes.ticklabel_format() method, for easy access + to the set_powerlimits method of the major ScalarFormatter. - EF -2008-10-21 set_xlim, ylim now return a copy of the viewlim array to - avoid modify inplace surprises +2008-10-04 + Experimental new kwarg borderpad to replace pad in legend, based on + suggestion by Jae-Joon Lee. - EF -2008-10-20 Added image thumbnail generating function - matplotlib.image.thumbnail. See - examples/misc/image_thumbnail.py - JDH +2008-09-27 + Allow spy to ignore zero values in sparse arrays, based on patch by Tony + Yu. Also fixed plot to handle empty data arrays, and fixed handling of + markers in figlegend. - EF -2008-10-20 Applied scatleg patch based on ideas and work by Erik - Tollerud and Jae-Joon Lee. - MM +2008-09-24 + Introduce drawstyles for lines. Transparently split linestyles like + 'steps--' into drawstyle 'steps' and linestyle '--'. Legends always use + drawstyle 'default'. - MM -2008-10-11 Fixed bug in pdf backend: if you pass a file object for - output instead of a filename, e.g., in a wep app, we now - flush the object at the end. - JKS +2008-09-18 + Fixed quiver and quiverkey bugs (failure to scale properly when resizing) + and added additional methods for determining the arrow angles - EF -2008-10-08 Add path simplification support to paths with gaps. - EF +2008-09-18 + Fix polar interpolation to handle negative values of theta - MGD -2008-10-05 Fix problem with AFM files that don't specify the font's - full name or family name. - JKS +2008-09-14 + Reorganized cbook and mlab methods related to numerical calculations that + have little to do with the goals of those two modules into a separate + module numerical_methods.py Also, added ability to select points and stop + point selection with keyboard in ginput and manual contour labeling code. + Finally, fixed contour labeling bug. - DMK -2008-10-04 Added 'scilimits' kwarg to Axes.ticklabel_format() method, - for easy access to the set_powerlimits method of the - major ScalarFormatter. - EF +2008-09-11 + Fix backtick in Postscript output. - MGD -2008-10-04 Experimental new kwarg borderpad to replace pad in legend, - based on suggestion by Jae-Joon Lee. - EF +2008-09-10 + [ 2089958 ] Path simplification for vector output backends Leverage the + simplification code exposed through path_to_polygons to simplify certain + well-behaved paths in the vector backends (PDF, PS and SVG). + "path.simplify" must be set to True in matplotlibrc for this to work. + - MGD -2008-09-27 Allow spy to ignore zero values in sparse arrays, based - on patch by Tony Yu. Also fixed plot to handle empty - data arrays, and fixed handling of markers in figlegend. - EF +2008-09-10 + Add "filled" kwarg to Path.intersects_path and Path.intersects_bbox. - MGD -2008-09-24 Introduce drawstyles for lines. Transparently split linestyles - like 'steps--' into drawstyle 'steps' and linestyle '--'. - Legends always use drawstyle 'default'. - MM +2008-09-07 + Changed full arrows slightly to avoid an xpdf rendering problem reported by + Friedrich Hagedorn. - JKS -2008-09-18 Fixed quiver and quiverkey bugs (failure to scale properly - when resizing) and added additional methods for determining - the arrow angles - EF +2008-09-07 + Fix conversion of quadratic to cubic Bezier curves in PDF and PS backends. + Patch by Jae-Joon Lee. - JKS -2008-09-18 Fix polar interpolation to handle negative values of theta - MGD +2008-09-06 + Added 5-point star marker to plot command - EF -2008-09-14 Reorganized cbook and mlab methods related to numerical - calculations that have little to do with the goals of those two - modules into a separate module numerical_methods.py - Also, added ability to select points and stop point selection - with keyboard in ginput and manual contour labeling code. - Finally, fixed contour labeling bug. - DMK +2008-09-05 + Fix hatching in PS backend - MGD -2008-09-11 Fix backtick in Postscript output. - MGD +2008-09-03 + Fix log with base 2 - MGD -2008-09-10 [ 2089958 ] Path simplification for vector output backends - Leverage the simplification code exposed through - path_to_polygons to simplify certain well-behaved paths in - the vector backends (PDF, PS and SVG). "path.simplify" - must be set to True in matplotlibrc for this to work. - - MGD +2008-09-01 + Added support for bilinear interpolation in NonUniformImage; patch by + Gregory Lielens. - EF -2008-09-10 Add "filled" kwarg to Path.intersects_path and - Path.intersects_bbox. - MGD +2008-08-28 + Added support for multiple histograms with data of different length - MM -2008-09-07 Changed full arrows slightly to avoid an xpdf rendering - problem reported by Friedrich Hagedorn. - JKS +2008-08-28 + Fix step plots with log scale - MGD -2008-09-07 Fix conversion of quadratic to cubic Bezier curves in PDF - and PS backends. Patch by Jae-Joon Lee. - JKS +2008-08-28 + Fix masked arrays with markers in non-Agg backends - MGD -2008-09-06 Added 5-point star marker to plot command - EF +2008-08-28 + Fix clip_on kwarg so it actually works correctly - MGD -2008-09-05 Fix hatching in PS backend - MGD +2008-08-25 + Fix locale problems in SVG backend - MGD -2008-09-03 Fix log with base 2 - MGD +2008-08-22 + fix quiver so masked values are not plotted - JSW -2008-09-01 Added support for bilinear interpolation in - NonUniformImage; patch by Gregory Lielens. - EF +2008-08-18 + improve interactive pan/zoom in qt4 backend on windows - DSD -2008-08-28 Added support for multiple histograms with data of - different length - MM - -2008-08-28 Fix step plots with log scale - MGD - -2008-08-28 Fix masked arrays with markers in non-Agg backends - MGD - -2008-08-28 Fix clip_on kwarg so it actually works correctly - MGD - -2008-08-25 Fix locale problems in SVG backend - MGD - -2008-08-22 fix quiver so masked values are not plotted - JSW - -2008-08-18 improve interactive pan/zoom in qt4 backend on windows - DSD - -2008-08-11 Fix more bugs in NaN/inf handling. In particular, path simplification - (which does not handle NaNs or infs) will be turned off automatically - when infs or NaNs are present. Also masked arrays are now converted - to arrays with NaNs for consistent handling of masks and NaNs - - MGD and EF +2008-08-11 + Fix more bugs in NaN/inf handling. In particular, path simplification + (which does not handle NaNs or infs) will be turned off automatically when + infs or NaNs are present. Also masked arrays are now converted to arrays + with NaNs for consistent handling of masks and NaNs - MGD and EF ------------------------ -2008-08-03 Released 0.98.3 at svn r5947 +2008-08-03 + Released 0.98.3 at svn r5947 -2008-08-01 Backported memory leak fixes in _ttconv.cpp - MGD +2008-08-01 + Backported memory leak fixes in _ttconv.cpp - MGD -2008-07-31 Added masked array support to griddata. - JSW +2008-07-31 + Added masked array support to griddata. - JSW -2008-07-26 Added optional C and reduce_C_function arguments to - axes.hexbin(). This allows hexbin to accumulate the values - of C based on the x,y coordinates and display in hexagonal - bins. - ADS +2008-07-26 + Added optional C and reduce_C_function arguments to axes.hexbin(). This + allows hexbin to accumulate the values of C based on the x,y coordinates + and display in hexagonal bins. - ADS -2008-07-24 Deprecated (raise NotImplementedError) all the mlab2 - functions from matplotlib.mlab out of concern that some of - them were not clean room implementations. JDH +2008-07-24 + Deprecated (raise NotImplementedError) all the mlab2 functions from + matplotlib.mlab out of concern that some of them were not clean room + implementations. JDH -2008-07-24 Rewrite of a significant portion of the clabel code (class - ContourLabeler) to improve inlining. - DMK +2008-07-24 + Rewrite of a significant portion of the clabel code (class ContourLabeler) + to improve inlining. - DMK -2008-07-22 Added Barbs polygon collection (similar to Quiver) for plotting - wind barbs. Added corresponding helpers to Axes and pyplot as - well. (examples/pylab_examples/barb_demo.py shows it off.) - RMM +2008-07-22 + Added Barbs polygon collection (similar to Quiver) for plotting wind barbs. + Added corresponding helpers to Axes and pyplot as well. + (examples/pylab_examples/barb_demo.py shows it off.) - RMM -2008-07-21 Added scikits.delaunay as matplotlib.delaunay. Added griddata - function in matplotlib.mlab, with example (griddata_demo.py) in - pylab_examples. griddata function will use mpl_toolkits._natgrid - if installed. - JSW +2008-07-21 + Added scikits.delaunay as matplotlib.delaunay. Added griddata function in + matplotlib.mlab, with example (griddata_demo.py) in pylab_examples. + griddata function will use mpl_toolkits._natgrid if installed. - JSW -2008-07-21 Re-introduced offset_copy that works in the context of the - new transforms. - MGD +2008-07-21 + Re-introduced offset_copy that works in the context of the new transforms. + - MGD -2008-07-21 Committed patch by Ryan May to add get_offsets and - set_offsets to Collections base class - EF +2008-07-21 + Committed patch by Ryan May to add get_offsets and set_offsets to + Collections base class - EF -2008-07-21 Changed the "asarray" strategy in image.py so that - colormapping of masked input should work for all - image types (thanks Klaus Zimmerman) - EF +2008-07-21 + Changed the "asarray" strategy in image.py so that colormapping of masked + input should work for all image types (thanks Klaus Zimmerman) - EF -2008-07-20 Rewrote cbook.delete_masked_points and corresponding - unit test to support rgb color array inputs, datetime - inputs, etc. - EF +2008-07-20 + Rewrote cbook.delete_masked_points and corresponding unit test to support + rgb color array inputs, datetime inputs, etc. - EF -2008-07-20 Renamed unit/axes_unit.py to cbook_unit.py and modified - in accord with Ryan's move of delete_masked_points from - axes to cbook. - EF +2008-07-20 + Renamed unit/axes_unit.py to cbook_unit.py and modified in accord with + Ryan's move of delete_masked_points from axes to cbook. - EF -2008-07-18 Check for nan and inf in axes.delete_masked_points(). - This should help hexbin and scatter deal with nans. - ADS +2008-07-18 + Check for nan and inf in axes.delete_masked_points(). This should help + hexbin and scatter deal with nans. - ADS -2008-07-17 Added ability to manually select contour label locations. - Also added a waitforbuttonpress function. - DMK +2008-07-17 + Added ability to manually select contour label locations. Also added a + waitforbuttonpress function. - DMK -2008-07-17 Fix bug with NaNs at end of path (thanks, Andrew Straw for - the report) - MGD +2008-07-17 + Fix bug with NaNs at end of path (thanks, Andrew Straw for the report) - + MGD -2008-07-16 Improve error handling in texmanager, thanks to Ian Henry - for reporting - DSD +2008-07-16 + Improve error handling in texmanager, thanks to Ian Henry for reporting - + DSD -2008-07-12 Added support for external backends with the - "module://my_backend" syntax - JDH +2008-07-12 + Added support for external backends with the "module://my_backend" syntax - + JDH -2008-07-11 Fix memory leak related to shared axes. Grouper should - store weak references. - MGD +2008-07-11 + Fix memory leak related to shared axes. Grouper should store weak + references. - MGD -2008-07-10 Bugfix: crash displaying fontconfig pattern - MGD +2008-07-10 + Bugfix: crash displaying fontconfig pattern - MGD -2008-07-10 Bugfix: [ 2013963 ] update_datalim_bounds in Axes not works - MGD +2008-07-10 + Bugfix: [ 2013963 ] update_datalim_bounds in Axes not works - MGD -2008-07-10 Bugfix: [ 2014183 ] multiple imshow() causes gray edges - MGD +2008-07-10 + Bugfix: [ 2014183 ] multiple imshow() causes gray edges - MGD -2008-07-09 Fix rectangular axes patch on polar plots bug - MGD +2008-07-09 + Fix rectangular axes patch on polar plots bug - MGD -2008-07-09 Improve mathtext radical rendering - MGD +2008-07-09 + Improve mathtext radical rendering - MGD -2008-07-08 Improve mathtext superscript placement - MGD +2008-07-08 + Improve mathtext superscript placement - MGD -2008-07-07 Fix custom scales in pcolormesh (thanks Matthew Turk) - MGD +2008-07-07 + Fix custom scales in pcolormesh (thanks Matthew Turk) - MGD -2008-07-03 Implemented findobj method for artist and pyplot - see - examples/pylab_examples/findobj_demo.py - JDH +2008-07-03 + Implemented findobj method for artist and pyplot - see + examples/pylab_examples/findobj_demo.py - JDH -2008-06-30 Another attempt to fix TextWithDash - DSD +2008-06-30 + Another attempt to fix TextWithDash - DSD -2008-06-30 Removed Qt4 NavigationToolbar2.destroy -- it appears to - have been unnecessary and caused a bug reported by P. - Raybaut - DSD +2008-06-30 + Removed Qt4 NavigationToolbar2.destroy -- it appears to have been + unnecessary and caused a bug reported by P. Raybaut - DSD -2008-06-27 Fixed tick positioning bug - MM +2008-06-27 + Fixed tick positioning bug - MM -2008-06-27 Fix dashed text bug where text was at the wrong end of the - dash - MGD +2008-06-27 + Fix dashed text bug where text was at the wrong end of the dash - MGD -2008-06-26 Fix mathtext bug for expressions like $x_{\leftarrow}$ - MGD +2008-06-26 + Fix mathtext bug for expressions like $x_{\leftarrow}$ - MGD -2008-06-26 Fix direction of horizontal/vertical hatches - MGD +2008-06-26 + Fix direction of horizontal/vertical hatches - MGD -2008-06-25 Figure.figurePatch renamed Figure.patch, Axes.axesPatch - renamed Axes.patch, Axes.axesFrame renamed Axes.frame, - Axes.get_frame, which returns Axes.patch, is deprecated. - Examples and users guide updated - JDH +2008-06-25 + Figure.figurePatch renamed Figure.patch, Axes.axesPatch renamed Axes.patch, + Axes.axesFrame renamed Axes.frame, Axes.get_frame, which returns + Axes.patch, is deprecated. Examples and users guide updated - JDH -2008-06-25 Fix rendering quality of pcolor - MGD +2008-06-25 + Fix rendering quality of pcolor - MGD ---------------------------- -2008-06-24 Released 0.98.2 at svn r5667 - (source only for debian) JDH +2008-06-24 + Released 0.98.2 at svn r5667 - (source only for debian) JDH -2008-06-24 Added "transparent" kwarg to savefig. - MGD +2008-06-24 + Added "transparent" kwarg to savefig. - MGD -2008-06-24 Applied Stefan's patch to draw a single centered marker over - a line with numpoints==1 - JDH +2008-06-24 + Applied Stefan's patch to draw a single centered marker over a line with + numpoints==1 - JDH -2008-06-23 Use splines to render circles in scatter plots - MGD +2008-06-23 + Use splines to render circles in scatter plots - MGD ---------------------------- -2008-06-22 Released 0.98.1 at revision 5637 +2008-06-22 + Released 0.98.1 at revision 5637 -2008-06-22 Removed axes3d support and replaced it with a - NotImplementedError for one release cycle +2008-06-22 + Removed axes3d support and replaced it with a NotImplementedError for one + release cycle -2008-06-21 fix marker placement bug in backend_ps - DSD +2008-06-21 + fix marker placement bug in backend_ps - DSD -2008-06-20 [ 1978629 ] scale documentation missing/incorrect for log - MGD +2008-06-20 + [ 1978629 ] scale documentation missing/incorrect for log - MGD -2008-06-20 Added closed kwarg to PolyCollection. Fixes bug [ 1994535 - ] still missing lines on graph with svn (r 5548). - MGD +2008-06-20 + Added closed kwarg to PolyCollection. Fixes bug [ 1994535 ] still missing + lines on graph with svn (r 5548). - MGD -2008-06-20 Added set/get_closed method to Polygon; fixes error - in hist - MM +2008-06-20 + Added set/get_closed method to Polygon; fixes error in hist - MM -2008-06-19 Use relative font sizes (e.g., 'medium' and 'large') in - rcsetup.py and matplotlibrc.template so that text will - be scaled by default when changing rcParams['font.size'] - - EF +2008-06-19 + Use relative font sizes (e.g., 'medium' and 'large') in rcsetup.py and + matplotlibrc.template so that text will be scaled by default when changing + rcParams['font.size'] - EF -2008-06-17 Add a generic PatchCollection class that can contain any - kind of patch. - MGD +2008-06-17 + Add a generic PatchCollection class that can contain any kind of patch. - + MGD -2008-06-13 Change pie chart label alignment to avoid having labels - overwrite the pie - MGD +2008-06-13 + Change pie chart label alignment to avoid having labels overwrite the pie - + MGD -2008-06-12 Added some helper functions to the mathtext parser to - return bitmap arrays or write pngs to make it easier to use - mathtext outside the context of an mpl figure. modified - the mathpng sphinxext to use the mathtext png save - functionality - see examples/api/mathtext_asarray.py - JDH +2008-06-12 + Added some helper functions to the mathtext parser to return bitmap arrays + or write pngs to make it easier to use mathtext outside the context of an + mpl figure. modified the mathpng sphinxext to use the mathtext png save + functionality - see examples/api/mathtext_asarray.py - JDH -2008-06-11 Use matplotlib.mathtext to render math expressions in - online docs - MGD +2008-06-11 + Use matplotlib.mathtext to render math expressions in online docs - MGD -2008-06-11 Move PNG loading/saving to its own extension module, and - remove duplicate code in _backend_agg.cpp and _image.cpp - that does the same thing - MGD +2008-06-11 + Move PNG loading/saving to its own extension module, and remove duplicate + code in _backend_agg.cpp and _image.cpp that does the same thing - MGD -2008-06-11 Numerous mathtext bugfixes, primarily related to - dpi-independence - MGD +2008-06-11 + Numerous mathtext bugfixes, primarily related to dpi-independence - MGD -2008-06-10 Bar now applies the label only to the first patch only, and - sets '_nolegend_' for the other patch labels. This lets - autolegend work as expected for hist and bar - see - \https://sourceforge.net/tracker/index.php?func=detail&aid=1986597&group_id=80706&atid=560720 - JDH +2008-06-10 + Bar now applies the label only to the first patch only, and sets + '_nolegend_' for the other patch labels. This lets autolegend work as + expected for hist and bar - see + \https://sourceforge.net/tracker/index.php?func=detail&aid=1986597&group_id=80706&atid=560720 + JDH -2008-06-10 Fix text baseline alignment bug. [ 1985420 ] Repair of - baseline alignment in Text._get_layout. Thanks Stan West - - MGD +2008-06-10 + Fix text baseline alignment bug. [ 1985420 ] Repair of baseline alignment + in Text._get_layout. Thanks Stan West - MGD -2008-06-09 Committed Gregor's image resample patch to downsampling - images with new rcparam image.resample - JDH +2008-06-09 + Committed Gregor's image resample patch to downsampling images with new + rcparam image.resample - JDH -2008-06-09 Don't install Enthought.Traits along with matplotlib. For - matplotlib developers convenience, it can still be - installed by setting an option in setup.cfg while we figure - decide if there is a future for the traited config - DSD +2008-06-09 + Don't install Enthought.Traits along with matplotlib. For matplotlib + developers convenience, it can still be installed by setting an option in + setup.cfg while we figure decide if there is a future for the traited + config - DSD -2008-06-09 Added range keyword arg to hist() - MM +2008-06-09 + Added range keyword arg to hist() - MM -2008-06-07 Moved list of backends to rcsetup.py; made use of lower - case for backend names consistent; use validate_backend - when importing backends subpackage - EF +2008-06-07 + Moved list of backends to rcsetup.py; made use of lower case for backend + names consistent; use validate_backend when importing backends subpackage - + EF -2008-06-06 hist() revision, applied ideas proposed by Erik Tollerud and - Olle Engdegard: make histtype='step' unfilled by default - and introduce histtype='stepfilled'; use default color - cycle; introduce reverse cumulative histogram; new align - keyword - MM +2008-06-06 + hist() revision, applied ideas proposed by Erik Tollerud and Olle + Engdegard: make histtype='step' unfilled by default and introduce + histtype='stepfilled'; use default color cycle; introduce reverse + cumulative histogram; new align keyword - MM -2008-06-06 Fix closed polygon patch and also provide the option to - not close the polygon - MGD +2008-06-06 + Fix closed polygon patch and also provide the option to not close the + polygon - MGD -2008-06-05 Fix some dpi-changing-related problems with PolyCollection, - as called by Axes.scatter() - MGD +2008-06-05 + Fix some dpi-changing-related problems with PolyCollection, as called by + Axes.scatter() - MGD -2008-06-05 Fix image drawing so there is no extra space to the right - or bottom - MGD +2008-06-05 + Fix image drawing so there is no extra space to the right or bottom - MGD -2006-06-04 Added a figure title command suptitle as a Figure method - and pyplot command -- see examples/figure_title.py - JDH +2006-06-04 + Added a figure title command suptitle as a Figure method and pyplot command + -- see examples/figure_title.py - JDH -2008-06-02 Added support for log to hist with histtype='step' and fixed - a bug for log-scale stacked histograms - MM +2008-06-02 + Added support for log to hist with histtype='step' and fixed a bug for + log-scale stacked histograms - MM ----------------------------- -2008-05-29 Released 0.98.0 at revision 5314 +2008-05-29 + Released 0.98.0 at revision 5314 -2008-05-29 matplotlib.image.imread now no longer always returns RGBA - -- if the image is luminance or RGB, it will return a MxN - or MxNx3 array if possible. Also uint8 is no longer always - forced to float. +2008-05-29 + matplotlib.image.imread now no longer always returns RGBA -- if the image + is luminance or RGB, it will return a MxN or MxNx3 array if possible. Also + uint8 is no longer always forced to float. -2008-05-29 Implement path clipping in PS backend - JDH +2008-05-29 + Implement path clipping in PS backend - JDH -2008-05-29 Fixed two bugs in texmanager.py: - improved comparison of dvipng versions - fixed a bug introduced when get_grey method was added - - DSD +2008-05-29 + Fixed two bugs in texmanager.py: improved comparison of dvipng versions + fixed a bug introduced when get_grey method was added - DSD -2008-05-28 Fix crashing of PDFs in xpdf and ghostscript when two-byte - characters are used with Type 3 fonts - MGD +2008-05-28 + Fix crashing of PDFs in xpdf and ghostscript when two-byte characters are + used with Type 3 fonts - MGD -2008-05-28 Allow keyword args to configure widget properties as - requested in - \http://sourceforge.net/tracker/index.php?func=detail&aid=1866207&group_id=80706&atid=560722 - - JDH +2008-05-28 + Allow keyword args to configure widget properties as requested in + \http://sourceforge.net/tracker/index.php?func=detail&aid=1866207&group_id=80706&atid=560722 + - JDH -2008-05-28 Replaced '-' with u'\u2212' for minus sign as requested in - \http://sourceforge.net/tracker/index.php?func=detail&aid=1962574&group_id=80706&atid=560720 +2008-05-28 + Replaced '-' with u'\\u2212' for minus sign as requested in + \http://sourceforge.net/tracker/index.php?func=detail&aid=1962574&group_id=80706&atid=560720 -2008-05-28 zero width/height Rectangles no longer influence the - autoscaler. Useful for log histograms with empty bins - - JDH +2008-05-28 + zero width/height Rectangles no longer influence the autoscaler. Useful + for log histograms with empty bins - JDH -2008-05-28 Fix rendering of composite glyphs in Type 3 conversion - (particularly as evidenced in the Eunjin.ttf Korean font) - Thanks Jae-Joon Lee for finding this! +2008-05-28 + Fix rendering of composite glyphs in Type 3 conversion (particularly as + evidenced in the Eunjin.ttf Korean font) Thanks Jae-Joon Lee for finding + this! -2008-05-27 Rewrote the cm.ScalarMappable callback infrastructure to - use cbook.CallbackRegistry rather than custom callback - handling. Amy users of add_observer/notify of the - cm.ScalarMappable should uae the - cm.ScalarMappable.callbacksSM CallbackRegistry instead. JDH +2008-05-27 + Rewrote the cm.ScalarMappable callback infrastructure to use + cbook.CallbackRegistry rather than custom callback handling. Any users of + add_observer/notify of the cm.ScalarMappable should use the + cm.ScalarMappable.callbacksSM CallbackRegistry instead. JDH -2008-05-27 Fix TkAgg build on Ubuntu 8.04 (and hopefully a more - general solution for other platforms, too.) +2008-05-27 + Fix TkAgg build on Ubuntu 8.04 (and hopefully a more general solution for + other platforms, too.) -2008-05-24 Added PIL support for loading images to imread (if PIL is - available) - JDH +2008-05-24 + Added PIL support for loading images to imread (if PIL is available) - JDH -2008-05-23 Provided a function and a method for controlling the - plot color cycle. - EF +2008-05-23 + Provided a function and a method for controlling the plot color cycle. - EF -2008-05-23 Major revision of hist(). Can handle 2D arrays and create - stacked histogram plots; keyword 'width' deprecated and - rwidth (relative width) introduced; align='edge' changed - to center of bin - MM +2008-05-23 + Major revision of hist(). Can handle 2D arrays and create stacked histogram + plots; keyword 'width' deprecated and rwidth (relative width) introduced; + align='edge' changed to center of bin - MM -2008-05-22 Added support for ReST-based doumentation using Sphinx. - Documents are located in doc/, and are broken up into - a users guide and an API reference. To build, run the - make.py files. Sphinx-0.4 is needed to build generate xml, - which will be useful for rendering equations with mathml, - use sphinx from svn until 0.4 is released - DSD +2008-05-22 + Added support for ReST-based doumentation using Sphinx. Documents are + located in doc/, and are broken up into a users guide and an API reference. + To build, run the make.py files. Sphinx-0.4 is needed to build generate + xml, which will be useful for rendering equations with mathml, use sphinx + from svn until 0.4 is released - DSD -2008-05-21 Fix segfault in TkAgg backend - MGD +2008-05-21 + Fix segfault in TkAgg backend - MGD -2008-05-21 Fix a "local variable unreferenced" bug in plotfile - MM +2008-05-21 + Fix a "local variable unreferenced" bug in plotfile - MM -2008-05-19 Fix crash when Windows can not access the registry to - determine font path [Bug 1966974, thanks Patrik Simons] - MGD +2008-05-19 + Fix crash when Windows can not access the registry to determine font path + [Bug 1966974, thanks Patrik Simons] - MGD -2008-05-16 removed some unneeded code w/ the python 2.4 requirement. - cbook no longer provides compatibility for reversed, - enumerate, set or izip. removed lib/subprocess, mpl1, - sandbox/units, and the swig code. This stuff should remain - on the maintenance branch for archival purposes. JDH +2008-05-16 + removed some unneeded code w/ the python 2.4 requirement. cbook no longer + provides compatibility for reversed, enumerate, set or izip. removed + lib/subprocess, mpl1, sandbox/units, and the swig code. This stuff should + remain on the maintenance branch for archival purposes. JDH -2008-05-16 Reorganized examples dir - JDH +2008-05-16 + Reorganized examples dir - JDH -2008-05-16 Added 'elinewidth' keyword arg to errorbar, based on patch - by Christopher Brown - MM +2008-05-16 + Added 'elinewidth' keyword arg to errorbar, based on patch by Christopher + Brown - MM -2008-05-16 Added 'cumulative' keyword arg to hist to plot cumulative - histograms. For normed hists, this is normalized to one - MM +2008-05-16 + Added 'cumulative' keyword arg to hist to plot cumulative histograms. For + normed hists, this is normalized to one - MM -2008-05-15 Fix Tk backend segfault on some machines - MGD +2008-05-15 + Fix Tk backend segfault on some machines - MGD -2008-05-14 Don't use stat on Windows (fixes font embedding problem) - MGD +2008-05-14 + Don't use stat on Windows (fixes font embedding problem) - MGD -2008-05-09 Fix /singlequote (') in Postscript backend - MGD +2008-05-09 + Fix /singlequote (') in Postscript backend - MGD -2008-05-08 Fix kerning in SVG when embedding character outlines - MGD +2008-05-08 + Fix kerning in SVG when embedding character outlines - MGD -2008-05-07 Switched to future numpy histogram semantic in hist - MM +2008-05-07 + Switched to future numpy histogram semantic in hist - MM -2008-05-06 Fix strange colors when blitting in QtAgg and Qt4Agg - MGD +2008-05-06 + Fix strange colors when blitting in QtAgg and Qt4Agg - MGD -2008-05-05 pass notify_axes_change to the figure's add_axobserver - in the qt backends, like we do for the other backends. - Thanks Glenn Jones for the report - DSD +2008-05-05 + pass notify_axes_change to the figure's add_axobserver in the qt backends, + like we do for the other backends. Thanks Glenn Jones for the report - DSD -2008-05-02 Added step histograms, based on patch by Erik Tollerud. - MM +2008-05-02 + Added step histograms, based on patch by Erik Tollerud. - MM -2008-05-02 On PyQt <= 3.14 there is no way to determine the underlying - Qt version. [1851364] - MGD +2008-05-02 + On PyQt <= 3.14 there is no way to determine the underlying Qt version. + [1851364] - MGD -2008-05-02 Don't call sys.exit() when pyemf is not found [1924199] - - MGD +2008-05-02 + Don't call sys.exit() when pyemf is not found [1924199] - MGD -2008-05-02 Update _subprocess.c from upstream Python 2.5.2 to get a - few memory and reference-counting-related bugfixes. See - bug 1949978. - MGD +2008-05-02 + Update _subprocess.c from upstream Python 2.5.2 to get a few memory and + reference-counting-related bugfixes. See bug 1949978. - MGD -2008-04-30 Added some record array editing widgets for gtk -- see - examples/rec_edit*.py - JDH +2008-04-30 + Added some record array editing widgets for gtk -- see + examples/rec_edit*.py - JDH -2008-04-29 Fix bug in mlab.sqrtm - MM +2008-04-29 + Fix bug in mlab.sqrtm - MM -2008-04-28 Fix bug in SVG text with Mozilla-based viewers (the symbol - tag is not supported) - MGD +2008-04-28 + Fix bug in SVG text with Mozilla-based viewers (the symbol tag is not + supported) - MGD -2008-04-27 Applied patch by Michiel de Hoon to add hexbin - axes method and pyplot function - EF +2008-04-27 + Applied patch by Michiel de Hoon to add hexbin axes method and pyplot + function - EF -2008-04-25 Enforce python >= 2.4; remove subprocess build - EF +2008-04-25 + Enforce python >= 2.4; remove subprocess build - EF -2008-04-25 Enforce the numpy requirement at build time - JDH +2008-04-25 + Enforce the numpy requirement at build time - JDH -2008-04-24 Make numpy 1.1 and python 2.3 required when importing - matplotlib - EF +2008-04-24 + Make numpy 1.1 and python 2.3 required when importing matplotlib - EF -2008-04-24 Fix compilation issues on VS2003 (Thanks Martin Spacek for - all the help) - MGD +2008-04-24 + Fix compilation issues on VS2003 (Thanks Martin Spacek for all the help) - + MGD -2008-04-24 Fix sub/superscripts when the size of the font has been - changed - MGD +2008-04-24 + Fix sub/superscripts when the size of the font has been changed - MGD -2008-04-22 Use "svg.embed_char_paths" consistently everywhere - MGD +2008-04-22 + Use "svg.embed_char_paths" consistently everywhere - MGD -2008-04-20 Add support to MaxNLocator for symmetric axis autoscaling. - EF +2008-04-20 + Add support to MaxNLocator for symmetric axis autoscaling. - EF -2008-04-20 Fix double-zoom bug. - MM +2008-04-20 + Fix double-zoom bug. - MM -2008-04-15 Speed up colormapping. - EF +2008-04-15 + Speed up colormapping. - EF -2008-04-12 Speed up zooming and panning of dense images. - EF +2008-04-12 + Speed up zooming and panning of dense images. - EF -2008-04-11 Fix global font rcParam setting after initialization - time. - MGD +2008-04-11 + Fix global font rcParam setting after initialization time. - MGD -2008-04-11 Revert commits 5002 and 5031, which were intended to - avoid an unnecessary call to draw(). 5002 broke saving - figures before show(). 5031 fixed the problem created in - 5002, but broke interactive plotting. Unnecessary call to - draw still needs resolution - DSD +2008-04-11 + Revert commits 5002 and 5031, which were intended to avoid an unnecessary + call to draw(). 5002 broke saving figures before show(). 5031 fixed the + problem created in 5002, but broke interactive plotting. Unnecessary call + to draw still needs resolution - DSD -2008-04-07 Improve color validation in rc handling, suggested - by Lev Givon - EF +2008-04-07 + Improve color validation in rc handling, suggested by Lev Givon - EF -2008-04-02 Allow to use both linestyle definition arguments, '-' and - 'solid' etc. in plots/collections - MM +2008-04-02 + Allow to use both linestyle definition arguments, '-' and 'solid' etc. in + plots/collections - MM -2008-03-27 Fix saving to Unicode filenames with Agg backend - (other backends appear to already work...) - (Thanks, Christopher Barker) - MGD +2008-03-27 + Fix saving to Unicode filenames with Agg backend (other backends appear to + already work...) (Thanks, Christopher Barker) - MGD -2008-03-26 Fix SVG backend bug that prevents copying and pasting in - Inkscape (thanks Kaushik Ghose) - MGD +2008-03-26 + Fix SVG backend bug that prevents copying and pasting in Inkscape (thanks + Kaushik Ghose) - MGD -2008-03-24 Removed an unnecessary call to draw() in the backend_qt* - mouseReleaseEvent. Thanks to Ted Drain - DSD +2008-03-24 + Removed an unnecessary call to draw() in the backend_qt* mouseReleaseEvent. + Thanks to Ted Drain - DSD -2008-03-23 Fix a pdf backend bug which sometimes caused the outermost - gsave to not be balanced with a grestore. - JKS +2008-03-23 + Fix a pdf backend bug which sometimes caused the outermost gsave to not be + balanced with a grestore. - JKS -2008-03-20 Fixed a minor bug in ContourSet._process_linestyles when - len(linestyles)==Nlev - MM +2008-03-20 + Fixed a minor bug in ContourSet._process_linestyles when + len(linestyles)==Nlev - MM -2008-03-19 Changed ma import statements to "from numpy import ma"; - this should work with past and future versions of - numpy, whereas "import numpy.ma as ma" will work only - with numpy >= 1.05, and "import numerix.npyma as ma" - is obsolete now that maskedarray is replacing the - earlier implementation, as of numpy 1.05. +2008-03-19 + Changed ma import statements to "from numpy import ma"; this should work + with past and future versions of numpy, whereas "import numpy.ma as ma" + will work only with numpy >= 1.05, and "import numerix.npyma as ma" is + obsolete now that maskedarray is replacing the earlier implementation, as + of numpy 1.05. -2008-03-14 Removed an apparently unnecessary call to - FigureCanvasAgg.draw in backend_qt*agg. Thanks to Ted - Drain - DSD +2008-03-14 + Removed an apparently unnecessary call to FigureCanvasAgg.draw in + backend_qt*agg. Thanks to Ted Drain - DSD -2008-03-10 Workaround a bug in backend_qt4agg's blitting due to a - buffer width/bbox width mismatch in _backend_agg's - copy_from_bbox - DSD +2008-03-10 + Workaround a bug in backend_qt4agg's blitting due to a buffer width/bbox + width mismatch in _backend_agg's copy_from_bbox - DSD -2008-02-29 Fix class Wx toolbar pan and zoom functions (Thanks Jeff - Peery) - MGD +2008-02-29 + Fix class Wx toolbar pan and zoom functions (Thanks Jeff Peery) - MGD -2008-02-16 Added some new rec array functionality to mlab - (rec_summarize, rec2txt and rec_groupby). See - examples/rec_groupby_demo.py. Thanks to Tim M for rec2txt. +2008-02-16 + Added some new rec array functionality to mlab (rec_summarize, rec2txt and + rec_groupby). See examples/rec_groupby_demo.py. Thanks to Tim M for + rec2txt. -2008-02-12 Applied Erik Tollerud's span selector patch - JDH +2008-02-12 + Applied Erik Tollerud's span selector patch - JDH -2008-02-11 Update plotting() doc string to refer to getp/setp. - JKS +2008-02-11 + Update plotting() doc string to refer to getp/setp. - JKS -2008-02-10 Fixed a problem with square roots in the pdf backend with - usetex. - JKS +2008-02-10 + Fixed a problem with square roots in the pdf backend with usetex. - JKS -2008-02-08 Fixed minor __str__ bugs so getp(gca()) works. - JKS +2008-02-08 + Fixed minor __str__ bugs so getp(gca()) works. - JKS -2008-02-05 Added getters for title, xlabel, ylabel, as requested - by Brandon Kieth - EF +2008-02-05 + Added getters for title, xlabel, ylabel, as requested by Brandon Kieth - EF -2008-02-05 Applied Gael's ginput patch and created - examples/ginput_demo.py - JDH +2008-02-05 + Applied Gael's ginput patch and created examples/ginput_demo.py - JDH -2008-02-03 Expose interpnames, a list of valid interpolation - methods, as an AxesImage class attribute. - EF +2008-02-03 + Expose interpnames, a list of valid interpolation methods, as an AxesImage + class attribute. - EF -2008-02-03 Added BoundaryNorm, with examples in colorbar_only.py - and image_masked.py. - EF +2008-02-03 + Added BoundaryNorm, with examples in colorbar_only.py and image_masked.py. + - EF -2008-02-03 Force dpi=72 in pdf backend to fix picture size bug. - JKS +2008-02-03 + Force dpi=72 in pdf backend to fix picture size bug. - JKS -2008-02-01 Fix doubly-included font problem in Postscript backend - MGD +2008-02-01 + Fix doubly-included font problem in Postscript backend - MGD -2008-02-01 Fix reference leak in ft2font Glyph objects. - MGD +2008-02-01 + Fix reference leak in ft2font Glyph objects. - MGD -2008-01-31 Don't use unicode strings with usetex by default - DSD +2008-01-31 + Don't use unicode strings with usetex by default - DSD -2008-01-31 Fix text spacing problems in PDF backend with *some* fonts, - such as STIXGeneral. +2008-01-31 + Fix text spacing problems in PDF backend with *some* fonts, such as + STIXGeneral. -2008-01-31 Fix \sqrt with radical number (broken by making [ and ] - work below) - MGD +2008-01-31 + Fix \sqrt with radical number (broken by making [ and ] work below) - MGD -2008-01-27 Applied Martin Teichmann's patch to improve the Qt4 - backend. Uses Qt's builtin toolbars and statusbars. - See bug 1828848 - DSD +2008-01-27 + Applied Martin Teichmann's patch to improve the Qt4 backend. Uses Qt's + builtin toolbars and statusbars. See bug 1828848 - DSD -2008-01-10 Moved toolkits to mpl_toolkits, made mpl_toolkits - a namespace package - JSWHIT +2008-01-10 + Moved toolkits to mpl_toolkits, made mpl_toolkits a namespace package - + JSWHIT -2008-01-10 Use setup.cfg to set the default parameters (tkagg, - numpy) when building windows installers - DSD +2008-01-10 + Use setup.cfg to set the default parameters (tkagg, numpy) when building + windows installers - DSD -2008-01-10 Fix bug displaying [ and ] in mathtext - MGD +2008-01-10 + Fix bug displaying [ and ] in mathtext - MGD -2008-01-10 Fix bug when displaying a tick value offset with scientific - notation. (Manifests itself as a warning that the \times - symbol can not be found). - MGD +2008-01-10 + Fix bug when displaying a tick value offset with scientific notation. + (Manifests itself as a warning that the \times symbol can not be found). - + MGD -2008-01-10 Use setup.cfg to set the default parameters (tkagg, - numpy) when building windows installers - DSD +2008-01-10 + Use setup.cfg to set the default parameters (tkagg, numpy) when building + windows installers - DSD -------------------- -2008-01-06 Released 0.91.2 at revision 4802 +2008-01-06 + Released 0.91.2 at revision 4802 -2007-12-26 Reduce too-late use of matplotlib.use() to a warning - instead of an exception, for backwards compatibility - EF +2007-12-26 + Reduce too-late use of matplotlib.use() to a warning instead of an + exception, for backwards compatibility - EF -2007-12-25 Fix bug in errorbar, identified by Noriko Minakawa - EF +2007-12-25 + Fix bug in errorbar, identified by Noriko Minakawa - EF -2007-12-25 Changed masked array importing to work with the upcoming - numpy 1.05 (now the maskedarray branch) as well as with - earlier versions. - EF +2007-12-25 + Changed masked array importing to work with the upcoming numpy 1.05 (now + the maskedarray branch) as well as with earlier versions. - EF -2007-12-16 rec2csv saves doubles without losing precision. Also, it - does not close filehandles passed in open. - JDH,ADS +2007-12-16 + rec2csv saves doubles without losing precision. Also, it does not close + filehandles passed in open. - JDH,ADS -2007-12-13 Moved rec2gtk to matplotlib.toolkits.gtktools and rec2excel - to matplotlib.toolkits.exceltools - JDH +2007-12-13 + Moved rec2gtk to matplotlib.toolkits.gtktools and rec2excel to + matplotlib.toolkits.exceltools - JDH -2007-12-12 Support alpha-blended text in the Agg and Svg backends - - MGD +2007-12-12 + Support alpha-blended text in the Agg and Svg backends - MGD -2007-12-10 Fix SVG text rendering bug. - MGD +2007-12-10 + Fix SVG text rendering bug. - MGD -2007-12-10 Increase accuracy of circle and ellipse drawing by using an - 8-piece bezier approximation, rather than a 4-piece one. - Fix PDF, SVG and Cairo backends so they can draw paths - (meaning ellipses as well). - MGD +2007-12-10 + Increase accuracy of circle and ellipse drawing by using an 8-piece bezier + approximation, rather than a 4-piece one. Fix PDF, SVG and Cairo backends + so they can draw paths (meaning ellipses as well). - MGD -2007-12-07 Issue a warning when drawing an image on a non-linear axis. - MGD +2007-12-07 + Issue a warning when drawing an image on a non-linear axis. - MGD -2007-12-06 let widgets.Cursor initialize to the lower x and y bounds - rather than 0,0, which can cause havoc for dates and other - transforms - DSD +2007-12-06 + let widgets.Cursor initialize to the lower x and y bounds rather than 0,0, + which can cause havoc for dates and other transforms - DSD -2007-12-06 updated references to mpl data directories for py2exe - DSD +2007-12-06 + updated references to mpl data directories for py2exe - DSD -2007-12-06 fixed a bug in rcsetup, see bug 1845057 - DSD +2007-12-06 + fixed a bug in rcsetup, see bug 1845057 - DSD -2007-12-05 Fix how fonts are cached to avoid loading the same one multiple times. - (This was a regression since 0.90 caused by the refactoring of - font_manager.py) - MGD +2007-12-05 + Fix how fonts are cached to avoid loading the same one multiple times. + (This was a regression since 0.90 caused by the refactoring of + font_manager.py) - MGD -2007-12-05 Support arbitrary rotation of usetex text in Agg backend. - MGD +2007-12-05 + Support arbitrary rotation of usetex text in Agg backend. - MGD -2007-12-04 Support '|' as a character in mathtext - MGD +2007-12-04 + Support '|' as a character in mathtext - MGD ----------------------------------------------------- -2007-11-27 Released 0.91.1 at revision 4517 +2007-11-27 + Released 0.91.1 at revision 4517 ----------------------------------------------------- -2007-11-27 Released 0.91.0 at revision 4478 - -2007-11-13 All backends now support writing to a file-like object, not - just a regular file. savefig() can be passed a file-like - object in place of a file path. - MGD - -2007-11-13 Improved the default backend selection at build time: - SVG -> Agg -> TkAgg -> WXAgg -> GTK -> GTKAgg. The last usable - backend in this progression will be chosen in the default - config file. If a backend is defined in setup.cfg, that will - be the default backend - DSD - -2007-11-13 Improved creation of default config files at build time for - traited config package - DSD - -2007-11-12 Exposed all the build options in setup.cfg. These options are - read into a dict called "options" by setupext.py. Also, added - "-mpl" tags to the version strings for packages provided by - matplotlib. Versions provided by mpl will be identified and - updated on subsequent installs - DSD - -2007-11-12 Added support for STIX fonts. A new rcParam, - mathtext.fontset, can be used to choose between: - - 'cm': - The TeX/LaTeX Computer Modern fonts - - 'stix': - The STIX fonts (see stixfonts.org) - - 'stixsans': - The STIX fonts, using sans-serif glyphs by default - - 'custom': - A generic Unicode font, in which case the mathtext font - must be specified using mathtext.bf, mathtext.it, - mathtext.sf etc. - - Added a new example, stix_fonts_demo.py to show how to access - different fonts and unusual symbols. - - - MGD - -2007-11-12 Options to disable building backend extension modules moved - from setup.py to setup.cfg - DSD - -2007-11-09 Applied Martin Teichmann's patch 1828813: a QPainter is used in - paintEvent, which has to be destroyed using the method end(). If - matplotlib raises an exception before the call to end - and it - does if you feed it with bad data - this method end() is never - called and Qt4 will start spitting error messages - -2007-11-09 Moved pyparsing back into matplotlib namespace. Don't use - system pyparsing, API is too variable from one release - to the next - DSD +2007-11-27 + Released 0.91.0 at revision 4478 + +2007-11-13 + All backends now support writing to a file-like object, not just a regular + file. savefig() can be passed a file-like object in place of a file path. + - MGD + +2007-11-13 + Improved the default backend selection at build time: SVG -> Agg -> TkAgg + -> WXAgg -> GTK -> GTKAgg. The last usable backend in this progression will + be chosen in the default config file. If a backend is defined in setup.cfg, + that will be the default backend - DSD + +2007-11-13 + Improved creation of default config files at build time for traited config + package - DSD + +2007-11-12 + Exposed all the build options in setup.cfg. These options are read into a + dict called "options" by setupext.py. Also, added "-mpl" tags to the + version strings for packages provided by matplotlib. Versions provided by + mpl will be identified and updated on subsequent installs - DSD + +2007-11-12 + Added support for STIX fonts. A new rcParam, mathtext.fontset, can be used + to choose between: + + 'cm' + The TeX/LaTeX Computer Modern fonts + 'stix' + The STIX fonts (see stixfonts.org) + 'stixsans' + The STIX fonts, using sans-serif glyphs by default + 'custom' + A generic Unicode font, in which case the mathtext font must be + specified using mathtext.bf, mathtext.it, mathtext.sf etc. + + Added a new example, stix_fonts_demo.py to show how to access different + fonts and unusual symbols. - MGD + +2007-11-12 + Options to disable building backend extension modules moved from setup.py + to setup.cfg - DSD + +2007-11-09 + Applied Martin Teichmann's patch 1828813: a QPainter is used in paintEvent, + which has to be destroyed using the method end(). If matplotlib raises an + exception before the call to end - and it does if you feed it with bad data + - this method end() is never called and Qt4 will start spitting error + messages + +2007-11-09 + Moved pyparsing back into matplotlib namespace. Don't use system pyparsing, + API is too variable from one release to the next - DSD + +2007-11-08 + Made pylab use straight numpy instead of oldnumeric by default - EF + +2007-11-08 + Added additional record array utilities to mlab (rec2excel, rec2gtk, + rec_join, rec_append_field, rec_drop_field) - JDH + +2007-11-08 + Updated pytz to version 2007g - DSD -2007-11-08 Made pylab use straight numpy instead of oldnumeric - by default - EF +2007-11-08 + Updated pyparsing to version 1.4.8 - DSD + +2007-11-08 + Moved csv2rec to recutils and added other record array utilities - JDH + +2007-11-08 + If available, use existing pyparsing installation - DSD + +2007-11-07 + Removed old enthought.traits from lib/matplotlib, added Gael Varoquaux's + enthought.traits-2.6b1, which is stripped of setuptools. The package is + installed to site-packages if not already available - DSD + +2007-11-05 + Added easy access to minor tick properties; slight mod of patch by Pierre + G-M - EF + +2007-11-02 + Committed Phil Thompson's patch 1599876, fixes to Qt4Agg backend and qt4 + blitting demo - DSD + +2007-11-02 + Committed Phil Thompson's patch 1599876, fixes to Qt4Agg backend and qt4 + blitting demo - DSD + +2007-10-31 + Made log color scale easier to use with contourf; automatic level + generation now works. - EF + +2007-10-29 + TRANSFORMS REFACTORING + + The primary goal of this refactoring was to make it easier to extend + matplotlib to support new kinds of projections. This is primarily an + internal improvement, and the possible user-visible changes it allows are + yet to come. + + The transformation framework was completely rewritten in Python (with + Numpy). This will make it easier to add news kinds of transformations + without writing C/C++ code. + + Transforms are composed into a 'transform tree', made of transforms whose + value depends on other transforms (their children). When the contents of + children change, their parents are automatically updated to reflect those + changes. To do this an "invalidation" method is used: when children + change, all of their ancestors are marked as "invalid". When the value of + a transform is accessed at a later time, its value is recomputed only if it + is invalid, otherwise a cached value may be used. This prevents + unnecessary recomputations of transforms, and contributes to better + interactive performance. + + The framework can be used for both affine and non-affine transformations. + However, for speed, we want use the backend renderers to perform affine + transformations whenever possible. Therefore, it is possible to perform + just the affine or non-affine part of a transformation on a set of data. + The affine is always assumed to occur after the non-affine. For any + transform:: + + full transform == non-affine + affine + + Much of the drawing has been refactored in terms of compound paths. + Therefore, many methods have been removed from the backend interface and + replaced with a handful to draw compound paths. This will make updating + the backends easier, since there is less to update. It also should make + the backends more consistent in terms of functionality. + + User visible changes: + + - POLAR PLOTS: Polar plots are now interactively zoomable, and the r-axis + labels can be interactively rotated. Straight line segments are now + interpolated to follow the curve of the r-axis. + + - Non-rectangular clipping works in more backends and with more types of + objects. + + - Sharing an axis across figures is now done in exactly the same way as + sharing an axis between two axes in the same figure:: + + fig1 = figure() + fig2 = figure() + + ax1 = fig1.add_subplot(111) + ax2 = fig2.add_subplot(111, sharex=ax1, sharey=ax1) -2007-11-08 Added additional record array utilities to mlab (rec2excel, - rec2gtk, rec_join, rec_append_field, rec_drop_field) - JDH + - linestyles now include steps-pre, steps-post and steps-mid. The old step + still works and is equivalent to step-pre. -2007-11-08 Updated pytz to version 2007g - DSD + - Multiple line styles may be provided to a collection. -2007-11-08 Updated pyparsing to version 1.4.8 - DSD + See API_CHANGES for more low-level information about this refactoring. -2007-11-08 Moved csv2rec to recutils and added other record array - utilities - JDH +2007-10-24 + Added ax kwarg to Figure.colorbar and pyplot.colorbar - EF -2007-11-08 If available, use existing pyparsing installation - DSD +2007-10-19 + Removed a gsave/grestore pair surrounding _draw_ps, which was causing a + loss graphics state info (see "EPS output problem - scatter & edgecolors" + on mpl-dev, 2007-10-29) - DSD -2007-11-07 Removed old enthought.traits from lib/matplotlib, added - Gael Varoquaux's enthought.traits-2.6b1, which is stripped - of setuptools. The package is installed to site-packages - if not already available - DSD +2007-10-15 + Fixed a bug in patches.Ellipse that was broken for aspect='auto'. Scale + free ellipses now work properly for equal and auto on Agg and PS, and they + fall back on a polygonal approximation for nonlinear transformations until + we convince oursleves that the spline approximation holds for nonlinear + transformations. Added unit/ellipse_compare.py to compare spline with + vertex approx for both aspects. JDH + +2007-10-05 + remove generator expressions from texmanager and mpltraits. generator + expressions are not supported by python-2.3 - DSD + +2007-10-01 + Made matplotlib.use() raise an exception if called after backends has been + imported. - EF + +2007-09-30 + Modified update* methods of Bbox and Interval so they work with reversed + axes. Prior to this, trying to set the ticks on a reversed axis failed + with an uninformative error message. - EF + +2007-09-30 + Applied patches to axes3d to fix index error problem - EF + +2007-09-24 + Applied Eike Welk's patch reported on mpl-dev on 2007-09-22 Fixes a bug + with multiple plot windows in the qt backend, ported the changes to + backend_qt4 as well - DSD + +2007-09-21 + Changed cbook.reversed to yield the same result as the python reversed + builtin - DSD + +2007-09-13 + The usetex support in the pdf backend is more usable now, so I am enabling + it. - JKS + +2007-09-12 + Fixed a Axes.bar unit bug - JDH + +2007-09-10 + Made skiprows=1 the default on csv2rec - JDH + +2007-09-09 + Split out the plotting part of pylab and put it in pyplot.py; removed + numerix from the remaining pylab.py, which imports everything from + pyplot.py. The intention is that apart from cleanups, the result of + importing from pylab is nearly unchanged, but there is the new alternative + of importing from pyplot to get the state-engine graphics without all the + numeric functions. Numpified examples; deleted two that were obsolete; + modified some to use pyplot. - EF -2007-11-05 Added easy access to minor tick properties; slight mod - of patch by Pierre G-M - EF +2007-09-08 + Eliminated gd and paint backends - EF -2007-11-02 Committed Phil Thompson's patch 1599876, fixes to Qt4Agg - backend and qt4 blitting demo - DSD +2007-09-06 + .bmp file format is now longer an alias for .raw -2007-11-02 Committed Phil Thompson's patch 1599876, fixes to Qt4Agg - backend and qt4 blitting demo - DSD +2007-09-07 + Added clip path support to pdf backend. - JKS -2007-10-31 Made log color scale easier to use with contourf; - automatic level generation now works. - EF +2007-09-06 + Fixed a bug in the embedding of Type 1 fonts in PDF. Now it doesn't crash + Preview.app. - JKS -2007-10-29 TRANSFORMS REFACTORING +2007-09-06 + Refactored image saving code so that all GUI backends can save most image + types. See FILETYPES for a matrix of backends and their supported file + types. Backend canvases should no longer write their own print_figure() + method -- instead they should write a print_xxx method for each filetype + they can output and add an entry to their class-scoped filetypes + dictionary. - MGD - The primary goal of this refactoring was to make it easier - to extend matplotlib to support new kinds of projections. - This is primarily an internal improvement, and the possible - user-visible changes it allows are yet to come. +2007-09-05 + Fixed Qt version reporting in setupext.py - DSD - The transformation framework was completely rewritten in - Python (with Numpy). This will make it easier to add news - kinds of transformations without writing C/C++ code. +2007-09-04 + Embedding Type 1 fonts in PDF, and thus usetex support via dviread, sort of + works. To test, enable it by renaming _draw_tex to draw_tex. - JKS - Transforms are composed into a 'transform tree', made of - transforms whose value depends on other transforms (their - children). When the contents of children change, their - parents are automatically updated to reflect those changes. - To do this an "invalidation" method is used: when children - change, all of their ancestors are marked as "invalid". - When the value of a transform is accessed at a later time, - its value is recomputed only if it is invalid, otherwise a - cached value may be used. This prevents unnecessary - recomputations of transforms, and contributes to better - interactive performance. +2007-09-03 + Added ability of errorbar show limits via caret or arrowhead ends on the + bars; patch by Manual Metz. - EF - The framework can be used for both affine and non-affine - transformations. However, for speed, we want use the - backend renderers to perform affine transformations - whenever possible. Therefore, it is possible to perform - just the affine or non-affine part of a transformation on a - set of data. The affine is always assumed to occur after - the non-affine. For any transform: +2007-09-03 + Created type1font.py, added features to AFM and FT2Font (see API_CHANGES), + started work on embedding Type 1 fonts in pdf files. - JKS - full transform == non-affine + affine +2007-09-02 + Continued work on dviread.py. - JKS - Much of the drawing has been refactored in terms of - compound paths. Therefore, many methods have been removed - from the backend interface and replaced with a handful to - draw compound paths. This will make updating the backends - easier, since there is less to update. It also should make - the backends more consistent in terms of functionality. +2007-08-16 + Added a set_extent method to AxesImage, allow data extent to be modified + after initial call to imshow - DSD - User visible changes: +2007-08-14 + Fixed a bug in pyqt4 subplots-adjust. Thanks to Xavier Gnata for the report + and suggested fix - DSD - - POLAR PLOTS: Polar plots are now interactively zoomable, - and the r-axis labels can be interactively rotated. - Straight line segments are now interpolated to follow the - curve of the r-axis. +2007-08-13 + Use pickle to cache entire fontManager; change to using font_manager + module-level function findfont wrapper for the fontManager.findfont method + - EF - - Non-rectangular clipping works in more backends and with - more types of objects. +2007-08-11 + Numpification and cleanup of mlab.py and some examples - EF - - Sharing an axis across figures is now done in exactly - the same way as sharing an axis between two axes in the - same figure:: +2007-08-06 + Removed mathtext2 - fig1 = figure() - fig2 = figure() +2007-07-31 + Refactoring of distutils scripts. - ax1 = fig1.add_subplot(111) - ax2 = fig2.add_subplot(111, sharex=ax1, sharey=ax1) + - Will not fail on the entire build if an optional Python package (e.g., + Tkinter) is installed but its development headers are not (e.g., + tk-devel). Instead, it will continue to build all other extensions. + - Provide an overview at the top of the output to display what dependencies + and their versions were found, and (by extension) what will be built. + - Use pkg-config, when available, to find freetype2, since this was broken + on Mac OS-X when using MacPorts in a non- standard location. - - linestyles now include steps-pre, steps-post and - steps-mid. The old step still works and is equivalent to - step-pre. +2007-07-30 + Reorganized configuration code to work with traited config objects. The new + config system is located in the matplotlib.config package, but it is + disabled by default. To enable it, set NEWCONFIG=True in + matplotlib.__init__.py. The new configuration system will still use the + old matplotlibrc files by default. To switch to the experimental, traited + configuration, set USE_TRAITED_CONFIG=True in config.__init__.py. - - Multiple line styles may be provided to a collection. +2007-07-29 + Changed default pcolor shading to flat; added aliases to make collection + kwargs agree with setter names, so updating works; related minor cleanups. + Removed quiver_classic, scatter_classic, pcolor_classic. - EF - See API_CHANGES for more low-level information about this - refactoring. +2007-07-26 + Major rewrite of mathtext.py, using the TeX box layout model. -2007-10-24 Added ax kwarg to Figure.colorbar and pyplot.colorbar - EF + There is one (known) backward incompatible change. The font commands + (\cal, \rm, \it, \tt) now behave as TeX does: they are in effect until the + next font change command or the end of the grouping. Therefore uses of + $\cal{R}$ should be changed to ${\cal R}$. Alternatively, you may use the + new LaTeX-style font commands (\mathcal, \mathrm, \mathit, \mathtt) which + do affect the following group, e.g., $\mathcal{R}$. -2007-10-19 Removed a gsave/grestore pair surrounding _draw_ps, which - was causing a loss graphics state info (see "EPS output - problem - scatter & edgecolors" on mpl-dev, 2007-10-29) - - DSD + Other new features include: -2007-10-15 Fixed a bug in patches.Ellipse that was broken for - aspect='auto'. Scale free ellipses now work properly for - equal and auto on Agg and PS, and they fall back on a - polygonal approximation for nonlinear transformations until - we convince oursleves that the spline approximation holds - for nonlinear transformations. Added - unit/ellipse_compare.py to compare spline with vertex - approx for both aspects. JDH + - Math may be interspersed with non-math text. Any text with an even + number of $'s (non-escaped) will be sent to the mathtext parser for + layout. -2007-10-05 remove generator expressions from texmanager and mpltraits. - generator expressions are not supported by python-2.3 - DSD + - Sub/superscripts are less likely to accidentally overlap. -2007-10-01 Made matplotlib.use() raise an exception if called after - backends has been imported. - EF + - Support for sub/superscripts in either order, e.g., $x^i_j$ and $x_j^i$ + are equivalent. -2007-09-30 Modified update* methods of Bbox and Interval so they - work with reversed axes. Prior to this, trying to - set the ticks on a reversed axis failed with an - uninformative error message. - EF - -2007-09-30 Applied patches to axes3d to fix index error problem - EF - -2007-09-24 Applied Eike Welk's patch reported on mpl-dev on 2007-09-22 - Fixes a bug with multiple plot windows in the qt backend, - ported the changes to backend_qt4 as well - DSD - -2007-09-21 Changed cbook.reversed to yield the same result as the - python reversed builtin - DSD - -2007-09-13 The usetex support in the pdf backend is more usable now, - so I am enabling it. - JKS - -2007-09-12 Fixed a Axes.bar unit bug - JDH - -2007-09-10 Made skiprows=1 the default on csv2rec - JDH - -2007-09-09 Split out the plotting part of pylab and put it in - pyplot.py; removed numerix from the remaining pylab.py, - which imports everything from pyplot.py. The intention - is that apart from cleanups, the result of importing - from pylab is nearly unchanged, but there is the - new alternative of importing from pyplot to get - the state-engine graphics without all the numeric - functions. - Numpified examples; deleted two that were obsolete; - modified some to use pyplot. - EF + - Double sub/superscripts (e.g., $x_i_j$) are considered ambiguous and + raise an exception. Use braces to disambiguate. -2007-09-08 Eliminated gd and paint backends - EF + - $\frac{x}{y}$ can be used for displaying fractions. -2007-09-06 .bmp file format is now longer an alias for .raw + - $\sqrt[3]{x}$ can be used to display the radical symbol with a root + number and body. -2007-09-07 Added clip path support to pdf backend. - JKS + - $\left(\frac{x}{y}\right)$ may be used to create parentheses and other + delimiters that automatically resize to the height of their contents. -2007-09-06 Fixed a bug in the embedding of Type 1 fonts in PDF. - Now it doesn't crash Preview.app. - JKS + - Spacing around operators etc. is now generally more like TeX. -2007-09-06 Refactored image saving code so that all GUI backends can - save most image types. See FILETYPES for a matrix of - backends and their supported file types. - Backend canvases should no longer write their own print_figure() - method -- instead they should write a print_xxx method for - each filetype they can output and add an entry to their - class-scoped filetypes dictionary. - MGD + - Added support (and fonts) for boldface (\bf) and sans-serif (\sf) + symbols. -2007-09-05 Fixed Qt version reporting in setupext.py - DSD + - Log-like function name shortcuts are supported. For example, $\sin(x)$ + may be used instead of ${\rm sin}(x)$ -2007-09-04 Embedding Type 1 fonts in PDF, and thus usetex support - via dviread, sort of works. To test, enable it by - renaming _draw_tex to draw_tex. - JKS + - Limited use of kerning for the easy case (same font) -2007-09-03 Added ability of errorbar show limits via caret or - arrowhead ends on the bars; patch by Manual Metz. - EF + Behind the scenes, the pyparsing.py module used for doing the math parsing + was updated to the latest stable version (1.4.6). A lot of duplicate code + was refactored out of the Font classes. -2007-09-03 Created type1font.py, added features to AFM and FT2Font - (see API_CHANGES), started work on embedding Type 1 fonts - in pdf files. - JKS + - MGD -2007-09-02 Continued work on dviread.py. - JKS +2007-07-19 + completed numpification of most trivial cases - NN -2007-08-16 Added a set_extent method to AxesImage, allow data extent - to be modified after initial call to imshow - DSD +2007-07-19 + converted non-numpy relicts throughout the code - NN -2007-08-14 Fixed a bug in pyqt4 subplots-adjust. Thanks to - Xavier Gnata for the report and suggested fix - DSD +2007-07-19 + replaced the Python code in numerix/ by a minimal wrapper around numpy that + explicitly mentions all symbols that need to be addressed for further + numpification - NN -2007-08-13 Use pickle to cache entire fontManager; change to using - font_manager module-level function findfont wrapper for - the fontManager.findfont method - EF +2007-07-18 + make usetex respect changes to rcParams. texmanager used to only configure + itself when it was created, now it reconfigures when rcParams are changed. + Thank you Alexander Schmolck for contributing a patch - DSD -2007-08-11 Numpification and cleanup of mlab.py and some examples - EF +2007-07-17 + added validation to setting and changing rcParams - DSD -2007-08-06 Removed mathtext2 +2007-07-17 + bugfix segfault in transforms module. Thanks Ben North for the patch. - ADS -2007-07-31 Refactoring of distutils scripts. - - Will not fail on the entire build if an optional Python - package (e.g., Tkinter) is installed but its development - headers are not (e.g., tk-devel). Instead, it will - continue to build all other extensions. - - Provide an overview at the top of the output to display - what dependencies and their versions were found, and (by - extension) what will be built. - - Use pkg-config, when available, to find freetype2, since - this was broken on Mac OS-X when using MacPorts in a non- - standard location. +2007-07-16 + clean up some code in ticker.ScalarFormatter, use unicode to render + multiplication sign in offset ticklabel - DSD -2007-07-30 Reorganized configuration code to work with traited config - objects. The new config system is located in the - matplotlib.config package, but it is disabled by default. - To enable it, set NEWCONFIG=True in matplotlib.__init__.py. - The new configuration system will still use the old - matplotlibrc files by default. To switch to the experimental, - traited configuration, set USE_TRAITED_CONFIG=True in - config.__init__.py. +2007-07-16 + fixed a formatting bug in ticker.ScalarFormatter's scientific notation + (10^0 was being rendered as 10 in some cases) - DSD -2007-07-29 Changed default pcolor shading to flat; added aliases - to make collection kwargs agree with setter names, so - updating works; related minor cleanups. - Removed quiver_classic, scatter_classic, pcolor_classic. - EF +2007-07-13 + Add MPL_isfinite64() and MPL_isinf64() for testing doubles in (the now + misnamed) MPL_isnan.h. - ADS -2007-07-26 Major rewrite of mathtext.py, using the TeX box layout model. +2007-07-13 + The matplotlib._isnan module removed (use numpy.isnan) - ADS - There is one (known) backward incompatible change. The - font commands (\cal, \rm, \it, \tt) now behave as TeX does: - they are in effect until the next font change command or - the end of the grouping. Therefore uses of $\cal{R}$ - should be changed to ${\cal R}$. Alternatively, you may - use the new LaTeX-style font commands (\mathcal, \mathrm, - \mathit, \mathtt) which do affect the following group, - e.g., $\mathcal{R}$. +2007-07-13 + Some minor cleanups in _transforms.cpp - ADS - Other new features include: +2007-07-13 + Removed the rest of the numerix extension code detritus, numpified axes.py, + and cleaned up the imports in axes.py - JDH - - Math may be interspersed with non-math text. Any text - with an even number of $'s (non-escaped) will be sent to - the mathtext parser for layout. +2007-07-13 + Added legend.loc as configurable option that could in future default to + 'best'. - NN - - Sub/superscripts are less likely to accidentally overlap. +2007-07-12 + Bugfixes in mlab.py to coerce inputs into numpy arrays. -ADS - - Support for sub/superscripts in either order, e.g., $x^i_j$ - and $x_j^i$ are equivalent. +2007-07-11 + Added linespacing kwarg to text.Text - EF - - Double sub/superscripts (e.g., $x_i_j$) are considered - ambiguous and raise an exception. Use braces to disambiguate. +2007-07-11 + Added code to store font paths in SVG files. - MGD - - $\frac{x}{y}$ can be used for displaying fractions. +2007-07-10 + Store subset of TTF font as a Type 3 font in PDF files. - MGD - - $\sqrt[3]{x}$ can be used to display the radical symbol - with a root number and body. +2007-07-09 + Store subset of TTF font as a Type 3 font in PS files. - MGD - - $\left(\frac{x}{y}\right)$ may be used to create - parentheses and other delimiters that automatically - resize to the height of their contents. +2007-07-09 + Applied Paul's pick restructure pick and add pickers, sourceforge patch + 1749829 - JDH - - Spacing around operators etc. is now generally more like - TeX. +2007-07-09 + Applied Allan's draw_lines agg optimization. JDH - - Added support (and fonts) for boldface (\bf) and - sans-serif (\sf) symbols. +2007-07-08 + Applied Carl Worth's patch to fix cairo draw_arc - SC - - Log-like function name shortcuts are supported. For - example, $\sin(x)$ may be used instead of ${\rm sin}(x)$ +2007-07-07 + fixed bug 1712099: xpdf distiller on windows - DSD - - Limited use of kerning for the easy case (same font) +2007-06-30 + Applied patches to tkagg, gtk, and wx backends to reduce memory leakage. + Patches supplied by Mike Droettboom; see tracker numbers 1745400, 1745406, + 1745408. Also made unit/memleak_gui.py more flexible with command-line + options. - EF - Behind the scenes, the pyparsing.py module used for doing - the math parsing was updated to the latest stable version - (1.4.6). A lot of duplicate code was refactored out of the - Font classes. +2007-06-30 + Split defaultParams into separate file rcdefaults (together with validation + code). Some heavy refactoring was necessary to do so, but the overall + behavior should be the same as before. - NN - - MGD +2007-06-27 + Added MPLCONFIGDIR for the default location for mpl data and configuration. + useful for some apache installs where HOME is not writable. Tried to clean + up the logic in _get_config_dir to support non-writable HOME where are + writable HOME/.matplotlib already exists - JDH -2007-07-19 completed numpification of most trivial cases - NN +2007-06-27 + Fixed locale bug reported at + \http://sourceforge.net/tracker/index.php?func=detail&aid=1744154&group_id=80706&atid=560720 + by adding a cbook.unicode_safe function - JDH -2007-07-19 converted non-numpy relicts throughout the code - NN +2007-06-27 + Applied Micheal's tk savefig bugfix described at + \http://sourceforge.net/tracker/index.php?func=detail&aid=1716732&group_id=80706&atid=560720 + Thanks Michael! -2007-07-19 replaced the Python code in numerix/ by a minimal wrapper around - numpy that explicitly mentions all symbols that need to be - addressed for further numpification - NN +2007-06-27 + Patch for get_py2exe_datafiles() to work with new directory layout. (Thanks + Tocer and also Werner Bruhin.) -ADS -2007-07-18 make usetex respect changes to rcParams. texmanager used to - only configure itself when it was created, now it - reconfigures when rcParams are changed. Thank you Alexander - Schmolck for contributing a patch - DSD +2007-06-27 + Added a scroll event to the mpl event handling system and implemented it + for backends GTK* -- other backend users/developers/maintainers, please add + support for your backend. - JDH -2007-07-17 added validation to setting and changing rcParams - DSD +2007-06-25 + Changed default to clip=False in colors.Normalize; modified ColorbarBase + for easier colormap display - EF -2007-07-17 bugfix segfault in transforms module. Thanks Ben North for - the patch. - ADS +2007-06-13 + Added maskedarray option to rc, numerix - EF -2007-07-16 clean up some code in ticker.ScalarFormatter, use unicode to - render multiplication sign in offset ticklabel - DSD +2007-06-11 + Python 2.5 compatibility fix for mlab.py - EF -2007-07-16 fixed a formatting bug in ticker.ScalarFormatter's scientific - notation (10^0 was being rendered as 10 in some cases) - DSD +2007-06-10 + In matplotlibrc file, use 'dashed' | 'solid' instead of a pair of floats + for contour.negative_linestyle - EF -2007-07-13 Add MPL_isfinite64() and MPL_isinf64() for testing - doubles in (the now misnamed) MPL_isnan.h. - ADS +2007-06-08 + Allow plot and fill fmt string to be any mpl string colorspec - EF -2007-07-13 The matplotlib._isnan module removed (use numpy.isnan) - ADS +2007-06-08 + Added gnuplot file plotfile function to pylab -- see + examples/plotfile_demo.py - JDH -2007-07-13 Some minor cleanups in _transforms.cpp - ADS +2007-06-07 + Disable build of numarray and Numeric extensions for internal MPL use and + the numerix layer. - ADS -2007-07-13 Removed the rest of the numerix extension code detritus, - numpified axes.py, and cleaned up the imports in axes.py - - JDH +2007-06-07 + Added csv2rec to matplotlib.mlab to support automatically converting csv + files to record arrays using type introspection, and turned on native + datetime support using the new units support in matplotlib.dates. See + examples/loadrec.py ! JDH -2007-07-13 Added legend.loc as configurable option that could in - future default to 'best'. - NN +2007-06-07 + Simplified internal code of _auto_legend_data - NN -2007-07-12 Bugfixes in mlab.py to coerce inputs into numpy arrays. -ADS +2007-06-04 + Added labeldistance arg to Axes.pie to control the raidal distance of the + wedge labels - JDH -2007-07-11 Added linespacing kwarg to text.Text - EF - -2007-07-11 Added code to store font paths in SVG files. - MGD - -2007-07-10 Store subset of TTF font as a Type 3 font in PDF files. - MGD - -2007-07-09 Store subset of TTF font as a Type 3 font in PS files. - MGD - -2007-07-09 Applied Paul's pick restructure pick and add pickers, - sourceforge patch 1749829 - JDH - - -2007-07-09 Applied Allan's draw_lines agg optimization. JDH - - -2007-07-08 Applied Carl Worth's patch to fix cairo draw_arc - SC - -2007-07-07 fixed bug 1712099: xpdf distiller on windows - DSD - -2007-06-30 Applied patches to tkagg, gtk, and wx backends to reduce - memory leakage. Patches supplied by Mike Droettboom; - see tracker numbers 1745400, 1745406, 1745408. - Also made unit/memleak_gui.py more flexible with - command-line options. - EF - -2007-06-30 Split defaultParams into separate file rcdefaults (together with - validation code). Some heavy refactoring was necessary to do so, - but the overall behavior should be the same as before. - NN - -2007-06-27 Added MPLCONFIGDIR for the default location for mpl data - and configuration. useful for some apache installs where - HOME is not writable. Tried to clean up the logic in - _get_config_dir to support non-writable HOME where are - writable HOME/.matplotlib already exists - JDH - -2007-06-27 Fixed locale bug reported at - \http://sourceforge.net/tracker/index.php?func=detail&aid=1744154&group_id=80706&atid=560720 - by adding a cbook.unicode_safe function - JDH - -2007-06-27 Applied Micheal's tk savefig bugfix described at - \http://sourceforge.net/tracker/index.php?func=detail&aid=1716732&group_id=80706&atid=560720 - Thanks Michael! - - -2007-06-27 Patch for get_py2exe_datafiles() to work with new directory - layout. (Thanks Tocer and also Werner Bruhin.) -ADS - - -2007-06-27 Added a scroll event to the mpl event handling system and - implemented it for backends GTK* -- other backend - users/developers/maintainers, please add support for your - backend. - JDH - -2007-06-25 Changed default to clip=False in colors.Normalize; - modified ColorbarBase for easier colormap display - EF - -2007-06-13 Added maskedarray option to rc, numerix - EF - -2007-06-11 Python 2.5 compatibility fix for mlab.py - EF - -2007-06-10 In matplotlibrc file, use 'dashed' | 'solid' instead - of a pair of floats for contour.negative_linestyle - EF - -2007-06-08 Allow plot and fill fmt string to be any mpl string - colorspec - EF - -2007-06-08 Added gnuplot file plotfile function to pylab -- see - examples/plotfile_demo.py - JDH - -2007-06-07 Disable build of numarray and Numeric extensions for - internal MPL use and the numerix layer. - ADS - -2007-06-07 Added csv2rec to matplotlib.mlab to support automatically - converting csv files to record arrays using type - introspection, and turned on native datetime support using - the new units support in matplotlib.dates. See - examples/loadrec.py ! JDH - -2007-06-07 Simplified internal code of _auto_legend_data - NN - -2007-06-04 Added labeldistance arg to Axes.pie to control the raidal - distance of the wedge labels - JDH - -2007-06-03 Turned mathtext in SVG into single with multiple - objects (easier to edit in inkscape). - NN +2007-06-03 + Turned mathtext in SVG into single with multiple objects + (easier to edit in inkscape). - NN ---------------------------- -2007-06-02 Released 0.90.1 at revision 3352 - -2007-06-02 Display only meaningful labels when calling legend() - without args. - NN - -2007-06-02 Have errorbar follow the color cycle even if line is not plotted. - Suppress plotting of errorbar caps for capsize=0. - NN - -2007-06-02 Set markers to same alpha value as line. - NN - -2007-06-02 Fix mathtext position in svg backend. - NN - -2007-06-01 Deprecate Numeric and numarray for use as numerix. Props to - Travis -- job well done. - ADS - -2007-05-18 Added LaTeX unicode support. Enable with the - 'text.latex.unicode' rcParam. This requires the ucs and - inputenc LaTeX packages. - ADS - -2007-04-23 Fixed some problems with polar -- added general polygon - clipping to clip the lines and grids to the polar axes. - Added support for set_rmax to easily change the maximum - radial grid. Added support for polar legend - JDH - -2007-04-16 Added Figure.autofmt_xdate to handle adjusting the bottom - and rotating the tick labels for date plots when the ticks - often overlap - JDH - -2007-04-09 Beginnings of usetex support for pdf backend. -JKS - -2007-04-07 Fixed legend/LineCollection bug. Added label support - to collections. - EF - -2007-04-06 Removed deprecated support for a float value as a gray-scale; - now it must be a string, like '0.5'. Added alpha kwarg to - ColorConverter.to_rgba_list. - EF - -2007-04-06 Fixed rotation of ellipses in pdf backend - (sf bug #1690559) -JKS - -2007-04-04 More matshow tweaks; documentation updates; new method - set_bounds() for formatters and locators. - EF +2007-06-02 + Released 0.90.1 at revision 3352 -2007-04-02 Fixed problem with imshow and matshow of integer arrays; - fixed problems with changes to color autoscaling. - EF +2007-06-02 + Display only meaningful labels when calling legend() without args. - NN -2007-04-01 Made image color autoscaling work correctly with - a tracking colorbar; norm.autoscale now scales - unconditionally, while norm.autoscale_None changes - only None-valued vmin, vmax. - EF +2007-06-02 + Have errorbar follow the color cycle even if line is not plotted. Suppress + plotting of errorbar caps for capsize=0. - NN -2007-03-31 Added a qt-based subplot-adjustment dialog - DSD +2007-06-02 + Set markers to same alpha value as line. - NN -2007-03-30 Fixed a bug in backend_qt4, reported on mpl-dev - DSD +2007-06-02 + Fix mathtext position in svg backend. - NN -2007-03-26 Removed colorbar_classic from figure.py; fixed bug in - Figure.clf() in which _axobservers was not getting - cleared. Modernization and cleanups. - EF +2007-06-01 + Deprecate Numeric and numarray for use as numerix. Props to Travis -- job + well done. - ADS -2007-03-26 Refactored some of the units support -- units now live in - the respective x and y Axis instances. See also - API_CHANGES for some alterations to the conversion - interface. JDH +2007-05-18 + Added LaTeX unicode support. Enable with the 'text.latex.unicode' rcParam. + This requires the ucs and inputenc LaTeX packages. - ADS -2007-03-25 Fix masked array handling in quiver.py for numpy. (Numeric - and numarray support for masked arrays is broken in other - ways when using quiver. I didn't pursue that.) - ADS +2007-04-23 + Fixed some problems with polar -- added general polygon clipping to clip + the lines and grids to the polar axes. Added support for set_rmax to + easily change the maximum radial grid. Added support for polar legend - + JDH -2007-03-23 Made font_manager.py close opened files. - JKS +2007-04-16 + Added Figure.autofmt_xdate to handle adjusting the bottom and rotating the + tick labels for date plots when the ticks often overlap - JDH -2007-03-22 Made imshow default extent match matshow - EF +2007-04-09 + Beginnings of usetex support for pdf backend. -JKS -2007-03-22 Some more niceties for xcorr -- a maxlags option, normed - now works for xcorr as well as axorr, usevlines is - supported, and a zero correlation hline is added. See - examples/xcorr_demo.py. Thanks Sameer for the patch. - - JDH +2007-04-07 + Fixed legend/LineCollection bug. Added label support to collections. - EF -2007-03-21 Axes.vlines and Axes.hlines now create and returns a - LineCollection, not a list of lines. This is much faster. - The kwarg signature has changed, so consult the docs. - Modified Axes.errorbar which uses vlines and hlines. See - API_CHANGES; the return signature for these three functions - is now different +2007-04-06 + Removed deprecated support for a float value as a gray-scale; now it must + be a string, like '0.5'. Added alpha kwarg to ColorConverter.to_rgba_list. + - EF -2007-03-20 Refactored units support and added new examples - JDH +2007-04-06 + Fixed rotation of ellipses in pdf backend (sf bug #1690559) -JKS -2007-03-19 Added Mike's units patch - JDH +2007-04-04 + More matshow tweaks; documentation updates; new method set_bounds() for + formatters and locators. - EF -2007-03-18 Matshow as an Axes method; test version matshow1() in - pylab; added 'integer' Boolean kwarg to MaxNLocator - initializer to force ticks at integer locations. - EF +2007-04-02 + Fixed problem with imshow and matshow of integer arrays; fixed problems + with changes to color autoscaling. - EF -2007-03-17 Preliminary support for clipping to paths agg - JDH +2007-04-01 + Made image color autoscaling work correctly with a tracking colorbar; + norm.autoscale now scales unconditionally, while norm.autoscale_None + changes only None-valued vmin, vmax. - EF -2007-03-17 Text.set_text() accepts anything convertible with '%s' - EF +2007-03-31 + Added a qt-based subplot-adjustment dialog - DSD -2007-03-14 Add masked-array support to hist. - EF +2007-03-30 + Fixed a bug in backend_qt4, reported on mpl-dev - DSD -2007-03-03 Change barh to take a kwargs dict and pass it to bar. - Fixes sf bug #1669506. +2007-03-26 + Removed colorbar_classic from figure.py; fixed bug in Figure.clf() in which + _axobservers was not getting cleared. Modernization and cleanups. - EF -2007-03-02 Add rc parameter pdf.inheritcolor, which disables all - color-setting operations in the pdf backend. The idea is - that you include the resulting file in another program and - set the colors (both stroke and fill color) there, so you - can use the same pdf file for e.g., a paper and a - presentation and have them in the surrounding color. You - will probably not want to draw figure and axis frames in - that case, since they would be filled in the same color. - JKS +2007-03-26 + Refactored some of the units support -- units now live in the respective x + and y Axis instances. See also API_CHANGES for some alterations to the + conversion interface. JDH -2007-02-26 Prevent building _wxagg.so with broken Mac OS X wxPython. - ADS +2007-03-25 + Fix masked array handling in quiver.py for numpy. (Numeric and numarray + support for masked arrays is broken in other ways when using quiver. I + didn't pursue that.) - ADS -2007-02-23 Require setuptools for Python 2.3 - ADS +2007-03-23 + Made font_manager.py close opened files. - JKS -2007-02-22 WXAgg accelerator updates - KM - WXAgg's C++ accelerator has been fixed to use the correct wxBitmap - constructor. +2007-03-22 + Made imshow default extent match matshow - EF - The backend has been updated to use new wxPython functionality to - provide fast blit() animation without the C++ accelerator. This - requires wxPython 2.8 or later. Previous versions of wxPython can - use the C++ acclerator or the old pure Python routines. +2007-03-22 + Some more niceties for xcorr -- a maxlags option, normed now works for + xcorr as well as axorr, usevlines is supported, and a zero correlation + hline is added. See examples/xcorr_demo.py. Thanks Sameer for the patch. + - JDH - setup.py no longer builds the C++ accelerator when wxPython >= 2.8 - is present. +2007-03-21 + Axes.vlines and Axes.hlines now create and returns a LineCollection, not a + list of lines. This is much faster. The kwarg signature has changed, so + consult the docs. Modified Axes.errorbar which uses vlines and hlines. + See API_CHANGES; the return signature for these three functions is now + different - The blit() method is now faster regardless of which agg/wxPython - conversion routines are used. +2007-03-20 + Refactored units support and added new examples - JDH -2007-02-21 Applied the PDF backend patch by Nicolas Grilly. - This impacts several files and directories in matplotlib: +2007-03-19 + Added Mike's units patch - JDH - - Created the directory lib/matplotlib/mpl-data/fonts/pdfcorefonts, - holding AFM files for the 14 PDF core fonts. These fonts are - embedded in every PDF viewing application. +2007-03-18 + Matshow as an Axes method; test version matshow1() in pylab; added + 'integer' Boolean kwarg to MaxNLocator initializer to force ticks at + integer locations. - EF - - setup.py: Added the directory pdfcorefonts to package_data. +2007-03-17 + Preliminary support for clipping to paths agg - JDH - - lib/matplotlib/__init__.py: Added the default parameter - 'pdf.use14corefonts'. When True, the PDF backend uses - only the 14 PDF core fonts. +2007-03-17 + Text.set_text() accepts anything convertible with '%s' - EF - - lib/matplotlib/afm.py: Added some keywords found in - recent AFM files. Added a little workaround to handle - Euro symbol. +2007-03-14 + Add masked-array support to hist. - EF - - lib/matplotlib/fontmanager.py: Added support for the 14 - PDF core fonts. These fonts have a dedicated cache (file - pdfcorefont.cache), not the same as for other AFM files - (file .afmfont.cache). Also cleaned comments to conform - to CODING_GUIDE. +2007-03-03 + Change barh to take a kwargs dict and pass it to bar. Fixes sf bug + #1669506. - - lib/matplotlib/backends/backend_pdf.py: - Added support for 14 PDF core fonts. - Fixed some issues with incorrect character widths and - encodings (works only for the most common encoding, - WinAnsiEncoding, defined by the official PDF Reference). - Removed parameter 'dpi' because it causes alignment issues. +2007-03-02 + Add rc parameter pdf.inheritcolor, which disables all color-setting + operations in the pdf backend. The idea is that you include the resulting + file in another program and set the colors (both stroke and fill color) + there, so you can use the same pdf file for e.g., a paper and a + presentation and have them in the surrounding color. You will probably not + want to draw figure and axis frames in that case, since they would be + filled in the same color. - JKS - -JKS (patch by Nicolas Grilly) +2007-02-26 + Prevent building _wxagg.so with broken Mac OS X wxPython. - ADS -2007-02-17 Changed ft2font.get_charmap, and updated all the files where - get_charmap is mentioned - ES +2007-02-23 + Require setuptools for Python 2.3 - ADS -2007-02-13 Added barcode demo- JDH +2007-02-22 + WXAgg accelerator updates - KM -2007-02-13 Added binary colormap to cm - JDH + WXAgg's C++ accelerator has been fixed to use the correct wxBitmap + constructor. -2007-02-13 Added twiny to pylab - JDH + The backend has been updated to use new wxPython functionality to provide + fast blit() animation without the C++ accelerator. This requires wxPython + 2.8 or later. Previous versions of wxPython can use the C++ acclerator or + the old pure Python routines. -2007-02-12 Moved data files into lib/matplotlib so that setuptools' - develop mode works. Re-organized the mpl-data layout so - that this source structure is maintained in the - installation. (i.e., the 'fonts' and 'images' - sub-directories are maintained in site-packages.) Suggest - removing site-packages/matplotlib/mpl-data and - ~/.matplotlib/ttffont.cache before installing - ADS + setup.py no longer builds the C++ accelerator when wxPython >= 2.8 is + present. -2007-02-07 Committed Rob Hetland's patch for qt4: remove - references to text()/latin1(), plus some improvements - to the toolbar layout - DSD + The blit() method is now faster regardless of which agg/wxPython conversion + routines are used. ---------------------------- - -2007-02-06 Released 0.90.0 at revision 3003 - -2007-01-22 Extended the new picker API to text, patches and patch - collections. Added support for user customizable pick hit - testing and attribute tagging of the PickEvent - Details - and examples in examples/pick_event_demo.py - JDH - -2007-01-16 Begun work on a new pick API using the mpl event handling - frameowrk. Artists will define their own pick method with - a configurable epsilon tolerance and return pick attrs. - All artists that meet the tolerance threshold will fire a - PickEvent with artist dependent attrs; e.g., a Line2D can set - the indices attribute that shows the indices into the line - that are within epsilon of the pick point. See - examples/pick_event_demo.py. The implementation of pick - for the remaining Artists remains to be done, but the core - infrastructure at the level of event handling is in place - with a proof-of-concept implementation for Line2D - JDH - -2007-01-16 src/_image.cpp: update to use Py_ssize_t (for 64-bit systems). - Use return value of fread() to prevent warning messages - SC. - -2007-01-15 src/_image.cpp: combine buffer_argb32() and buffer_bgra32() into - a new method color_conv(format) - SC - -2007-01-14 backend_cairo.py: update draw_arc() so that - examples/arctest.py looks correct - SC - -2007-01-12 backend_cairo.py: enable clipping. Update draw_image() so that - examples/contour_demo.py looks correct - SC - -2007-01-12 backend_cairo.py: fix draw_image() so that examples/image_demo.py - now looks correct - SC - -2007-01-11 Added Axes.xcorr and Axes.acorr to plot the cross - correlation of x vs. y or the autocorrelation of x. pylab - wrappers also provided. See examples/xcorr_demo.py - JDH - -2007-01-10 Added "Subplot.label_outer" method. It will set the - visibility of the ticklabels so that yticklabels are only - visible in the first column and xticklabels are only - visible in the last row - JDH - -2007-01-02 Added additional kwarg documentation - JDH - -2006-12-28 Improved error message for nonpositive input to log - transform; added log kwarg to bar, barh, and hist, - and modified bar method to behave sensibly by default - when the ordinate has a log scale. (This only works - if the log scale is set before or by the call to bar, - hence the utility of the log kwarg.) - EF - -2006-12-27 backend_cairo.py: update draw_image() and _draw_mathtext() to work - with numpy - SC - -2006-12-20 Fixed xpdf dependency check, which was failing on windows. - Removed ps2eps dependency check. - DSD - -2006-12-19 Added Tim Leslie's spectral patch - JDH - -2006-12-17 Added rc param 'axes.formatter.limits' to control - the default threshold for switching to scientific - notation. Added convenience method - Axes.ticklabel_format() for turning scientific notation - on or off on either or both axes. - EF - -2006-12-16 Added ability to turn control scientific notation - in ScalarFormatter - EF - -2006-12-16 Enhanced boxplot to handle more flexible inputs - EF - -2006-12-13 Replaced calls to where() in colors.py with much faster - clip() and putmask() calls; removed inappropriate - uses of getmaskorNone (which should be needed only - very rarely); all in response to profiling by - David Cournapeau. Also fixed bugs in my 2-D - array support from 12-09. - EF - -2006-12-09 Replaced spy and spy2 with the new spy that combines - marker and image capabilities - EF +2007-02-21 + Applied the PDF backend patch by Nicolas Grilly. This impacts several + files and directories in matplotlib: -2006-12-09 Added support for plotting 2-D arrays with plot: - columns are plotted as in Matlab - EF + - Created the directory lib/matplotlib/mpl-data/fonts/pdfcorefonts, holding + AFM files for the 14 PDF core fonts. These fonts are embedded in every + PDF viewing application. -2006-12-09 Added linewidth kwarg to bar and barh; fixed arg - checking bugs - EF + - setup.py: Added the directory pdfcorefonts to package_data. -2006-12-07 Made pcolormesh argument handling match pcolor; - fixed kwarg handling problem noted by Pierre GM - EF + - lib/matplotlib/__init__.py: Added the default parameter + 'pdf.use14corefonts'. When True, the PDF backend uses only the 14 PDF + core fonts. -2006-12-06 Made pcolor support vector X and/or Y instead of - requiring 2-D arrays - EF + - lib/matplotlib/afm.py: Added some keywords found in recent AFM files. + Added a little workaround to handle Euro symbol. -2006-12-05 Made the default Artist._transform None (rather than - invoking identity_transform for each artist only to have it - overridden later). Use artist.get_transform() rather than - artist._transform, even in derived classes, so that the - default transform will be created lazily as needed - JDH + - lib/matplotlib/fontmanager.py: Added support for the 14 PDF core fonts. + These fonts have a dedicated cache (file pdfcorefont.cache), not the same + as for other AFM files (file .afmfont.cache). Also cleaned comments to + conform to CODING_GUIDE. -2006-12-03 Added LogNorm to colors.py as illustrated by - examples/pcolor_log.py, based on suggestion by - Jim McDonald. Colorbar modified to handle LogNorm. - Norms have additional "inverse" method. - EF + - lib/matplotlib/backends/backend_pdf.py: Added support for 14 PDF core + fonts. Fixed some issues with incorrect character widths and encodings + (works only for the most common encoding, WinAnsiEncoding, defined by the + official PDF Reference). Removed parameter 'dpi' because it causes + alignment issues. -2006-12-02 Changed class names in colors.py to match convention: - normalize -> Normalize, no_norm -> NoNorm. Old names - are still available. - Changed __init__.py rc defaults to match those in - matplotlibrc - EF + -JKS (patch by Nicolas Grilly) -2006-11-22 Fixed bug in set_*lim that I had introduced on 11-15 - EF +2007-02-17 + Changed ft2font.get_charmap, and updated all the files where get_charmap is + mentioned - ES -2006-11-22 Added examples/clippedline.py, which shows how to clip line - data based on view limits -- it also changes the marker - style when zoomed in - JDH +2007-02-13 + Added barcode demo- JDH -2006-11-21 Some spy bug-fixes and added precision arg per Robert C's - suggestion - JDH +2007-02-13 + Added binary colormap to cm - JDH -2006-11-19 Added semi-automatic docstring generation detailing all the - kwargs that functions take using the artist introspection - tools; e.g., 'help text now details the scatter kwargs - that control the Text properties - JDH +2007-02-13 + Added twiny to pylab - JDH -2006-11-17 Removed obsolete scatter_classic, leaving a stub to - raise NotImplementedError; same for pcolor_classic - EF +2007-02-12 + Moved data files into lib/matplotlib so that setuptools' develop mode + works. Re-organized the mpl-data layout so that this source structure is + maintained in the installation. (i.e., the 'fonts' and 'images' + sub-directories are maintained in site-packages.) Suggest removing + site-packages/matplotlib/mpl-data and ~/.matplotlib/ttffont.cache before + installing - ADS -2006-11-15 Removed obsolete pcolor_classic - EF +2007-02-07 + Committed Rob Hetland's patch for qt4: remove references to + text()/latin1(), plus some improvements to the toolbar layout - DSD -2006-11-15 Fixed 1588908 reported by Russel Owen; factored - nonsingular method out of ticker.py, put it into - transforms.py as a function, and used it in - set_xlim and set_ylim. - EF - -2006-11-14 Applied patch 1591716 by Ulf Larssen to fix a bug in - apply_aspect. Modified and applied patch - 1594894 by mdehoon to fix bugs and improve - formatting in lines.py. Applied patch 1573008 - by Greg Willden to make psd etc. plot full frequency - range for complex inputs. - EF - -2006-11-14 Improved the ability of the colorbar to track - changes in corresponding image, pcolor, or - contourf. - EF - -2006-11-11 Fixed bug that broke Numeric compatibility; - added support for alpha to colorbar. The - alpha information is taken from the mappable - object, not specified as a kwarg. - EF - -2006-11-05 Added broken_barh function for makring a sequence of - horizontal bars broken by gaps -- see examples/broken_barh.py - -2006-11-05 Removed lineprops and markerprops from the Annotation code - and replaced them with an arrow configurable with kwarg - arrowprops. See examples/annotation_demo.py - JDH - -2006-11-02 Fixed a pylab subplot bug that was causing axes to be - deleted with hspace or wspace equals zero in - subplots_adjust - JDH +--------------------------- -2006-10-31 Applied axes3d patch 1587359 - \http://sourceforge.net/tracker/index.php?func=detail&aid=1587359&group_id=80706&atid=560722 - JDH +2007-02-06 + Released 0.90.0 at revision 3003 + +2007-01-22 + Extended the new picker API to text, patches and patch collections. Added + support for user customizable pick hit testing and attribute tagging of the + PickEvent - Details and examples in examples/pick_event_demo.py - JDH + +2007-01-16 + Begun work on a new pick API using the mpl event handling frameowrk. + Artists will define their own pick method with a configurable epsilon + tolerance and return pick attrs. All artists that meet the tolerance + threshold will fire a PickEvent with artist dependent attrs; e.g., a Line2D + can set the indices attribute that shows the indices into the line that are + within epsilon of the pick point. See examples/pick_event_demo.py. The + implementation of pick for the remaining Artists remains to be done, but + the core infrastructure at the level of event handling is in place with a + proof-of-concept implementation for Line2D - JDH + +2007-01-16 + src/_image.cpp: update to use Py_ssize_t (for 64-bit systems). Use return + value of fread() to prevent warning messages - SC. + +2007-01-15 + src/_image.cpp: combine buffer_argb32() and buffer_bgra32() into a new + method color_conv(format) - SC + +2007-01-14 + backend_cairo.py: update draw_arc() so that examples/arctest.py looks + correct - SC + +2007-01-12 + backend_cairo.py: enable clipping. Update draw_image() so that + examples/contour_demo.py looks correct - SC + +2007-01-12 + backend_cairo.py: fix draw_image() so that examples/image_demo.py now looks + correct - SC + +2007-01-11 + Added Axes.xcorr and Axes.acorr to plot the cross correlation of x vs. y or + the autocorrelation of x. pylab wrappers also provided. See + examples/xcorr_demo.py - JDH + +2007-01-10 + Added "Subplot.label_outer" method. It will set the visibility of the + ticklabels so that yticklabels are only visible in the first column and + xticklabels are only visible in the last row - JDH + +2007-01-02 + Added additional kwarg documentation - JDH + +2006-12-28 + Improved error message for nonpositive input to log transform; added log + kwarg to bar, barh, and hist, and modified bar method to behave sensibly by + default when the ordinate has a log scale. (This only works if the log + scale is set before or by the call to bar, hence the utility of the log + kwarg.) - EF + +2006-12-27 + backend_cairo.py: update draw_image() and _draw_mathtext() to work with + numpy - SC + +2006-12-20 + Fixed xpdf dependency check, which was failing on windows. Removed ps2eps + dependency check. - DSD + +2006-12-19 + Added Tim Leslie's spectral patch - JDH + +2006-12-17 + Added rc param 'axes.formatter.limits' to control the default threshold for + switching to scientific notation. Added convenience method + Axes.ticklabel_format() for turning scientific notation on or off on either + or both axes. - EF + +2006-12-16 + Added ability to turn control scientific notation in ScalarFormatter - EF + +2006-12-16 + Enhanced boxplot to handle more flexible inputs - EF + +2006-12-13 + Replaced calls to where() in colors.py with much faster clip() and + putmask() calls; removed inappropriate uses of getmaskorNone (which should + be needed only very rarely); all in response to profiling by David + Cournapeau. Also fixed bugs in my 2-D array support from 12-09. - EF + +2006-12-09 + Replaced spy and spy2 with the new spy that combines marker and image + capabilities - EF + +2006-12-09 + Added support for plotting 2-D arrays with plot: columns are plotted as in + Matlab - EF + +2006-12-09 + Added linewidth kwarg to bar and barh; fixed arg checking bugs - EF + +2006-12-07 + Made pcolormesh argument handling match pcolor; fixed kwarg handling + problem noted by Pierre GM - EF + +2006-12-06 + Made pcolor support vector X and/or Y instead of requiring 2-D arrays - EF + +2006-12-05 + Made the default Artist._transform None (rather than invoking + identity_transform for each artist only to have it overridden later). Use + artist.get_transform() rather than artist._transform, even in derived + classes, so that the default transform will be created lazily as needed - + JDH + +2006-12-03 + Added LogNorm to colors.py as illustrated by examples/pcolor_log.py, based + on suggestion by Jim McDonald. Colorbar modified to handle LogNorm. Norms + have additional "inverse" method. - EF + +2006-12-02 + Changed class names in colors.py to match convention: normalize -> + Normalize, no_norm -> NoNorm. Old names are still available. Changed + __init__.py rc defaults to match those in matplotlibrc - EF + +2006-11-22 + Fixed bug in set_*lim that I had introduced on 11-15 - EF + +2006-11-22 + Added examples/clippedline.py, which shows how to clip line data based on + view limits -- it also changes the marker style when zoomed in - JDH + +2006-11-21 + Some spy bug-fixes and added precision arg per Robert C's suggestion - JDH + +2006-11-19 + Added semi-automatic docstring generation detailing all the kwargs that + functions take using the artist introspection tools; e.g., 'help text now + details the scatter kwargs that control the Text properties - JDH + +2006-11-17 + Removed obsolete scatter_classic, leaving a stub to raise + NotImplementedError; same for pcolor_classic - EF + +2006-11-15 + Removed obsolete pcolor_classic - EF + +2006-11-15 + Fixed 1588908 reported by Russel Owen; factored nonsingular method out of + ticker.py, put it into transforms.py as a function, and used it in set_xlim + and set_ylim. - EF + +2006-11-14 + Applied patch 1591716 by Ulf Larssen to fix a bug in apply_aspect. + Modified and applied patch 1594894 by mdehoon to fix bugs and improve + formatting in lines.py. Applied patch 1573008 by Greg Willden to make psd + etc. plot full frequency range for complex inputs. - EF + +2006-11-14 + Improved the ability of the colorbar to track changes in corresponding + image, pcolor, or contourf. - EF + +2006-11-11 + Fixed bug that broke Numeric compatibility; added support for alpha to + colorbar. The alpha information is taken from the mappable object, not + specified as a kwarg. - EF + +2006-11-05 + Added broken_barh function for makring a sequence of horizontal bars broken + by gaps -- see examples/broken_barh.py + +2006-11-05 + Removed lineprops and markerprops from the Annotation code and replaced + them with an arrow configurable with kwarg arrowprops. See + examples/annotation_demo.py - JDH + +2006-11-02 + Fixed a pylab subplot bug that was causing axes to be deleted with hspace + or wspace equals zero in subplots_adjust - JDH + +2006-10-31 + Applied axes3d patch 1587359 + \http://sourceforge.net/tracker/index.php?func=detail&aid=1587359&group_id=80706&atid=560722 + JDH ------------------------- -2006-10-26 Released 0.87.7 at revision 2835 +2006-10-26 + Released 0.87.7 at revision 2835 + +2006-10-25 + Made "tiny" kwarg in Locator.nonsingular much smaller - EF -2006-10-25 Made "tiny" kwarg in Locator.nonsingular much smaller - EF +2006-10-17 + Closed sf bug 1562496 update line props dash/solid/cap/join styles - JDH -2006-10-17 Closed sf bug 1562496 update line props dash/solid/cap/join - styles - JDH +2006-10-17 + Complete overhaul of the annotations API and example code - See + matplotlib.text.Annotation and examples/annotation_demo.py JDH -2006-10-17 Complete overhaul of the annotations API and example code - - See matplotlib.text.Annotation and - examples/annotation_demo.py JDH +2006-10-12 + Committed Manuel Metz's StarPolygon code and examples/scatter_star_poly.py + - JDH -2006-10-12 Committed Manuel Metz's StarPolygon code and - examples/scatter_star_poly.py - JDH +2006-10-11 + commented out all default values in matplotlibrc.template Default values + should generally be taken from defaultParam in __init__.py - the file + matplotlib should only contain those values that the user wants to + explicitly change from the default. (see thread "marker color handling" on + matplotlib-devel) +2006-10-10 + Changed default comment character for load to '#' - JDH -2006-10-11 commented out all default values in matplotlibrc.template - Default values should generally be taken from defaultParam in - __init__.py - the file matplotlib should only contain those values - that the user wants to explicitly change from the default. - (see thread "marker color handling" on matplotlib-devel) +2006-10-10 + deactivated rcfile-configurability of markerfacecolor and markeredgecolor. + Both are now hardcoded to the special value 'auto' to follow the line + color. Configurability at run-time (using function arguments) remains + functional. - NN -2006-10-10 Changed default comment character for load to '#' - JDH +2006-10-07 + introduced dummy argument magnification=1.0 to FigImage.make_image to + satisfy unit test figimage_demo.py The argument is not yet handled + correctly, which should only show up when using non-standard DPI settings + in PS backend, introduced by patch #1562394. - NN -2006-10-10 deactivated rcfile-configurability of markerfacecolor - and markeredgecolor. Both are now hardcoded to the special value - 'auto' to follow the line color. Configurability at run-time - (using function arguments) remains functional. - NN +2006-10-06 + add backend-agnostic example: simple3d.py - NN -2006-10-07 introduced dummy argument magnification=1.0 to - FigImage.make_image to satisfy unit test figimage_demo.py - The argument is not yet handled correctly, which should only - show up when using non-standard DPI settings in PS backend, - introduced by patch #1562394. - NN +2006-09-29 + fix line-breaking for SVG-inline images (purely cosmetic) - NN -2006-10-06 add backend-agnostic example: simple3d.py - NN +2006-09-29 + reworked set_linestyle and set_marker markeredgecolor and markerfacecolor + now default to a special value "auto" that keeps the color in sync with the + line color further, the intelligence of axes.plot is cleaned up, improved + and simplified. Complete compatibility cannot be guaranteed, but the new + behavior should be much more predictable (see patch #1104615 for details) - + NN -2006-09-29 fix line-breaking for SVG-inline images (purely cosmetic) - NN +2006-09-29 + changed implementation of clip-path in SVG to work around a limitation in + inkscape - NN -2006-09-29 reworked set_linestyle and set_marker - markeredgecolor and markerfacecolor now default to - a special value "auto" that keeps the color in sync with - the line color - further, the intelligence of axes.plot is cleaned up, - improved and simplified. Complete compatibility cannot be - guaranteed, but the new behavior should be much more predictable - (see patch #1104615 for details) - NN +2006-09-29 + added two options to matplotlibrc: -2006-09-29 changed implementation of clip-path in SVG to work around a - limitation in inkscape - NN + - svg.image_inline + - svg.image_noscale -2006-09-29 added two options to matplotlibrc: - svg.image_inline - svg.image_noscale - see patch #1533010 for details - NN + see patch #1533010 for details - NN -2006-09-29 axes.py: cleaned up kwargs checking - NN +2006-09-29 + axes.py: cleaned up kwargs checking - NN -2006-09-29 setup.py: cleaned up setup logic - NN +2006-09-29 + setup.py: cleaned up setup logic - NN -2006-09-29 setup.py: check for required pygtk versions, fixes bug #1460783 - SC +2006-09-29 + setup.py: check for required pygtk versions, fixes bug #1460783 - SC --------------------------------- -2006-09-27 Released 0.87.6 at revision 2783 +2006-09-27 + Released 0.87.6 at revision 2783 -2006-09-24 Added line pointers to the Annotation code, and a pylab - interface. See matplotlib.text.Annotation, - examples/annotation_demo.py and - examples/annotation_demo_pylab.py - JDH +2006-09-24 + Added line pointers to the Annotation code, and a pylab interface. See + matplotlib.text.Annotation, examples/annotation_demo.py and + examples/annotation_demo_pylab.py - JDH -2006-09-18 mathtext2.py: The SVG backend now supports the same things that - the AGG backend does. Fixed some bugs with rendering, and out of - bounds errors in the AGG backend - ES. Changed the return values - of math_parse_s_ft2font_svg to support lines (fractions etc.) +2006-09-18 + mathtext2.py: The SVG backend now supports the same things that the AGG + backend does. Fixed some bugs with rendering, and out of bounds errors in + the AGG backend - ES. Changed the return values of math_parse_s_ft2font_svg + to support lines (fractions etc.) -2006-09-17 Added an Annotation class to facilitate annotating objects - and an examples file examples/annotation_demo.py. I want - to add dash support as in TextWithDash, but haven't decided - yet whether inheriting from TextWithDash is the right base - class or if another approach is needed - JDH +2006-09-17 + Added an Annotation class to facilitate annotating objects and an examples + file examples/annotation_demo.py. I want to add dash support as in + TextWithDash, but haven't decided yet whether inheriting from TextWithDash + is the right base class or if another approach is needed - JDH ------------------------------ -2006-09-05 Released 0.87.5 at revision 2761 +2006-09-05 + Released 0.87.5 at revision 2761 -2006-09-04 Added nxutils for some numeric add-on extension code -- - specifically a better/more efficient inside polygon tester (see - unit/inside_poly_*.py) - JDH +2006-09-04 + Added nxutils for some numeric add-on extension code -- specifically a + better/more efficient inside polygon tester (see unit/inside_poly_*.py) - + JDH -2006-09-04 Made bitstream fonts the rc default - JDH +2006-09-04 + Made bitstream fonts the rc default - JDH -2006-08-31 Fixed alpha-handling bug in ColorConverter, affecting - collections in general and contour/contourf in - particular. - EF +2006-08-31 + Fixed alpha-handling bug in ColorConverter, affecting collections in + general and contour/contourf in particular. - EF -2006-08-30 ft2font.cpp: Added draw_rect_filled method (now used by mathtext2 - to draw the fraction bar) to FT2Font - ES +2006-08-30 + ft2font.cpp: Added draw_rect_filled method (now used by mathtext2 to draw + the fraction bar) to FT2Font - ES -2006-08-29 setupext.py: wrap calls to tk.getvar() with str(). On some - systems, getvar returns a Tcl_Obj instead of a string - DSD +2006-08-29 + setupext.py: wrap calls to tk.getvar() with str(). On some systems, getvar + returns a Tcl_Obj instead of a string - DSD -2006-08-28 mathtext2.py: Sub/superscripts can now be complex (i.e. - fractions etc.). The demo is also updated - ES +2006-08-28 + mathtext2.py: Sub/superscripts can now be complex (i.e. fractions etc.). + The demo is also updated - ES -2006-08-28 font_manager.py: Added /usr/local/share/fonts to list of - X11 font directories - DSD +2006-08-28 + font_manager.py: Added /usr/local/share/fonts to list of X11 font + directories - DSD -2006-08-28 mahtext2.py: Initial support for complex fractions. Also, - rendering is now completely separated from parsing. The - sub/superscripts now work better. - Updated the mathtext2_demo.py - ES +2006-08-28 + mathtext2.py: Initial support for complex fractions. Also, rendering is now + completely separated from parsing. The sub/superscripts now work better. + Updated the mathtext2_demo.py - ES -2006-08-27 qt backends: don't create a QApplication when backend is - imported, do it when the FigureCanvasQt is created. Simplifies - applications where mpl is embedded in qt. Updated - embedding_in_qt* examples - DSD +2006-08-27 + qt backends: don't create a QApplication when backend is imported, do it + when the FigureCanvasQt is created. Simplifies applications where mpl is + embedded in qt. Updated embedding_in_qt* examples - DSD -2006-08-27 mahtext2.py: Now the fonts are searched in the OS font dir and - in the mpl-data dir. Also env is not a dict anymore. - ES +2006-08-27 + mathtext2.py: Now the fonts are searched in the OS font dir and in the + mpl-data dir. Also env is not a dict anymore. - ES -2006-08-26 minor changes to __init__.py, mathtex2_demo.py. Added matplotlibrc - key "mathtext.mathtext2" (removed the key "mathtext2") - ES +2006-08-26 + minor changes to __init__.py, mathtex2_demo.py. Added matplotlibrc key + "mathtext.mathtext2" (removed the key "mathtext2") - ES -2006-08-21 mathtext2.py: Initial support for fractions - Updated the mathtext2_demo.py - _mathtext_data.py: removed "\" from the unicode dicts - mathtext.py: Minor modification (because of _mathtext_data.py)- ES +2006-08-21 + mathtext2.py: Initial support for fractions Updated the mathtext2_demo.py + _mathtext_data.py: removed "\" from the unicode dicts mathtext.py: Minor + modification (because of _mathtext_data.py)- ES -2006-08-20 Added mathtext2.py: Replacement for mathtext.py. Supports _ ^, - \rm, \cal etc., \sin, \cos etc., unicode, recursive nestings, - inline math mode. The only backend currently supported is Agg - __init__.py: added new rc params for mathtext2 - added mathtext2_demo.py example - ES +2006-08-20 + Added mathtext2.py: Replacement for mathtext.py. Supports _ ^, \rm, \cal + etc., \sin, \cos etc., unicode, recursive nestings, inline math mode. The + only backend currently supported is Agg __init__.py: added new rc params + for mathtext2 added mathtext2_demo.py example - ES -2006-08-19 Added embedding_in_qt4.py example - DSD +2006-08-19 + Added embedding_in_qt4.py example - DSD -2006-08-11 Added scale free Ellipse patch for Agg - CM +2006-08-11 + Added scale free Ellipse patch for Agg - CM -2006-08-10 Added converters to and from julian dates to matplotlib.dates - (num2julian and julian2num) - JDH +2006-08-10 + Added converters to and from julian dates to matplotlib.dates (num2julian + and julian2num) - JDH -2006-08-08 Fixed widget locking so multiple widgets could share the - event handling - JDH +2006-08-08 + Fixed widget locking so multiple widgets could share the event handling - + JDH -2006-08-07 Added scale free Ellipse patch to SVG and PS - CM +2006-08-07 + Added scale free Ellipse patch to SVG and PS - CM -2006-08-05 Re-organized imports in numerix for numpy 1.0b2 -- TEO +2006-08-05 + Re-organized imports in numerix for numpy 1.0b2 -- TEO -2006-08-04 Added draw_markers to PDF backend. - JKS +2006-08-04 + Added draw_markers to PDF backend. - JKS -2006-08-01 Fixed a bug in postscript's rendering of dashed lines - DSD +2006-08-01 + Fixed a bug in postscript's rendering of dashed lines - DSD -2006-08-01 figure.py: savefig() update docstring to add support for 'format' - argument. - backend_cairo.py: print_figure() add support 'format' argument. - SC +2006-08-01 + figure.py: savefig() update docstring to add support for 'format' argument. + backend_cairo.py: print_figure() add support 'format' argument. - SC -2006-07-31 Don't let postscript's xpdf distiller compress images - DSD +2006-07-31 + Don't let postscript's xpdf distiller compress images - DSD -2006-07-31 Added shallowcopy() methods to all Transformations; - removed copy_bbox_transform and copy_bbox_transform_shallow - from transforms.py; - added offset_copy() function to transforms.py to - facilitate positioning artists with offsets. - See examples/transoffset.py. - EF +2006-07-31 + Added shallowcopy() methods to all Transformations; removed + copy_bbox_transform and copy_bbox_transform_shallow from transforms.py; + added offset_copy() function to transforms.py to facilitate positioning + artists with offsets. See examples/transoffset.py. - EF -2006-07-31 Don't let postscript's xpdf distiller compress images - DSD +2006-07-31 + Don't let postscript's xpdf distiller compress images - DSD -2006-07-29 Fixed numerix polygon bug reported by Nick Fotopoulos. - Added inverse_numerix_xy() transform method. - Made autoscale_view() preserve axis direction - (e.g., increasing down).- EF +2006-07-29 + Fixed numerix polygon bug reported by Nick Fotopoulos. Added + inverse_numerix_xy() transform method. Made autoscale_view() preserve axis + direction (e.g., increasing down).- EF -2006-07-28 Added shallow bbox copy routine for transforms -- mainly - useful for copying transforms to apply offset to. - JDH +2006-07-28 + Added shallow bbox copy routine for transforms -- mainly useful for copying + transforms to apply offset to. - JDH -2006-07-28 Added resize method to FigureManager class - for Qt and Gtk backend - CM +2006-07-28 + Added resize method to FigureManager class for Qt and Gtk backend - CM -2006-07-28 Added subplots_adjust button to Qt backend - CM +2006-07-28 + Added subplots_adjust button to Qt backend - CM -2006-07-26 Use numerix more in collections. - Quiver now handles masked arrays. - EF +2006-07-26 + Use numerix more in collections. Quiver now handles masked arrays. - EF -2006-07-22 Fixed bug #1209354 - DSD +2006-07-22 + Fixed bug #1209354 - DSD -2006-07-22 make scatter() work with the kwarg "color". Closes bug - 1285750 - DSD +2006-07-22 + make scatter() work with the kwarg "color". Closes bug 1285750 - DSD -2006-07-20 backend_cairo.py: require pycairo 1.2.0. - print_figure() update to output SVG using cairo. +2006-07-20 + backend_cairo.py: require pycairo 1.2.0. print_figure() update to output + SVG using cairo. -2006-07-19 Added blitting for Qt4Agg - CM +2006-07-19 + Added blitting for Qt4Agg - CM -2006-07-19 Added lasso widget and example examples/lasso_demo.py - JDH +2006-07-19 + Added lasso widget and example examples/lasso_demo.py - JDH -2006-07-18 Added blitting for QtAgg backend - CM +2006-07-18 + Added blitting for QtAgg backend - CM -2006-07-17 Fixed bug #1523585: skip nans in semilog plots - DSD +2006-07-17 + Fixed bug #1523585: skip nans in semilog plots - DSD -2006-07-12 Add support to render the scientific notation label - over the right-side y-axis - DSD +2006-07-12 + Add support to render the scientific notation label over the right-side + y-axis - DSD ------------------------------ -2006-07-11 Released 0.87.4 at revision 2558 - -2006-07-07 Fixed a usetex bug with older versions of latex - DSD - -2006-07-07 Add compatibility for NumPy 1.0 - TEO - -2006-06-29 Added a Qt4Agg backend. Thank you James Amundson - DSD - -2006-06-26 Fixed a usetex bug. On Windows, usetex will process - postscript output in the current directory rather than - in a temp directory. This is due to the use of spaces - and tildes in windows paths, which cause problems with - latex. The subprocess module is no longer used. - DSD - -2006-06-22 Various changes to bar(), barh(), and hist(). - Added 'edgecolor' keyword arg to bar() and barh(). - The x and y args in barh() have been renamed to width - and bottom respectively, and their order has been swapped - to maintain a (position, value) order ala matlab. left, - height, width and bottom args can now all be scalars or - sequences. barh() now defaults to edge alignment instead - of center alignment. Added a keyword arg 'align' to bar(), - barh() and hist() that controls between edge or center bar - alignment. Fixed ignoring the rcParams['patch.facecolor'] - for bar color in bar() and barh(). Fixed ignoring the - rcParams['lines.color'] for error bar color in bar() - and barh(). Fixed a bug where patches would be cleared - when error bars were plotted if rcParams['axes.hold'] - was False. - MAS - -2006-06-22 Added support for numerix 2-D arrays as alternatives to - a sequence of (x,y) tuples for specifying paths in - collections, quiver, contour, pcolor, transforms. - Fixed contour bug involving setting limits for - colormapping. Added numpy-style all() to numerix. - EF - -2006-06-20 Added custom FigureClass hook to pylab interface - see - examples/custom_figure_class.py - -2006-06-16 Added colormaps from gist (gist_earth, gist_stern, - gist_rainbow, gist_gray, gist_yarg, gist_heat, gist_ncar) - JW - -2006-06-16 Added a pointer to parent in figure canvas so you can - access the container with fig.canvas.manager. Useful if - you want to set the window title, e.g., in gtk - fig.canvas.manager.window.set_title, though a GUI neutral - method would be preferable JDH - -2006-06-16 Fixed colorbar.py to handle indexed colors (i.e., - norm = no_norm()) by centering each colored region - on its index. - EF - -2006-06-15 Added scalex and scaley to Axes.autoscale_view to support - selective autoscaling just the x or y axis, and supported - these command in plot so you can say plot(something, - scaley=False) and just the x axis will be autoscaled. - Modified axvline and axhline to support this, so for - example axvline will no longer autoscale the y axis. JDH - -2006-06-13 Fix so numpy updates are backward compatible - TEO - -2006-06-12 Updated numerix to handle numpy restructuring of - oldnumeric - TEO - -2006-06-12 Updated numerix.fft to handle numpy restructuring - Added ImportError to numerix.linear_algebra for numpy -TEO - -2006-06-11 Added quiverkey command to pylab and Axes, using - QuiverKey class in quiver.py. Changed pylab and Axes - to use quiver2 if possible, but drop back to the - newly-renamed quiver_classic if necessary. Modified - examples/quiver_demo.py to illustrate the new quiver - and quiverkey. Changed LineCollection implementation - slightly to improve compatibility with PolyCollection. - EF - -2006-06-11 Fixed a usetex bug for windows, running latex on files - with spaces in their names or paths was failing - DSD - -2006-06-09 Made additions to numerix, changes to quiver to make it - work with all numeric flavors. - EF - -2006-06-09 Added quiver2 function to pylab and method to axes, - with implementation via a Quiver class in quiver.py. - quiver2 will replace quiver before the next release; - it is placed alongside it initially to facilitate - testing and transition. See also - examples/quiver2_demo.py. - EF - -2006-06-08 Minor bug fix to make ticker.py draw proper minus signs - with usetex - DSD +2006-07-11 + Released 0.87.4 at revision 2558 + +2006-07-07 + Fixed a usetex bug with older versions of latex - DSD + +2006-07-07 + Add compatibility for NumPy 1.0 - TEO + +2006-06-29 + Added a Qt4Agg backend. Thank you James Amundson - DSD + +2006-06-26 + Fixed a usetex bug. On Windows, usetex will process postscript output in + the current directory rather than in a temp directory. This is due to the + use of spaces and tildes in windows paths, which cause problems with latex. + The subprocess module is no longer used. - DSD + +2006-06-22 + Various changes to bar(), barh(), and hist(). Added 'edgecolor' keyword + arg to bar() and barh(). The x and y args in barh() have been renamed to + width and bottom respectively, and their order has been swapped to maintain + a (position, value) order ala matlab. left, height, width and bottom args + can now all be scalars or sequences. barh() now defaults to edge alignment + instead of center alignment. Added a keyword arg 'align' to bar(), barh() + and hist() that controls between edge or center bar alignment. Fixed + ignoring the rcParams['patch.facecolor'] for bar color in bar() and barh(). + Fixed ignoring the rcParams['lines.color'] for error bar color in bar() and + barh(). Fixed a bug where patches would be cleared when error bars were + plotted if rcParams['axes.hold'] was False. - MAS + +2006-06-22 + Added support for numerix 2-D arrays as alternatives to a sequence of (x,y) + tuples for specifying paths in collections, quiver, contour, pcolor, + transforms. Fixed contour bug involving setting limits for colormapping. + Added numpy-style all() to numerix. - EF + +2006-06-20 + Added custom FigureClass hook to pylab interface - see + examples/custom_figure_class.py + +2006-06-16 + Added colormaps from gist (gist_earth, gist_stern, gist_rainbow, gist_gray, + gist_yarg, gist_heat, gist_ncar) - JW + +2006-06-16 + Added a pointer to parent in figure canvas so you can access the container + with fig.canvas.manager. Useful if you want to set the window title, e.g., + in gtk fig.canvas.manager.window.set_title, though a GUI neutral method + would be preferable JDH + +2006-06-16 + Fixed colorbar.py to handle indexed colors (i.e., norm = no_norm()) by + centering each colored region on its index. - EF + +2006-06-15 + Added scalex and scaley to Axes.autoscale_view to support selective + autoscaling just the x or y axis, and supported these command in plot so + you can say plot(something, scaley=False) and just the x axis will be + autoscaled. Modified axvline and axhline to support this, so for example + axvline will no longer autoscale the y axis. JDH + +2006-06-13 + Fix so numpy updates are backward compatible - TEO + +2006-06-12 + Updated numerix to handle numpy restructuring of oldnumeric - TEO + +2006-06-12 + Updated numerix.fft to handle numpy restructuring Added ImportError to + numerix.linear_algebra for numpy -TEO + +2006-06-11 + Added quiverkey command to pylab and Axes, using QuiverKey class in + quiver.py. Changed pylab and Axes to use quiver2 if possible, but drop + back to the newly-renamed quiver_classic if necessary. Modified + examples/quiver_demo.py to illustrate the new quiver and quiverkey. + Changed LineCollection implementation slightly to improve compatibility + with PolyCollection. - EF + +2006-06-11 + Fixed a usetex bug for windows, running latex on files with spaces in their + names or paths was failing - DSD + +2006-06-09 + Made additions to numerix, changes to quiver to make it work with all + numeric flavors. - EF + +2006-06-09 + Added quiver2 function to pylab and method to axes, with implementation via + a Quiver class in quiver.py. quiver2 will replace quiver before the next + release; it is placed alongside it initially to facilitate testing and + transition. See also examples/quiver2_demo.py. - EF + +2006-06-08 + Minor bug fix to make ticker.py draw proper minus signs with usetex - DSD ----------------------- -2006-06-06 Released 0.87.3 at revision 2432 - -2006-05-30 More partial support for polygons with outline or fill, - but not both. Made LineCollection inherit from - ScalarMappable. - EF +2006-06-06 + Released 0.87.3 at revision 2432 -2006-05-29 Yet another revision of aspect-ratio handling. - EF +2006-05-30 + More partial support for polygons with outline or fill, but not both. Made + LineCollection inherit from ScalarMappable. - EF -2006-05-27 Committed a patch to prevent stroking zero-width lines in - the svg backend - DSD +2006-05-29 + Yet another revision of aspect-ratio handling. - EF -2006-05-24 Fixed colorbar positioning bug identified by Helge - Avlesen, and improved the algorithm; added a 'pad' - kwarg to control the spacing between colorbar and - parent axes. - EF +2006-05-27 + Committed a patch to prevent stroking zero-width lines in the svg backend - + DSD -2006-05-23 Changed color handling so that collection initializers - can take any mpl color arg or sequence of args; deprecated - float as grayscale, replaced by string representation of - float. - EF +2006-05-24 + Fixed colorbar positioning bug identified by Helge Avlesen, and improved + the algorithm; added a 'pad' kwarg to control the spacing between colorbar + and parent axes. - EF -2006-05-19 Fixed bug: plot failed if all points were masked - EF +2006-05-23 + Changed color handling so that collection initializers can take any mpl + color arg or sequence of args; deprecated float as grayscale, replaced by + string representation of float. - EF -2006-05-19 Added custom symbol option to scatter - JDH +2006-05-19 + Fixed bug: plot failed if all points were masked - EF -2006-05-18 New example, multi_image.py; colorbar fixed to show - offset text when the ScalarFormatter is used; FixedFormatter - augmented to accept and display offset text. - EF +2006-05-19 + Added custom symbol option to scatter - JDH -2006-05-14 New colorbar; old one is renamed to colorbar_classic. - New colorbar code is in colorbar.py, with wrappers in - figure.py and pylab.py. - Fixed aspect-handling bug reported by Michael Mossey. - Made backend_bases.draw_quad_mesh() run.- EF +2006-05-18 + New example, multi_image.py; colorbar fixed to show offset text when the + ScalarFormatter is used; FixedFormatter augmented to accept and display + offset text. - EF -2006-05-08 Changed handling of end ranges in contourf: replaced - "clip-ends" kwarg with "extend". See docstring for - details. -EF +2006-05-14 + New colorbar; old one is renamed to colorbar_classic. New colorbar code is + in colorbar.py, with wrappers in figure.py and pylab.py. Fixed + aspect-handling bug reported by Michael Mossey. Made + backend_bases.draw_quad_mesh() run.- EF -2006-05-08 Added axisbelow to rc - JDH +2006-05-08 + Changed handling of end ranges in contourf: replaced "clip-ends" kwarg with + "extend". See docstring for details. -EF -2006-05-08 If using PyGTK require version 2.2+ - SC +2006-05-08 + Added axisbelow to rc - JDH -2006-04-19 Added compression support to PDF backend, controlled by - new pdf.compression rc setting. - JKS +2006-05-08 + If using PyGTK require version 2.2+ - SC -2006-04-19 Added Jouni's PDF backend +2006-04-19 + Added compression support to PDF backend, controlled by new pdf.compression + rc setting. - JKS -2006-04-18 Fixed a bug that caused agg to not render long lines +2006-04-19 + Added Jouni's PDF backend -2006-04-16 Masked array support for pcolormesh; made pcolormesh support the - same combinations of X,Y,C dimensions as pcolor does; - improved (I hope) description of grid used in pcolor, - pcolormesh. - EF +2006-04-18 + Fixed a bug that caused agg to not render long lines -2006-04-14 Reorganized axes.py - EF +2006-04-16 + Masked array support for pcolormesh; made pcolormesh support the same + combinations of X,Y,C dimensions as pcolor does; improved (I hope) + description of grid used in pcolor, pcolormesh. - EF -2006-04-13 Fixed a bug Ryan found using usetex with sans-serif fonts and - exponential tick labels - DSD +2006-04-14 + Reorganized axes.py - EF -2006-04-11 Refactored backend_ps and backend_agg to prevent module-level - texmanager imports. Now these imports only occur if text.usetex - rc setting is true - DSD +2006-04-13 + Fixed a bug Ryan found using usetex with sans-serif fonts and exponential + tick labels - DSD -2006-04-10 Committed changes required for building mpl on win32 - platforms with visual studio. This allows wxpython - blitting for fast animations. - CM +2006-04-11 + Refactored backend_ps and backend_agg to prevent module-level texmanager + imports. Now these imports only occur if text.usetex rc setting is true - + DSD -2006-04-10 Fixed an off-by-one bug in Axes.change_geometry. +2006-04-10 + Committed changes required for building mpl on win32 platforms with visual + studio. This allows wxpython blitting for fast animations. - CM -2006-04-10 Fixed bug in pie charts where wedge wouldn't have label in - legend. Submitted by Simon Hildebrandt. - ADS +2006-04-10 + Fixed an off-by-one bug in Axes.change_geometry. -2006-05-06 Usetex makes temporary latex and dvi files in a temporary - directory, rather than in the user's current working - directory - DSD +2006-04-10 + Fixed bug in pie charts where wedge wouldn't have label in legend. + Submitted by Simon Hildebrandt. - ADS -2006-04-05 Applied Ken's wx deprecation warning patch closing sf patch - #1465371 - JDH +2006-05-06 + Usetex makes temporary latex and dvi files in a temporary directory, rather + than in the user's current working directory - DSD -2006-04-05 Added support for the new API in the postscript backend. - Allows values to be masked using nan's, and faster file - creation - DSD +2006-04-05 + Applied Ken's wx deprecation warning patch closing sf patch #1465371 - JDH -2006-04-05 Use python's subprocess module for usetex calls to - external programs. subprocess catches when they exit - abnormally so an error can be raised. - DSD +2006-04-05 + Added support for the new API in the postscript backend. Allows values to + be masked using nan's, and faster file creation - DSD -2006-04-03 Fixed the bug in which widgets would not respond to - events. This regressed the twinx functionality, so I - also updated subplots_adjust to update axes that share - an x or y with a subplot instance. - CM +2006-04-05 + Use python's subprocess module for usetex calls to external programs. + subprocess catches when they exit abnormally so an error can be raised. - + DSD -2006-04-02 Moved PBox class to transforms and deleted pbox.py; - made pylab axis command a thin wrapper for Axes.axis; - more tweaks to aspect-ratio handling; fixed Axes.specgram - to account for the new imshow default of unit aspect - ratio; made contour set the Axes.dataLim. - EF +2006-04-03 + Fixed the bug in which widgets would not respond to events. This regressed + the twinx functionality, so I also updated subplots_adjust to update axes + that share an x or y with a subplot instance. - CM -2006-03-31 Fixed the Qt "Underlying C/C++ object deleted" bug. - JRE +2006-04-02 + Moved PBox class to transforms and deleted pbox.py; made pylab axis command + a thin wrapper for Axes.axis; more tweaks to aspect-ratio handling; fixed + Axes.specgram to account for the new imshow default of unit aspect ratio; + made contour set the Axes.dataLim. - EF -2006-03-31 Applied Vasily Sulatskov's Qt Navigation Toolbar enhancement. - JRE +2006-03-31 + Fixed the Qt "Underlying C/C++ object deleted" bug. - JRE -2006-03-31 Ported Norbert's rewriting of Halldor's stineman_interp - algorithm to make it numerix compatible and added code to - matplotlib.mlab. See examples/interp_demo.py - JDH +2006-03-31 + Applied Vasily Sulatskov's Qt Navigation Toolbar enhancement. - JRE -2006-03-30 Fixed a bug in aspect ratio handling; blocked potential - crashes when panning with button 3; added axis('image') - support. - EF +2006-03-31 + Ported Norbert's rewriting of Halldor's stineman_interp algorithm to make + it numerix compatible and added code to matplotlib.mlab. See + examples/interp_demo.py - JDH -2006-03-28 More changes to aspect ratio handling; new PBox class - in new file pbox.py to facilitate resizing and repositioning - axes; made PolarAxes maintain unit aspect ratio. - EF +2006-03-30 + Fixed a bug in aspect ratio handling; blocked potential crashes when + panning with button 3; added axis('image') support. - EF -2006-03-23 Refactored TextWithDash class to inherit from, rather than - delegate to, the Text class. Improves object inspection - and closes bug # 1357969 - DSD +2006-03-28 + More changes to aspect ratio handling; new PBox class in new file pbox.py + to facilitate resizing and repositioning axes; made PolarAxes maintain unit + aspect ratio. - EF -2006-03-22 Improved aspect ratio handling, including pylab interface. - Interactive resizing, pan, zoom of images and plots - (including panels with a shared axis) should work. - Additions and possible refactoring are still likely. - EF +2006-03-23 + Refactored TextWithDash class to inherit from, rather than delegate to, the + Text class. Improves object inspection and closes bug # 1357969 - DSD -2006-03-21 Added another colorbrewer colormap (RdYlBu) - JSWHIT +2006-03-22 + Improved aspect ratio handling, including pylab interface. Interactive + resizing, pan, zoom of images and plots (including panels with a shared + axis) should work. Additions and possible refactoring are still likely. - + EF -2006-03-21 Fixed tickmarks for logscale plots over very large ranges. - Closes bug # 1232920 - DSD +2006-03-21 + Added another colorbrewer colormap (RdYlBu) - JSWHIT -2006-03-21 Added Rob Knight's arrow code; see examples/arrow_demo.py - JDH +2006-03-21 + Fixed tickmarks for logscale plots over very large ranges. Closes bug # + 1232920 - DSD -2006-03-20 Added support for masking values with nan's, using ADS's - isnan module and the new API. Works for \*Agg backends - DSD +2006-03-21 + Added Rob Knight's arrow code; see examples/arrow_demo.py - JDH -2006-03-20 Added contour.negative_linestyle rcParam - ADS +2006-03-20 + Added support for masking values with nan's, using ADS's isnan module and + the new API. Works for \*Agg backends - DSD -2006-03-20 Added _isnan extension module to test for nan with Numeric - - ADS +2006-03-20 + Added contour.negative_linestyle rcParam - ADS -2006-03-17 Added Paul and Alex's support for faceting with quadmesh - in sf patch 1411223 - JDH +2006-03-20 + Added _isnan extension module to test for nan with Numeric - ADS -2006-03-17 Added Charle Twardy's pie patch to support colors=None. - Closes sf patch 1387861 - JDH +2006-03-17 + Added Paul and Alex's support for faceting with quadmesh in sf patch + 1411223 - JDH -2006-03-17 Applied sophana's patch to support overlapping axes with - toolbar navigation by toggling activation with the 'a' key. - Closes sf patch 1432252 - JDH +2006-03-17 + Added Charle Twardy's pie patch to support colors=None. Closes sf patch + 1387861 - JDH -2006-03-17 Applied Aarre's linestyle patch for backend EMF; closes sf - patch 1449279 - JDH +2006-03-17 + Applied sophana's patch to support overlapping axes with toolbar navigation + by toggling activation with the 'a' key. Closes sf patch 1432252 - JDH -2006-03-17 Applied Jordan Dawe's patch to support kwarg properties - for grid lines in the grid command. Closes sf patch - 1451661 - JDH +2006-03-17 + Applied Aarre's linestyle patch for backend EMF; closes sf patch 1449279 - + JDH -2006-03-17 Center postscript output on page when using usetex - DSD +2006-03-17 + Applied Jordan Dawe's patch to support kwarg properties for grid lines in + the grid command. Closes sf patch 1451661 - JDH -2006-03-17 subprocess module built if Python <2.4 even if subprocess - can be imported from an egg - ADS +2006-03-17 + Center postscript output on page when using usetex - DSD -2006-03-17 Added _subprocess.c from Python upstream and hopefully - enabled building (without breaking) on Windows, although - not tested. - ADS +2006-03-17 + subprocess module built if Python <2.4 even if subprocess can be imported + from an egg - ADS -2006-03-17 Updated subprocess.py to latest Python upstream and - reverted name back to subprocess.py - ADS +2006-03-17 + Added _subprocess.c from Python upstream and hopefully enabled building + (without breaking) on Windows, although not tested. - ADS -2006-03-16 Added John Porter's 3D handling code +2006-03-17 + Updated subprocess.py to latest Python upstream and reverted name back to + subprocess.py - ADS +2006-03-16 + Added John Porter's 3D handling code ------------------------ -2006-03-16 Released 0.87.2 at revision 2150 +2006-03-16 + Released 0.87.2 at revision 2150 -2006-03-15 Fixed bug in MaxNLocator revealed by daigos@infinito.it. - The main change is that Locator.nonsingular now adjusts - vmin and vmax if they are nearly the same, not just if - they are equal. A new kwarg, "tiny", sets the threshold. - - EF +2006-03-15 + Fixed bug in MaxNLocator revealed by daigos@infinito.it. The main change + is that Locator.nonsingular now adjusts vmin and vmax if they are nearly + the same, not just if they are equal. A new kwarg, "tiny", sets the + threshold. - EF -2006-03-14 Added import of compatibility library for newer numpy - linear_algebra - TEO +2006-03-14 + Added import of compatibility library for newer numpy linear_algebra - TEO -2006-03-12 Extended "load" function to support individual columns and - moved "load" and "save" into matplotlib.mlab so they can be - used outside of pylab -- see examples/load_converter.py - - JDH +2006-03-12 + Extended "load" function to support individual columns and moved "load" and + "save" into matplotlib.mlab so they can be used outside of pylab -- see + examples/load_converter.py - JDH -2006-03-12 Added AutoDateFormatter and AutoDateLocator submitted - by James Evans. Try the load_converter.py example for a - demo. - ADS +2006-03-12 + Added AutoDateFormatter and AutoDateLocator submitted by James Evans. Try + the load_converter.py example for a demo. - ADS -2006-03-11 Added subprocess module from python-2.4 - DSD +2006-03-11 + Added subprocess module from python-2.4 - DSD -2006-03-11 Fixed landscape orientation support with the usetex - option. The backend_ps print_figure method was - getting complicated, I added a _print_figure_tex - method to maintain some degree of sanity - DSD +2006-03-11 + Fixed landscape orientation support with the usetex option. The backend_ps + print_figure method was getting complicated, I added a _print_figure_tex + method to maintain some degree of sanity - DSD -2006-03-11 Added "papertype" savefig kwarg for setting - postscript papersizes. papertype and ps.papersize - rc setting can also be set to "auto" to autoscale - pagesizes - DSD +2006-03-11 + Added "papertype" savefig kwarg for setting postscript papersizes. + papertype and ps.papersize rc setting can also be set to "auto" to + autoscale pagesizes - DSD -2006-03-09 Apply P-J's patch to make pstoeps work on windows - patch report # 1445612 - DSD +2006-03-09 + Apply P-J's patch to make pstoeps work on windows patch report # 1445612 - + DSD -2006-03-09 Make backend rc parameter case-insensitive - DSD +2006-03-09 + Make backend rc parameter case-insensitive - DSD -2006-03-07 Fixed bug in backend_ps related to C0-C6 papersizes, - which were causing problems with postscript viewers. - Supported page sizes include letter, legal, ledger, - A0-A10, and B0-B10 - DSD +2006-03-07 + Fixed bug in backend_ps related to C0-C6 papersizes, which were causing + problems with postscript viewers. Supported page sizes include letter, + legal, ledger, A0-A10, and B0-B10 - DSD ------------------------------------ -2006-03-07 Released 0.87.1 +2006-03-07 + Released 0.87.1 -2006-03-04 backend_cairo.py: - fix get_rgb() bug reported by Keith Briggs. - Require pycairo 1.0.2. - Support saving png to file-like objects. - SC +2006-03-04 + backend_cairo.py: fix get_rgb() bug reported by Keith Briggs. Require + pycairo 1.0.2. Support saving png to file-like objects. - SC -2006-03-03 Fixed pcolor handling of vmin, vmax - EF +2006-03-03 + Fixed pcolor handling of vmin, vmax - EF -2006-03-02 improve page sizing with usetex with the latex - geometry package. Closes bug # 1441629 - DSD +2006-03-02 + improve page sizing with usetex with the latex geometry package. Closes bug + # 1441629 - DSD -2006-03-02 Fixed dpi problem with usetex png output. Accepted a - modified version of patch # 1441809 - DSD +2006-03-02 + Fixed dpi problem with usetex png output. Accepted a modified version of + patch # 1441809 - DSD -2006-03-01 Fixed axis('scaled') to deal with case xmax < xmin - JSWHIT +2006-03-01 + Fixed axis('scaled') to deal with case xmax < xmin - JSWHIT -2006-03-01 Added reversed colormaps (with '_r' appended to name) - JSWHIT +2006-03-01 + Added reversed colormaps (with '_r' appended to name) - JSWHIT -2006-02-27 Improved eps bounding boxes with usetex - DSD +2006-02-27 + Improved eps bounding boxes with usetex - DSD -2006-02-27 Test svn commit, again! +2006-02-27 + Test svn commit, again! -2006-02-27 Fixed two dependency checking bugs related to usetex - on Windows - DSD +2006-02-27 + Fixed two dependency checking bugs related to usetex on Windows - DSD -2006-02-27 Made the rc deprecation warnings a little more human - readable. +2006-02-27 + Made the rc deprecation warnings a little more human readable. -2006-02-26 Update the previous gtk.main_quit() bug fix to use gtk.main_level() - - SC +2006-02-26 + Update the previous gtk.main_quit() bug fix to use gtk.main_level() - SC -2006-02-24 Implemented alpha support in contour and contourf - EF +2006-02-24 + Implemented alpha support in contour and contourf - EF -2006-02-22 Fixed gtk main quit bug when quit was called before - mainloop. - JDH +2006-02-22 + Fixed gtk main quit bug when quit was called before mainloop. - JDH -2006-02-22 Small change to colors.py to workaround apparent - bug in numpy masked array module - JSWHIT +2006-02-22 + Small change to colors.py to workaround apparent bug in numpy masked array + module - JSWHIT -2006-02-22 Fixed bug in ScalarMappable.to_rgba() reported by - Ray Jones, and fixed incorrect fix found by Jeff - Whitaker - EF +2006-02-22 + Fixed bug in ScalarMappable.to_rgba() reported by Ray Jones, and fixed + incorrect fix found by Jeff Whitaker - EF -------------------------------- -2006-02-22 Released 0.87 +2006-02-22 + Released 0.87 -2006-02-21 Fixed portrait/landscape orientation in postscript backend - DSD +2006-02-21 + Fixed portrait/landscape orientation in postscript backend - DSD -2006-02-21 Fix bug introduced in yesterday's bug fix - SC +2006-02-21 + Fix bug introduced in yesterday's bug fix - SC -2006-02-20 backend_gtk.py FigureCanvasGTK.draw(): fix bug reported by - David Tremouilles - SC +2006-02-20 + backend_gtk.py FigureCanvasGTK.draw(): fix bug reported by David + Tremouilles - SC -2006-02-20 Remove the "pygtk.require('2.4')" error from - examples/embedding_in_gtk2.py - SC +2006-02-20 + Remove the "pygtk.require('2.4')" error from examples/embedding_in_gtk2.py + - SC -2006-02-18 backend_gtk.py FigureCanvasGTK.draw(): simplify to use (rather than - duplicate) the expose_event() drawing code - SC +2006-02-18 + backend_gtk.py FigureCanvasGTK.draw(): simplify to use (rather than + duplicate) the expose_event() drawing code - SC -2006-02-12 Added stagger or waterfall plot capability to LineCollection; - illustrated in examples/collections.py. - EF +2006-02-12 + Added stagger or waterfall plot capability to LineCollection; illustrated + in examples/collections.py. - EF -2006-02-11 Massive cleanup of the usetex code in the postscript backend. Possibly - fixed the clipping issue users were reporting with older versions of - ghostscript - DSD +2006-02-11 + Massive cleanup of the usetex code in the postscript backend. Possibly + fixed the clipping issue users were reporting with older versions of + ghostscript - DSD -2006-02-11 Added autolim kwarg to axes.add_collection. Changed - collection get_verts() methods accordingly. - EF +2006-02-11 + Added autolim kwarg to axes.add_collection. Changed collection get_verts() + methods accordingly. - EF -2006-02-09 added a temporary rc parameter text.dvipnghack, to allow Mac users to get nice - results with the usetex option. - DSD +2006-02-09 + added a temporary rc parameter text.dvipnghack, to allow Mac users to get + nice results with the usetex option. - DSD -2006-02-09 Fixed a bug related to setting font sizes with the usetex option. - DSD +2006-02-09 + Fixed a bug related to setting font sizes with the usetex option. - DSD -2006-02-09 Fixed a bug related to usetex's latex code. - DSD +2006-02-09 + Fixed a bug related to usetex's latex code. - DSD -2006-02-09 Modified behavior of font.size rc setting. You should define font.size in pts, - which will set the "medium" or default fontsize. Special text sizes like axis - labels or tick labels can be given relative font sizes like small, large, - x-large, etc. and will scale accordingly. - DSD +2006-02-09 + Modified behavior of font.size rc setting. You should define font.size in + pts, which will set the "medium" or default fontsize. Special text sizes + like axis labels or tick labels can be given relative font sizes like + small, large, x-large, etc. and will scale accordingly. - DSD -2006-02-08 Added py2exe specific datapath check again. Also added new - py2exe helper function get_py2exe_datafiles for use in py2exe - setup.py scripts. - CM +2006-02-08 + Added py2exe specific datapath check again. Also added new py2exe helper + function get_py2exe_datafiles for use in py2exe setup.py scripts. - CM -2006-02-02 Added box function to pylab +2006-02-02 + Added box function to pylab -2006-02-02 Fixed a problem in setupext.py, tk library formatted in unicode - caused build problems - DSD +2006-02-02 + Fixed a problem in setupext.py, tk library formatted in unicode caused + build problems - DSD -2006-02-01 Dropped TeX engine support in usetex to focus on LaTeX. - DSD +2006-02-01 + Dropped TeX engine support in usetex to focus on LaTeX. - DSD -2006-01-29 Improved usetex option to respect the serif, sans-serif, monospace, - and cursive rc settings. Removed the font.latex.package rc setting, - it is no longer required - DSD +2006-01-29 + Improved usetex option to respect the serif, sans-serif, monospace, and + cursive rc settings. Removed the font.latex.package rc setting, it is no + longer required - DSD -2006-01-29 Fixed tex's caching to include font.family rc information - DSD +2006-01-29 + Fixed tex's caching to include font.family rc information - DSD -2006-01-29 Fixed subpixel rendering bug in \*Agg that was causing - uneven gridlines - JDH +2006-01-29 + Fixed subpixel rendering bug in \*Agg that was causing uneven gridlines - + JDH -2006-01-28 Added fontcmd to backend_ps's RendererPS.draw_tex, to support other - font families in eps output - DSD +2006-01-28 + Added fontcmd to backend_ps's RendererPS.draw_tex, to support other font + families in eps output - DSD -2006-01-28 Added MaxNLocator to ticker.py, and changed contour.py to - use it by default. - EF +2006-01-28 + Added MaxNLocator to ticker.py, and changed contour.py to use it by + default. - EF -2006-01-28 Added fontcmd to backend_ps's RendererPS.draw_tex, to support other - font families in eps output - DSD +2006-01-28 + Added fontcmd to backend_ps's RendererPS.draw_tex, to support other font + families in eps output - DSD -2006-01-27 Buffered reading of matplotlibrc parameters in order to allow - 'verbose' settings to be processed first (allows verbose.report - during rc validation process) - DSD +2006-01-27 + Buffered reading of matplotlibrc parameters in order to allow 'verbose' + settings to be processed first (allows verbose.report during rc validation + process) - DSD -2006-01-27 Removed setuptools support from setup.py and created a - separate setupegg.py file to replace it. - CM +2006-01-27 + Removed setuptools support from setup.py and created a separate setupegg.py + file to replace it. - CM -2006-01-26 Replaced the ugly datapath logic with a cleaner approach from - http://wiki.python.org/moin/DistutilsInstallDataScattered. - Overrides the install_data command. - CM +2006-01-26 + Replaced the ugly datapath logic with a cleaner approach from + http://wiki.python.org/moin/DistutilsInstallDataScattered. Overrides the + install_data command. - CM -2006-01-24 Don't use character typecodes in cntr.c --- changed to use - defined typenumbers instead. - TEO +2006-01-24 + Don't use character typecodes in cntr.c --- changed to use defined + typenumbers instead. - TEO -2006-01-24 Fixed some bugs in usetex's and ps.usedistiller's dependency +2006-01-24 + Fixed some bugs in usetex's and ps.usedistiller's dependency -2006-01-24 Added masked array support to scatter - EF +2006-01-24 + Added masked array support to scatter - EF -2006-01-24 Fixed some bugs in usetex's and ps.usedistiller's dependency - checking - DSD +2006-01-24 + Fixed some bugs in usetex's and ps.usedistiller's dependency checking - DSD ------------------------------- -2006-01-24 Released 0.86.2 +2006-01-24 + Released 0.86.2 -2006-01-20 Added a converters dict to pylab load to convert selected - columns to float -- especially useful for files with date - strings, uses a datestr2num converter - JDH +2006-01-20 + Added a converters dict to pylab load to convert selected columns to float + -- especially useful for files with date strings, uses a datestr2num + converter - JDH -2006-01-20 Added datestr2num to matplotlib dates to convert a string - or sequence of strings to a matplotlib datenum +2006-01-20 + Added datestr2num to matplotlib dates to convert a string or sequence of + strings to a matplotlib datenum -2006-01-18 Added quadrilateral pcolormesh patch 1409190 by Alex Mont - and Paul Kienzle -- this is \*Agg only for now. See - examples/quadmesh_demo.py - JDH +2006-01-18 + Added quadrilateral pcolormesh patch 1409190 by Alex Mont and Paul Kienzle + -- this is \*Agg only for now. See examples/quadmesh_demo.py - JDH -2006-01-18 Added Jouni's boxplot patch - JDH +2006-01-18 + Added Jouni's boxplot patch - JDH -2006-01-18 Added comma delimiter for pylab save - JDH +2006-01-18 + Added comma delimiter for pylab save - JDH -2006-01-12 Added Ryan's legend patch - JDH +2006-01-12 + Added Ryan's legend patch - JDH - -2006-1-12 Fixed numpy / numeric to use .dtype.char to keep in SYNC with numpy SVN +2006-01-12 + Fixed numpy / numeric to use .dtype.char to keep in SYNC with numpy SVN --------------------------- -2006-1-11 Released 0.86.1 +2006-01-11 + Released 0.86.1 -2006-1-11 Fixed setup.py for win32 build and added rc template to the MANIFEST.in +2006-01-11 + Fixed setup.py for win32 build and added rc template to the MANIFEST.in -2006-1-10 Added xpdf distiller option. matplotlibrc ps.usedistiller can now be - none, false, ghostscript, or xpdf. Validation checks for - dependencies. This needs testing, but the xpdf option should produce - the highest-quality output and small file sizes - DSD +2006-01-10 + Added xpdf distiller option. matplotlibrc ps.usedistiller can now be none, + false, ghostscript, or xpdf. Validation checks for dependencies. This needs + testing, but the xpdf option should produce the highest-quality output and + small file sizes - DSD -2006-01-10 For the usetex option, backend_ps now does all the LaTeX work in the - os's temp directory - DSD +2006-01-10 + For the usetex option, backend_ps now does all the LaTeX work in the os's + temp directory - DSD -2006-1-10 Added checks for usetex dependencies. - DSD +2006-01-10 + Added checks for usetex dependencies. - DSD --------------------------------- -2006-1-9 Released 0.86 +2006-01-09 + Released 0.86 -2006-1-4 Changed to support numpy (new name for scipy_core) - TEO +2006-01-04 + Changed to support numpy (new name for scipy_core) - TEO -2006-1-4 Added Mark's scaled axes patch for shared axis +2006-01-04 + Added Mark's scaled axes patch for shared axis -2005-12-28 Added Chris Barker's build_wxagg patch - JDH +2005-12-28 + Added Chris Barker's build_wxagg patch - JDH -2005-12-27 Altered numerix/scipy to support new scipy package - structure - TEO +2005-12-27 + Altered numerix/scipy to support new scipy package structure - TEO -2005-12-20 Fixed Jame's Boyles date tick reversal problem - JDH +2005-12-20 + Fixed Jame's Boyles date tick reversal problem - JDH -2005-12-20 Added Jouni's rc patch to support lists of keys to set on - - JDH +2005-12-20 + Added Jouni's rc patch to support lists of keys to set on - JDH -2005-12-12 Updated pyparsing and mathtext for some speed enhancements - (Thanks Paul McGuire) and minor fixes to scipy numerix and - setuptools +2005-12-12 + Updated pyparsing and mathtext for some speed enhancements (Thanks Paul + McGuire) and minor fixes to scipy numerix and setuptools -2005-12-12 Matplotlib data is now installed as package_data in - the matplotlib module. This gets rid of checking the - many possibilities in matplotlib._get_data_path() - CM +2005-12-12 + Matplotlib data is now installed as package_data in the matplotlib module. + This gets rid of checking the many possibilities in + matplotlib._get_data_path() - CM -2005-12-11 Support for setuptools/pkg_resources to build and use - matplotlib as an egg. Still allows matplotlib to exist - using a traditional distutils install. - ADS +2005-12-11 + Support for setuptools/pkg_resources to build and use matplotlib as an egg. + Still allows matplotlib to exist using a traditional distutils install. - + ADS -2005-12-03 Modified setup to build matplotlibrc based on compile time - findings. It will set numerix in the order of scipy, - numarray, Numeric depending on which are founds, and - backend as in preference order GTKAgg, WXAgg, TkAgg, GTK, - Agg, PS +2005-12-03 + Modified setup to build matplotlibrc based on compile time findings. It + will set numerix in the order of scipy, numarray, Numeric depending on + which are founds, and backend as in preference order GTKAgg, WXAgg, TkAgg, + GTK, Agg, PS -2005-12-03 Modified scipy patch to support Numeric, scipy and numarray - Some work remains to be done because some of the scipy - imports are broken if only the core is installed. e.g., - apparently we need from scipy.basic.fftpack import * rather - than from scipy.fftpack import * +2005-12-03 + Modified scipy patch to support Numeric, scipy and numarray Some work + remains to be done because some of the scipy imports are broken if only the + core is installed. e.g., apparently we need from scipy.basic.fftpack + import * rather than from scipy.fftpack import * -2005-12-03 Applied some fixes to Nicholas Young's nonuniform image - patch +2005-12-03 + Applied some fixes to Nicholas Young's nonuniform image patch -2005-12-01 Applied Alex Gontmakher hatch patch - PS only for now +2005-12-01 + Applied Alex Gontmakher hatch patch - PS only for now -2005-11-30 Added Rob McMullen's EMF patch +2005-11-30 + Added Rob McMullen's EMF patch -2005-11-30 Added Daishi's patch for scipy +2005-11-30 + Added Daishi's patch for scipy -2005-11-30 Fixed out of bounds draw markers segfault in agg +2005-11-30 + Fixed out of bounds draw markers segfault in agg -2005-11-28 Got TkAgg blitting working 100% (cross fingers) correctly. - CM +2005-11-28 + Got TkAgg blitting working 100% (cross fingers) correctly. - CM -2005-11-27 Multiple changes in cm.py, colors.py, figure.py, image.py, - contour.py, contour_demo.py; new _cm.py, examples/image_masked.py. - 1) Separated the color table data from cm.py out into - a new file, _cm.py, to make it easier to find the actual - code in cm.py and to add new colormaps. Also added - some line breaks to the color data dictionaries. Everything - from _cm.py is imported by cm.py, so the split should be - transparent. - 2) Enabled automatic generation of a colormap from - a list of colors in contour; see modified - examples/contour_demo.py. - 3) Support for imshow of a masked array, with the - ability to specify colors (or no color at all) for - masked regions, and for regions that are above or - below the normally mapped region. See - examples/image_masked.py. - 4) In support of the above, added two new classes, - ListedColormap, and no_norm, to colors.py, and modified - the Colormap class to include common functionality. Added - a clip kwarg to the normalize class. Reworked color - handling in contour.py, especially in the ContourLabeller - mixin. - - EF +2005-11-27 + Multiple changes in cm.py, colors.py, figure.py, image.py, contour.py, + contour_demo.py; new _cm.py, examples/image_masked.py. -2005-11-25 Changed text.py to ensure color is hashable. EF + 1. Separated the color table data from cm.py out into a new file, _cm.py, + to make it easier to find the actual code in cm.py and to add new + colormaps. Also added some line breaks to the color data dictionaries. + Everything from _cm.py is imported by cm.py, so the split should be + transparent. + 2. Enabled automatic generation of a colormap from a list of colors in + contour; see modified examples/contour_demo.py. + 3. Support for imshow of a masked array, with the ability to specify colors + (or no color at all) for masked regions, and for regions that are above + or below the normally mapped region. See examples/image_masked.py. + 4. In support of the above, added two new classes, ListedColormap, and + no_norm, to colors.py, and modified the Colormap class to include common + functionality. Added a clip kwarg to the normalize class. Reworked + color handling in contour.py, especially in the ContourLabeller mixin. --------------------------------- + - EF -2005-11-16 Released 0.85 +2005-11-25 + Changed text.py to ensure color is hashable. EF -2005-11-16 Changed the default default linewidth in rc to 1.0 +-------------------------------- -2005-11-16 Replaced agg_to_gtk_drawable with pure pygtk pixbuf code in - backend_gtkagg. When the equivalent is doe for blit, the - agg extension code will no longer be needed +2005-11-16 + Released 0.85 -2005-11-16 Added a maxdict item to cbook to prevent caches from - growing w/o bounds +2005-11-16 + Changed the default default linewidth in rc to 1.0 -2005-11-15 Fixed a colorup/colordown reversal bug in finance.py -- - Thanks Gilles +2005-11-16 + Replaced agg_to_gtk_drawable with pure pygtk pixbuf code in backend_gtkagg. + When the equivalent is doe for blit, the agg extension code will no longer + be needed -2005-11-15 Applied Jouni K Steppanen's boxplot patch SF patch#1349997 - - JDH +2005-11-16 + Added a maxdict item to cbook to prevent caches from growing w/o bounds +2005-11-15 + Fixed a colorup/colordown reversal bug in finance.py -- Thanks Gilles -2005-11-09 added axisbelow attr for Axes to determine whether ticks and such - are above or below the actors +2005-11-15 + Applied Jouni K Steppanen's boxplot patch SF patch#1349997 - JDH -2005-11-08 Added Nicolas' irregularly spaced image patch +2005-11-09 + added axisbelow attr for Axes to determine whether ticks and such are above + or below the actors +2005-11-08 + Added Nicolas' irregularly spaced image patch -2005-11-08 Deprecated HorizontalSpanSelector and replaced with - SpanSelection that takes a third arg, direction. The - new SpanSelector supports horizontal and vertical span - selection, and the appropriate min/max is returned. - CM +2005-11-08 + Deprecated HorizontalSpanSelector and replaced with SpanSelection that + takes a third arg, direction. The new SpanSelector supports horizontal and + vertical span selection, and the appropriate min/max is returned. - CM -2005-11-08 Added lineprops dialog for gtk +2005-11-08 + Added lineprops dialog for gtk -2005-11-03 Added FIFOBuffer class to mlab to support real time feeds - and examples/fifo_buffer.py +2005-11-03 + Added FIFOBuffer class to mlab to support real time feeds and + examples/fifo_buffer.py -2005-11-01 Contributed Nickolas Young's patch for afm mathtext to - support mathtext based upon the standard postscript Symbol - font when ps.usetex = True. +2005-11-01 + Contributed Nickolas Young's patch for afm mathtext to support mathtext + based upon the standard postscript Symbol font when ps.usetex = True. -2005-10-26 Added support for scatter legends - thanks John Gill +2005-10-26 + Added support for scatter legends - thanks John Gill -2005-10-20 Fixed image clipping bug that made some tex labels - disappear. JDH +2005-10-20 + Fixed image clipping bug that made some tex labels disappear. JDH -2005-10-14 Removed sqrt from dvipng 1.6 alpha channel mask. +2005-10-14 + Removed sqrt from dvipng 1.6 alpha channel mask. -2005-10-14 Added width kwarg to hist function +2005-10-14 + Added width kwarg to hist function -2005-10-10 Replaced all instances of os.rename with shutil.move +2005-10-10 + Replaced all instances of os.rename with shutil.move -2005-10-05 Added Michael Brady's ydate patch +2005-10-05 + Added Michael Brady's ydate patch -2005-10-04 Added rkern's texmanager patch +2005-10-04 + Added rkern's texmanager patch -2005-09-25 contour.py modified to use a single ContourSet class - that handles filled contours, line contours, and labels; - added keyword arg (clip_ends) to contourf. - Colorbar modified to work with new ContourSet object; - if the ContourSet has lines rather than polygons, the - colorbar will follow suit. Fixed a bug introduced in - 0.84, in which contourf(...,colors=...) was broken - EF +2005-09-25 + contour.py modified to use a single ContourSet class that handles filled + contours, line contours, and labels; added keyword arg (clip_ends) to + contourf. Colorbar modified to work with new ContourSet object; if the + ContourSet has lines rather than polygons, the colorbar will follow suit. + Fixed a bug introduced in 0.84, in which contourf(...,colors=...) was + broken - EF ------------------------------- -2005-09-19 Released 0.84 - -2005-09-14 Added a new 'resize_event' which triggers a callback with a - backend_bases.ResizeEvent object - JDH - -2005-09-14 font_manager.py: removed chkfontpath from x11FontDirectory() - SC - -2005-09-14 Factored out auto date locator/formatter factory code into - matplotlib.date.date_ticker_factory; applies John Bryne's - quiver patch. - -2005-09-13 Added Mark's axes positions history patch #1286915 +2005-09-19 + Released 0.84 -2005-09-09 Added support for auto canvas resizing with - fig.set_figsize_inches(9,5,forward=True) # inches - OR - fig.resize(400,300) # pixels +2005-09-14 + Added a new 'resize_event' which triggers a callback with a + backend_bases.ResizeEvent object - JDH -2005-09-07 figure.py: update Figure.draw() to use the updated - renderer.draw_image() so that examples/figimage_demo.py works again. - examples/stock_demo.py: remove data_clipping (which no longer - exists) - SC +2005-09-14 + font_manager.py: removed chkfontpath from x11FontDirectory() - SC -2005-09-06 Added Eric's tick.direction patch: in or out in rc +2005-09-14 + Factored out auto date locator/formatter factory code into + matplotlib.date.date_ticker_factory; applies John Bryne's quiver patch. -2005-09-06 Added Martin's rectangle selector widget +2005-09-13 + Added Mark's axes positions history patch #1286915 -2005-09-04 Fixed a logic err in text.py that was preventing rgxsuper - from matching - JDH +2005-09-09 + Added support for auto canvas resizing with:: -2005-08-29 Committed Ken's wx blit patch #1275002 + fig.set_figsize_inches(9,5,forward=True) # inches -2005-08-26 colorbar modifications - now uses contourf instead of imshow - so that colors used by contourf are displayed correctly. - Added two new keyword args (cspacing and clabels) that are - only relevant for ContourMappable images - JSWHIT + OR:: -2005-08-24 Fixed a PS image bug reported by Darren - JDH + fig.resize(400,300) # pixels -2005-08-23 colors.py: change hex2color() to accept unicode strings as well as - normal strings. Use isinstance() instead of types.IntType etc - SC +2005-09-07 + figure.py: update Figure.draw() to use the updated renderer.draw_image() so + that examples/figimage_demo.py works again. examples/stock_demo.py: remove + data_clipping (which no longer exists) - SC -2005-08-16 removed data_clipping line and rc property - JDH +2005-09-06 + Added Eric's tick.direction patch: in or out in rc -2005-08-22 backend_svg.py: Remove redundant "x=0.0 y=0.0" from svg element. - Increase svg version from 1.0 to 1.1. Add viewBox attribute to svg - element to allow SVG documents to scale-to-fit into an arbitrary - viewport - SC +2005-09-06 + Added Martin's rectangle selector widget -2005-08-16 Added Eric's dot marker patch - JDH +2005-09-04 + Fixed a logic err in text.py that was preventing rgxsuper from matching - + JDH -2005-08-08 Added blitting/animation for TkAgg - CM +2005-08-29 + Committed Ken's wx blit patch #1275002 -2005-08-05 Fixed duplicate tickline bug - JDH +2005-08-26 + colorbar modifications - now uses contourf instead of imshow so that colors + used by contourf are displayed correctly. Added two new keyword args + (cspacing and clabels) that are only relevant for ContourMappable images - + JSWHIT -2005-08-05 Fixed a GTK animation bug that cropped up when doing - animations in gtk//gtkagg canvases that had widgets packed - above them +2005-08-24 + Fixed a PS image bug reported by Darren - JDH -2005-08-05 Added Clovis Goldemberg patch to the tk save dialog +2005-08-23 + colors.py: change hex2color() to accept unicode strings as well as normal + strings. Use isinstance() instead of types.IntType etc - SC -2005-08-04 Removed origin kwarg from backend.draw_image. origin is - handled entirely by the frontend now. +2005-08-16 + removed data_clipping line and rc property - JDH -2005-07-03 Fixed a bug related to TeX commands in backend_ps +2005-08-22 + backend_svg.py: Remove redundant "x=0.0 y=0.0" from svg element. Increase + svg version from 1.0 to 1.1. Add viewBox attribute to svg element to allow + SVG documents to scale-to-fit into an arbitrary viewport - SC -2005-08-03 Fixed SVG images to respect upper and lower origins. - -2005-08-03 Added flipud method to image and removed it from to_str. - -2005-07-29 Modified figure.figaspect to take an array or number; - modified backend_svg to write utf-8 - JDH - -2005-07-30 backend_svg.py: embed png image files in svg rather than linking - to a separate png file, fixes bug #1245306 (thanks to Norbert Nemec - for the patch) - SC - ---------------------------- +2005-08-16 + Added Eric's dot marker patch - JDH -2005-07-29 Released 0.83.2 +2005-08-08 + Added blitting/animation for TkAgg - CM -2005-07-27 Applied SF patch 1242648: minor rounding error in - IndexDateFormatter in dates.py +2005-08-05 + Fixed duplicate tickline bug - JDH -2005-07-27 Applied sf patch 1244732: Scale axis such that circle - looks like circle - JDH +2005-08-05 + Fixed a GTK animation bug that cropped up when doing animations in + gtk//gtkagg canvases that had widgets packed above them -2005-07-29 Improved message reporting in texmanager and backend_ps - DSD +2005-08-05 + Added Clovis Goldemberg patch to the tk save dialog -2005-07-28 backend_gtk.py: update FigureCanvasGTK.draw() (needed due to the - recent expose_event() change) so that examples/anim.py works in the - usual way - SC +2005-08-04 + Removed origin kwarg from backend.draw_image. origin is handled entirely + by the frontend now. -2005-07-26 Added new widgets Cursor and HorizontalSpanSelector to - matplotlib.widgets. See examples/widgets/cursor.py and - examples/widgets/span_selector.py - JDH +2005-07-03 + Fixed a bug related to TeX commands in backend_ps -2005-07-26 added draw event to mpl event hierarchy -- triggered on - figure.draw +2005-08-03 + Fixed SVG images to respect upper and lower origins. -2005-07-26 backend_gtk.py: allow 'f' key to toggle window fullscreen mode +2005-08-03 + Added flipud method to image and removed it from to_str. -2005-07-26 backend_svg.py: write "<.../>" elements all on one line and remove - surplus spaces - SC +2005-07-29 + Modified figure.figaspect to take an array or number; modified backend_svg + to write utf-8 - JDH -2005-07-25 backend_svg.py: simplify code by deleting GraphicsContextSVG and - RendererSVG.new_gc(), and moving the gc.get_capstyle() code into - RendererSVG._get_gc_props_svg() - SC +2005-07-30 + backend_svg.py: embed png image files in svg rather than linking to a + separate png file, fixes bug #1245306 (thanks to Norbert Nemec for the + patch) - SC -2005-07-24 backend_gtk.py: call FigureCanvasBase.motion_notify_event() on - all motion-notify-events, not just ones where a modifier key or - button has been pressed (fixes bug report from Niklas Volbers) - SC - -2005-07-24 backend_gtk.py: modify print_figure() use own pixmap, fixing - problems where print_figure() overwrites the display pixmap. - return False from all button/key etc events - to allow the event - to propagate further - SC - -2005-07-23 backend_gtk.py: change expose_event from using set_back_pixmap(); - clear() to draw_drawable() - SC - -2005-07-23 backend_gtk.py: removed pygtk.require() - matplotlib/__init__.py: delete 'FROZEN' and 'McPLError' which are - no longer used - SC - -2005-07-22 backend_gdk.py: removed pygtk.require() - SC - -2005-07-21 backend_svg.py: Remove unused imports. Remove methods doc strings - which just duplicate the docs from backend_bases.py. Rename - draw_mathtext to _draw_mathtext. - SC - -2005-07-17 examples/embedding_in_gtk3.py: new example demonstrating placing - a FigureCanvas in a gtk.ScrolledWindow - SC - -2005-07-14 Fixed a Windows related bug (#1238412) in texmanager - DSD - -2005-07-11 Fixed color kwarg bug, setting color=1 or 0 caused an - exception - DSD - -2005-07-07 Added Eric's MA set_xdata Line2D fix - JDH - -2005-07-06 Made HOME/.matplotlib the new config dir where the - matplotlibrc file, the ttf.cache, and the tex.cache live. - The new default filenames in .matplotlib have no leading - dot and are not hidden. e.g., the new names are matplotlibrc - tex.cache ttffont.cache. This is how ipython does it so it - must be right. If old files are found, a warning is issued - and they are moved to the new location. Also fixed - texmanager to put all files, including temp files in - ~/.matplotlib/tex.cache, which allows you to usetex in - non-writable dirs. - -2005-07-05 Fixed bug #1231611 in subplots adjust layout. The problem - was that the text caching mechanism was not using the - transformation affine in the key. - JDH - -2005-07-05 Fixed default backend import problem when using API (SF bug - # 1209354 - see API_CHANGES for more info - JDH - -2005-07-04 backend_gtk.py: require PyGTK version 2.0.0 or higher - SC - -2005-06-30 setupext.py: added numarray_inc_dirs for building against - numarray when not installed in standard location - ADS - -2005-06-27 backend_svg.py: write figure width, height as int, not float. - Update to fix some of the pychecker warnings - SC - -2005-06-23 Updated examples/agg_test.py to demonstrate curved paths - and fills - JDH +--------------------------- -2005-06-21 Moved some texmanager and backend_agg tex caching to class - level rather than instance level - JDH +2005-07-29 + Released 0.83.2 -2005-06-20 setupext.py: fix problem where _nc_backend_gdk is installed to the - wrong directory - SC +2005-07-27 + Applied SF patch 1242648: minor rounding error in IndexDateFormatter in + dates.py -2005-06-19 Added 10.4 support for CocoaAgg. - CM +2005-07-27 + Applied sf patch 1244732: Scale axis such that circle looks like circle - + JDH -2005-06-18 Move Figure.get_width_height() to FigureCanvasBase and return - int instead of float. - SC +2005-07-29 + Improved message reporting in texmanager and backend_ps - DSD -2005-06-18 Applied Ted Drain's QtAgg patch: 1) Changed the toolbar to - be a horizontal bar of push buttons instead of a QToolbar - and updated the layout algorithms in the main window - accordingly. This eliminates the ability to drag and drop - the toolbar and detach it from the window. 2) Updated the - resize algorithm in the main window to show the correct - size for the plot widget as requested. This works almost - correctly right now. It looks to me like the final size of - the widget is off by the border of the main window but I - haven't figured out a way to get that information yet. We - could just add a small margin to the new size but that - seems a little hacky. 3) Changed the x/y location label to - be in the toolbar like the Tk backend instead of as a - status line at the bottom of the widget. 4) Changed the - toolbar pixmaps to use the ppm files instead of the png - files. I noticed that the Tk backend buttons looked much - nicer and it uses the ppm files so I switched them. +2005-07-28 + backend_gtk.py: update FigureCanvasGTK.draw() (needed due to the recent + expose_event() change) so that examples/anim.py works in the usual way - SC -2005-06-17 Modified the gtk backend to not queue mouse motion events. - This allows for live updates when dragging a slider. - CM +2005-07-26 + Added new widgets Cursor and HorizontalSpanSelector to matplotlib.widgets. + See examples/widgets/cursor.py and examples/widgets/span_selector.py - JDH -2005-06-17 Added starter CocoaAgg backend. Only works on OS 10.3 for - now and requires PyObjC. (10.4 is high priority) - CM +2005-07-26 + added draw event to mpl event hierarchy -- triggered on figure.draw -2005-06-17 Upgraded pyparsing and applied Paul McGuire's suggestions - for speeding things up. This more than doubles the speed - of mathtext in my simple tests. JDH +2005-07-26 + backend_gtk.py: allow 'f' key to toggle window fullscreen mode -2005-06-16 Applied David Cooke's subplot make_key patch +2005-07-26 + backend_svg.py: write "<.../>" elements all on one line and remove surplus + spaces - SC + +2005-07-25 + backend_svg.py: simplify code by deleting GraphicsContextSVG and + RendererSVG.new_gc(), and moving the gc.get_capstyle() code into + RendererSVG._get_gc_props_svg() - SC + +2005-07-24 + backend_gtk.py: call FigureCanvasBase.motion_notify_event() on all + motion-notify-events, not just ones where a modifier key or button has been + pressed (fixes bug report from Niklas Volbers) - SC + +2005-07-24 + backend_gtk.py: modify print_figure() use own pixmap, fixing problems where + print_figure() overwrites the display pixmap. return False from all + button/key etc events - to allow the event to propagate further - SC + +2005-07-23 + backend_gtk.py: change expose_event from using set_back_pixmap(); clear() + to draw_drawable() - SC + +2005-07-23 + backend_gtk.py: removed pygtk.require() matplotlib/__init__.py: delete + 'FROZEN' and 'McPLError' which are no longer used - SC + +2005-07-22 + backend_gdk.py: removed pygtk.require() - SC + +2005-07-21 + backend_svg.py: Remove unused imports. Remove methods doc strings which + just duplicate the docs from backend_bases.py. Rename draw_mathtext to + _draw_mathtext. - SC + +2005-07-17 + examples/embedding_in_gtk3.py: new example demonstrating placing a + FigureCanvas in a gtk.ScrolledWindow - SC + +2005-07-14 + Fixed a Windows related bug (#1238412) in texmanager - DSD + +2005-07-11 + Fixed color kwarg bug, setting color=1 or 0 caused an exception - DSD + +2005-07-07 + Added Eric's MA set_xdata Line2D fix - JDH + +2005-07-06 + Made HOME/.matplotlib the new config dir where the matplotlibrc file, the + ttf.cache, and the tex.cache live. The new default filenames in + .matplotlib have no leading dot and are not hidden. e.g., the new names + are matplotlibrc tex.cache ttffont.cache. This is how ipython does it so + it must be right. If old files are found, a warning is issued and they are + moved to the new location. Also fixed texmanager to put all files, + including temp files in ~/.matplotlib/tex.cache, which allows you to usetex + in non-writable dirs. + +2005-07-05 + Fixed bug #1231611 in subplots adjust layout. The problem was that the + text caching mechanism was not using the transformation affine in the key. + - JDH + +2005-07-05 + Fixed default backend import problem when using API (SF bug # 1209354 - + see API_CHANGES for more info - JDH + +2005-07-04 + backend_gtk.py: require PyGTK version 2.0.0 or higher - SC + +2005-06-30 + setupext.py: added numarray_inc_dirs for building against numarray when not + installed in standard location - ADS + +2005-06-27 + backend_svg.py: write figure width, height as int, not float. Update to + fix some of the pychecker warnings - SC + +2005-06-23 + Updated examples/agg_test.py to demonstrate curved paths and fills - JDH + +2005-06-21 + Moved some texmanager and backend_agg tex caching to class level rather + than instance level - JDH + +2005-06-20 + setupext.py: fix problem where _nc_backend_gdk is installed to the wrong + directory - SC + +2005-06-19 + Added 10.4 support for CocoaAgg. - CM + +2005-06-18 + Move Figure.get_width_height() to FigureCanvasBase and return int instead + of float. - SC + +2005-06-18 + Applied Ted Drain's QtAgg patch: 1) Changed the toolbar to be a horizontal + bar of push buttons instead of a QToolbar and updated the layout algorithms + in the main window accordingly. This eliminates the ability to drag and + drop the toolbar and detach it from the window. 2) Updated the resize + algorithm in the main window to show the correct size for the plot widget + as requested. This works almost correctly right now. It looks to me like + the final size of the widget is off by the border of the main window but I + haven't figured out a way to get that information yet. We could just add a + small margin to the new size but that seems a little hacky. 3) Changed the + x/y location label to be in the toolbar like the Tk backend instead of as a + status line at the bottom of the widget. 4) Changed the toolbar pixmaps to + use the ppm files instead of the png files. I noticed that the Tk backend + buttons looked much nicer and it uses the ppm files so I switched them. + +2005-06-17 + Modified the gtk backend to not queue mouse motion events. This allows for + live updates when dragging a slider. - CM + +2005-06-17 + Added starter CocoaAgg backend. Only works on OS 10.3 for now and requires + PyObjC. (10.4 is high priority) - CM + +2005-06-17 + Upgraded pyparsing and applied Paul McGuire's suggestions for speeding + things up. This more than doubles the speed of mathtext in my simple + tests. JDH + +2005-06-16 + Applied David Cooke's subplot make_key patch ---------------------------------- -2005-06-15 0.82 released +0.82 (2005-06-15) +----------------- -2005-06-15 Added subplot config tool to GTK* backends -- note you must - now import the NavigationToolbar2 from your backend of - choice rather than from backend_gtk because it needs to - know about the backend specific canvas -- see - examples/embedding_in_gtk2.py. Ditto for wx backend -- see - examples/embedding_in_wxagg.py +2005-06-15 + Added subplot config tool to GTK* backends -- note you must now import the + NavigationToolbar2 from your backend of choice rather than from backend_gtk + because it needs to know about the backend specific canvas -- see + examples/embedding_in_gtk2.py. Ditto for wx backend -- see + examples/embedding_in_wxagg.py -2005-06-15 backend_cairo.py: updated to use pycairo 0.5.0 - SC +2005-06-15 + backend_cairo.py: updated to use pycairo 0.5.0 - SC -2005-06-14 Wrote some GUI neutral widgets (Button, Slider, - RadioButtons, CheckButtons) in matplotlib.widgets. See - examples/widgets/\*.py - JDH +2005-06-14 + Wrote some GUI neutral widgets (Button, Slider, RadioButtons, CheckButtons) + in matplotlib.widgets. See examples/widgets/\*.py - JDH -2005-06-14 Exposed subplot parameters as rc vars and as the fig - SubplotParams instance subplotpars. See - figure.SubplotParams, figure.Figure.subplots_adjust and the - pylab method subplots_adjust and - examples/subplots_adjust.py . Also added a GUI neutral - widget for adjusting subplots, see - examples/subplot_toolbar.py - JDH +2005-06-14 + Exposed subplot parameters as rc vars and as the fig SubplotParams instance + subplotpars. See figure.SubplotParams, figure.Figure.subplots_adjust and + the pylab method subplots_adjust and examples/subplots_adjust.py . Also + added a GUI neutral widget for adjusting subplots, see + examples/subplot_toolbar.py - JDH -2005-06-13 Exposed cap and join style for lines with new rc params and - line properties +2005-06-13 + Exposed cap and join style for lines with new rc params and line properties:: lines.dash_joinstyle : miter # miter|round|bevel lines.dash_capstyle : butt # butt|round|projecting @@ -4037,1405 +4751,1654 @@ the `API changes <../../api/api_changes.html>`_. lines.solid_capstyle : projecting # butt|round|projecting -2005-06-13 Added kwargs to Axes init +2005-06-13 + Added kwargs to Axes init -2005-06-13 Applied Baptiste's tick patch - JDH +2005-06-13 + Applied Baptiste's tick patch - JDH -2005-06-13 Fixed rc alias 'l' bug reported by Fernando by removing - aliases for mainlevel rc options. - JDH +2005-06-13 + Fixed rc alias 'l' bug reported by Fernando by removing aliases for + mainlevel rc options. - JDH -2005-06-10 Fixed bug #1217637 in ticker.py - DSD +2005-06-10 + Fixed bug #1217637 in ticker.py - DSD -2005-06-07 Fixed a bug in texmanager.py: .aux files not being removed - DSD +2005-06-07 + Fixed a bug in texmanager.py: .aux files not being removed - DSD -2005-06-08 Added Sean Richard's hist binning fix -- see API_CHANGES - JDH +2005-06-08 + Added Sean Richard's hist binning fix -- see API_CHANGES - JDH -2005-06-07 Fixed a bug in texmanager.py: .aux files not being removed - - DSD +2005-06-07 + Fixed a bug in texmanager.py: .aux files not being removed - DSD ---------------------- -2005-06-07 matplotlib-0.81 released +0.81 (2005-06-07) +----------------- -2005-06-06 Added autoscale_on prop to axes +2005-06-06 + Added autoscale_on prop to axes -2005-06-06 Added Nick's picker "among" patch - JDH +2005-06-06 + Added Nick's picker "among" patch - JDH -2005-06-05 Fixed a TeX/LaTeX font discrepency in backend_ps. - DSD +2005-06-05 + Fixed a TeX/LaTeX font discrepency in backend_ps. - DSD -2005-06-05 Added a ps.distill option in rc settings. If True, postscript - output will be distilled using ghostscript, which should trim - the file size and allow it to load more quickly. Hopefully this - will address the issue of large ps files due to font - definitions. Tested with gnu-ghostscript-8.16. - DSD +2005-06-05 + Added a ps.distill option in rc settings. If True, postscript output will + be distilled using ghostscript, which should trim the file size and allow + it to load more quickly. Hopefully this will address the issue of large ps + files due to font definitions. Tested with gnu-ghostscript-8.16. - DSD -2005-06-03 Improved support for tex handling of text in backend_ps. - DSD +2005-06-03 + Improved support for tex handling of text in backend_ps. - DSD -2005-06-03 Added rc options to render text with tex or latex, and to select - the latex font package. - DSD +2005-06-03 + Added rc options to render text with tex or latex, and to select the latex + font package. - DSD -2005-06-03 Fixed a bug in ticker.py causing a ZeroDivisionError +2005-06-03 + Fixed a bug in ticker.py causing a ZeroDivisionError -2005-06-02 backend_gtk.py remove DBL_BUFFER, add line to expose_event to - try to fix pygtk 2.6 redraw problem - SC +2005-06-02 + backend_gtk.py remove DBL_BUFFER, add line to expose_event to try to fix + pygtk 2.6 redraw problem - SC -2005-06-01 The default behavior of ScalarFormatter now renders scientific - notation and large numerical offsets in a label at the end of - the axis. - DSD +2005-06-01 + The default behavior of ScalarFormatter now renders scientific notation and + large numerical offsets in a label at the end of the axis. - DSD -2005-06-01 Added Nicholas' frombyte image patch - JDH +2005-06-01 + Added Nicholas' frombyte image patch - JDH -2005-05-31 Added vertical TeX support for agg - JDH +2005-05-31 + Added vertical TeX support for agg - JDH -2005-05-31 Applied Eric's cntr patch - JDH +2005-05-31 + Applied Eric's cntr patch - JDH -2005-05-27 Finally found the pesky agg bug (which Maxim was kind - enough to fix within hours) that was causing a segfault in - the win32 cached marker drawing. Now windows users can get - the enormouse performance benefits of caced markers w/o - those occasional pesy screenshots. - JDH +2005-05-27 + Finally found the pesky agg bug (which Maxim was kind enough to fix within + hours) that was causing a segfault in the win32 cached marker drawing. Now + windows users can get the enormouse performance benefits of caced markers + w/o those occasional pesy screenshots. - JDH -2005-05-27 Got win32 build system working again, using a more recent - version of gtk and pygtk in the win32 build, gtk 2.6 from - https://web.archive.org/web/20050527002647/https://www.gimp.org/~tml/gimp/win32/downloads.html (you - will also need libpng12.dll to use these). I haven't - tested whether this binary build of mpl for win32 will work - with older gtk runtimes, so you may need to upgrade. +2005-05-27 + Got win32 build system working again, using a more recent version of gtk + and pygtk in the win32 build, gtk 2.6 from + https://web.archive.org/web/20050527002647/https://www.gimp.org/~tml/gimp/win32/downloads.html + (you will also need libpng12.dll to use these). I haven't tested whether + this binary build of mpl for win32 will work with older gtk runtimes, so + you may need to upgrade. -2005-05-27 Fixed bug where 2nd wxapp could be started if using wxagg - backend. - ADS +2005-05-27 + Fixed bug where 2nd wxapp could be started if using wxagg backend. - ADS -2005-05-26 Added Daishi text with dash patch -- see examples/dashtick.py +2005-05-26 + Added Daishi text with dash patch -- see examples/dashtick.py -2005-05-26 Moved backend_latex functionality into backend_ps. If - text.usetex=True, the PostScript backend will use LaTeX to - generate the .ps or .eps file. Ghostscript is required for - eps output. - DSD +2005-05-26 + Moved backend_latex functionality into backend_ps. If text.usetex=True, the + PostScript backend will use LaTeX to generate the .ps or .eps file. + Ghostscript is required for eps output. - DSD -2005-05-24 Fixed alignment and color issues in latex backend. - DSD +2005-05-24 + Fixed alignment and color issues in latex backend. - DSD -2005-05-21 Fixed raster problem for small rasters with dvipng -- looks - like it was a premultipled alpha problem - JDH +2005-05-21 + Fixed raster problem for small rasters with dvipng -- looks like it was a + premultipled alpha problem - JDH -2005-05-20 Added linewidth and faceted kwarg to scatter to control - edgewidth and color. Also added autolegend patch to - inspect line segments. +2005-05-20 + Added linewidth and faceted kwarg to scatter to control edgewidth and + color. Also added autolegend patch to inspect line segments. -2005-05-18 Added Orsay and JPL qt fixes - JDH +2005-05-18 + Added Orsay and JPL qt fixes - JDH -2005-05-17 Added a psfrag latex backend -- some alignment issues need - to be worked out. Run with -dLaTeX and a *.tex file and - *.eps file are generated. latex and dvips the generated - latex file to get ps output. Note xdvi *does* not work, - you must generate ps.- JDH +2005-05-17 + Added a psfrag latex backend -- some alignment issues need to be worked + out. Run with -dLaTeX and a *.tex file and *.eps file are generated. latex + and dvips the generated latex file to get ps output. Note xdvi *does* not + work, you must generate ps.- JDH -2005-05-13 Added Florent Rougon's Axis set_label1 - patch +2005-05-13 + Added Florent Rougon's Axis set_label1 patch -2005-05-17 pcolor optimization, fixed bug in previous pcolor patch - JSWHIT +2005-05-17 + pcolor optimization, fixed bug in previous pcolor patch - JSWHIT -2005-05-16 Added support for masked arrays in pcolor - JSWHIT +2005-05-16 + Added support for masked arrays in pcolor - JSWHIT -2005-05-12 Started work on TeX text for antigrain using pngdvi -- see - examples/tex_demo.py and the new module - matplotlib.texmanager. Rotated text not supported and - rendering small glyps is not working right yet. BUt large - fontsizes and/or high dpi saved figs work great. +2005-05-12 + Started work on TeX text for antigrain using pngdvi -- see + examples/tex_demo.py and the new module matplotlib.texmanager. Rotated + text not supported and rendering small glyps is not working right yet. BUt + large fontsizes and/or high dpi saved figs work great. -2005-05-10 New image resize options interpolation options. New values - for the interp kwarg are +2005-05-10 + New image resize options interpolation options. New values for the interp + kwarg are 'nearest', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos', 'blackman' - See help(imshow) for details, particularly the - interpolation, filternorm and filterrad kwargs + See help(imshow) for details, particularly the interpolation, filternorm + and filterrad kwargs -2005-05-10 Applied Eric's contour mem leak fixes - JDH +2005-05-10 + Applied Eric's contour mem leak fixes - JDH -2005-05-10 Extended python agg wrapper and started implementing - backend_agg2, an agg renderer based on the python wrapper. - This will be more flexible and easier to extend than the - current backend_agg. See also examples/agg_test.py - JDH +2005-05-10 + Extended python agg wrapper and started implementing backend_agg2, an agg + renderer based on the python wrapper. This will be more flexible and + easier to extend than the current backend_agg. See also + examples/agg_test.py - JDH -2005-05-09 Added Marcin's no legend patch to exclude lines from the - autolegend builder +2005-05-09 + Added Marcin's no legend patch to exclude lines from the autolegend builder:: plot(x, y, label='nolegend') -2005-05-05 Upgraded to agg23 - -2005-05-05 Added newscalarformatter_demo.py to examples. -DSD - -2005-05-04 Added NewScalarFormatter. Improved formatting of ticklabels, - scientific notation, and the ability to plot large large - numbers with small ranges, by determining a numerical offset. - See ticker.NewScalarFormatter for more details. -DSD +2005-05-05 + Upgraded to agg23 -2005-05-03 Added the option to specify a delimiter in pylab.load -DSD +2005-05-05 + Added newscalarformatter_demo.py to examples. -DSD -2005-04-28 Added Darren's line collection example +2005-05-04 + Added NewScalarFormatter. Improved formatting of ticklabels, scientific + notation, and the ability to plot large large numbers with small ranges, by + determining a numerical offset. See ticker.NewScalarFormatter for more + details. -DSD -2005-04-28 Fixed aa property in agg - JDH +2005-05-03 + Added the option to specify a delimiter in pylab.load -DSD -2005-04-27 Set postscript page size in .matplotlibrc - DSD +2005-04-28 + Added Darren's line collection example -2005-04-26 Added embedding in qt example. - JDH +2005-04-28 + Fixed aa property in agg - JDH -2005-04-14 Applied Michael Brady's qt backend patch: 1) fix a bug - where keyboard input was grabbed by the figure and not - released 2) turn on cursor changes 3) clean up a typo - and commented-out print statement. - JDH +2005-04-27 + Set postscript page size in .matplotlibrc - DSD +2005-04-26 + Added embedding in qt example. - JDH -2005-04-14 Applied Eric Firing's masked data lines patch and contour - patch. Support for masked arrays has been added to the - plot command and to the Line2D object. Only the valid - points are plotted. A "valid_only" kwarg was added to the - get_xdata() and get_ydata() methods of Line2D; by default - it is False, so that the original data arrays are - returned. Setting it to True returns the plottable points. - - see examples/masked_demo.py - JDH +2005-04-14 + Applied Michael Brady's qt backend patch: 1) fix a bug where keyboard input + was grabbed by the figure and not released 2) turn on cursor changes 3) + clean up a typo and commented-out print statement. - JDH -2005-04-13 Applied Tim Leslie's arrow key event handling patch - JDH +2005-04-14 + Applied Eric Firing's masked data lines patch and contour patch. Support + for masked arrays has been added to the plot command and to the Line2D + object. Only the valid points are plotted. A "valid_only" kwarg was added + to the get_xdata() and get_ydata() methods of Line2D; by default it is + False, so that the original data arrays are returned. Setting it to True + returns the plottable points. - see examples/masked_demo.py - JDH +2005-04-13 + Applied Tim Leslie's arrow key event handling patch - JDH --------------------------- -0.80 released +0.80 +---- -2005-04-11 Applied a variant of rick's xlim/ylim/axis patch. These - functions now take kwargs to let you selectively alter only - the min or max if desired. e.g., xlim(xmin=2) or - axis(ymax=3). They always return the new lim. - JDH +2005-04-11 + Applied a variant of rick's xlim/ylim/axis patch. These functions now take + kwargs to let you selectively alter only the min or max if desired. e.g., + xlim(xmin=2) or axis(ymax=3). They always return the new lim. - JDH -2005-04-11 Incorporated Werner's wx patch -- wx backend should be - compatible with wxpython2.4 and recent versions of 2.5. - Some early versions of wxpython 2.5 will not work because - there was a temporary change in the dc API that was rolled - back to make it 2.4 compliant +2005-04-11 + Incorporated Werner's wx patch -- wx backend should be compatible with + wxpython2.4 and recent versions of 2.5. Some early versions of wxpython + 2.5 will not work because there was a temporary change in the dc API that + was rolled back to make it 2.4 compliant -2005-04-11 modified tkagg show so that new figure window pops up on - call to figure +2005-04-11 + modified tkagg show so that new figure window pops up on call to figure -2005-04-11 fixed wxapp init bug +2005-04-11 + fixed wxapp init bug -2005-04-02 updated backend_ps.draw_lines, draw_markers for use with the - new API - DSD +2005-04-02 + updated backend_ps.draw_lines, draw_markers for use with the new API - DSD -2005-04-01 Added editable polygon example +2005-04-01 + Added editable polygon example ------------------------------ -2005-03-31 0.74 released +0.74 (2005-03-31) +----------------- -2005-03-30 Fixed and added checks for floating point inaccuracy in - ticker.Base - DSD +2005-03-30 + Fixed and added checks for floating point inaccuracy in ticker.Base - DSD -2005-03-30 updated /ellipse definition in backend_ps.py to address bug - #1122041 - DSD +2005-03-30 + updated /ellipse definition in backend_ps.py to address bug #1122041 - DSD -2005-03-29 Added unicode support for Agg and PS - JDH +2005-03-29 + Added unicode support for Agg and PS - JDH -2005-03-28 Added Jarrod's svg patch for text - JDH +2005-03-28 + Added Jarrod's svg patch for text - JDH -2005-03-28 Added Ludal's arrow and quiver patch - JDH +2005-03-28 + Added Ludal's arrow and quiver patch - JDH -2005-03-28 Added label kwarg to Axes to facilitate forcing the - creation of new Axes with otherwise identical attributes +2005-03-28 + Added label kwarg to Axes to facilitate forcing the creation of new Axes + with otherwise identical attributes -2005-03-28 Applied boxplot and OSX font search patches +2005-03-28 + Applied boxplot and OSX font search patches -2005-03-27 Added ft2font NULL check to fix Japanase font bug - JDH +2005-03-27 + Added ft2font NULL check to fix Japanase font bug - JDH -2005-03-27 Added sprint legend patch plus John Gill's tests and fix -- - see examples/legend_auto.py - JDH +2005-03-27 + Added sprint legend patch plus John Gill's tests and fix -- see + examples/legend_auto.py - JDH --------------------------- -2005-03-19 0.73.1 released +0.73.1 (2005-03-19) +------------------- -2005-03-19 Reverted wxapp handling because it crashed win32 - JDH +2005-03-19 + Reverted wxapp handling because it crashed win32 - JDH -2005-03-18 Add .number attribute to figure objects returned by figure() - FP +2005-03-18 + Add .number attribute to figure objects returned by figure() - FP --------------------------- -2005-03-18 0.73 released - -2005-03-16 Fixed labelsep bug - -2005-03-16 Applied Darren's ticker fix for small ranges - JDH - -2005-03-16 Fixed tick on horiz colorbar - JDH - -2005-03-16 Added Japanese winreg patch - JDH - -2005-03-15 backend_gtkagg.py: changed to use double buffering, this fixes - the problem reported Joachim Berdal Haga - "Parts of plot lagging - from previous frame in animation". Tested with anim.py and it makes - no noticeable difference to performance (23.7 before, 23.6 after) - - SC - -2005-03-14 add src/_backend_gdk.c extension to provide a substitute function - for pixbuf.get_pixels_array(). Currently pixbuf.get_pixels_array() - only works with Numeric, and then only works if pygtk has been - compiled with Numeric support. The change provides a function - pixbuf_get_pixels_array() which works with Numeric and numarray and - is always available. It means that backend_gtk should be able to - display images and mathtext in all circumstances. - SC - -2005-03-11 Upgraded CXX to 5.3.1 - -2005-03-10 remove GraphicsContextPS.set_linestyle() - and GraphicsContextSVG.set_linestyle() since they do no more than - the base class GraphicsContext.set_linestyle() - SC - -2005-03-09 Refactored contour functionality into dedicated module - -2005-03-09 Added Eric's contourf updates and Nadia's clabel functionality - -2005-03-09 Moved colorbar to figure.Figure to expose it for API developers - - JDH - -2005-03-09 backend_cairo.py: implemented draw_markers() - SC - -2005-03-09 cbook.py: only use enumerate() (the python version) if the builtin - version is not available. - Add new function 'izip' which is set to itertools.izip if available - and the python equivalent if not available. - SC - -2005-03-07 backend_gdk.py: remove PIXELS_PER_INCH from points_to_pixels(), but - still use it to adjust font sizes. This allows the GTK version of - line_styles.py to more closely match GTKAgg, previously the markers - were being drawn too large. - SC - -2005-03-01 Added Eric's contourf routines - -2005-03-01 Added start of proper agg SWIG wrapper. I would like to - expose agg functionality directly a the user level and this - module will serve that purpose eventually, and will - hopefully take over most of the functionality of the - current _image and _backend_agg modules. - JDH - -2005-02-28 Fixed polyfit / polyval to convert input args to float - arrays - JDH - - -2005-02-25 Add experimental feature to backend_gtk.py to enable/disable - double buffering (DBL_BUFFER=True/False) - SC - -2005-02-24 colors.py change ColorConverter.to_rgb() so it always returns rgb - (and not rgba), allow cnames keys to be cached, change the exception - raised from RuntimeError to ValueError (like hex2color()) - hex2color() use a regular expression to check the color string is - valid - SC - - -2005-02-23 Added rc param ps.useafm so backend ps can use native afm - fonts or truetype. afme breaks mathtext but causes much - smaller font sizes and may result in images that display - better in some contexts (e.g., pdfs incorporated into latex - docs viewed in acrobat reader). I would like to extend - this approach to allow the user to use truetype only for - mathtext, which should be easy. - -2005-02-23 Used sequence protocol rather than tuple in agg collection - drawing routines for greater flexibility - JDH - +0.73 (2005-03-18) +----------------- + +2005-03-16 + Fixed labelsep bug + +2005-03-16 + Applied Darren's ticker fix for small ranges - JDH + +2005-03-16 + Fixed tick on horiz colorbar - JDH + +2005-03-16 + Added Japanese winreg patch - JDH + +2005-03-15 + backend_gtkagg.py: changed to use double buffering, this fixes the problem + reported Joachim Berdal Haga - "Parts of plot lagging from previous frame + in animation". Tested with anim.py and it makes no noticeable difference to + performance (23.7 before, 23.6 after) - SC + +2005-03-14 + add src/_backend_gdk.c extension to provide a substitute function for + pixbuf.get_pixels_array(). Currently pixbuf.get_pixels_array() only works + with Numeric, and then only works if pygtk has been compiled with Numeric + support. The change provides a function pixbuf_get_pixels_array() which + works with Numeric and numarray and is always available. It means that + backend_gtk should be able to display images and mathtext in all + circumstances. - SC + +2005-03-11 + Upgraded CXX to 5.3.1 + +2005-03-10 + remove GraphicsContextPS.set_linestyle() and + GraphicsContextSVG.set_linestyle() since they do no more than the base + class GraphicsContext.set_linestyle() - SC + +2005-03-09 + Refactored contour functionality into dedicated module + +2005-03-09 + Added Eric's contourf updates and Nadia's clabel functionality + +2005-03-09 + Moved colorbar to figure.Figure to expose it for API developers - JDH + +2005-03-09 + backend_cairo.py: implemented draw_markers() - SC + +2005-03-09 + cbook.py: only use enumerate() (the python version) if the builtin version + is not available. Add new function 'izip' which is set to itertools.izip + if available and the python equivalent if not available. - SC + +2005-03-07 + backend_gdk.py: remove PIXELS_PER_INCH from points_to_pixels(), but still + use it to adjust font sizes. This allows the GTK version of line_styles.py + to more closely match GTKAgg, previously the markers were being drawn too + large. - SC + +2005-03-01 + Added Eric's contourf routines + +2005-03-01 + Added start of proper agg SWIG wrapper. I would like to expose agg + functionality directly a the user level and this module will serve that + purpose eventually, and will hopefully take over most of the functionality + of the current _image and _backend_agg modules. - JDH + +2005-02-28 + Fixed polyfit / polyval to convert input args to float arrays - JDH + +2005-02-25 + Add experimental feature to backend_gtk.py to enable/disable double + buffering (DBL_BUFFER=True/False) - SC + +2005-02-24 + colors.py change ColorConverter.to_rgb() so it always returns rgb (and not + rgba), allow cnames keys to be cached, change the exception raised from + RuntimeError to ValueError (like hex2color()) hex2color() use a regular + expression to check the color string is valid - SC + +2005-02-23 + Added rc param ps.useafm so backend ps can use native afm fonts or + truetype. afme breaks mathtext but causes much smaller font sizes and may + result in images that display better in some contexts (e.g., pdfs + incorporated into latex docs viewed in acrobat reader). I would like to + extend this approach to allow the user to use truetype only for mathtext, + which should be easy. + +2005-02-23 + Used sequence protocol rather than tuple in agg collection drawing routines + for greater flexibility - JDH -------------------------------- -2005-02-22 0.72.1 released - -2005-02-21 fixed linestyles for collections -- contour now dashes for - levels <0 +0.72.1 (2005-02-22) +------------------- -2005-02-21 fixed ps color bug - JDH +2005-02-21 + fixed linestyles for collections -- contour now dashes for levels <0 -2005-02-15 fixed missing qt file +2005-02-21 + fixed ps color bug - JDH -2005-02-15 banished error_msg and report_error. Internal backend - methods like error_msg_gtk are preserved. backend writers, - check your backends, and diff against 0.72 to make sure I - did the right thing! - JDH +2005-02-15 + fixed missing qt file +2005-02-15 + banished error_msg and report_error. Internal backend methods like + error_msg_gtk are preserved. backend writers, check your backends, and + diff against 0.72 to make sure I did the right thing! - JDH -2005-02-14 Added enthought traits to matplotlib tree - JDH +2005-02-14 + Added enthought traits to matplotlib tree - JDH ------------------------ -2005-02-14 0.72 released +0.72 (2005-02-14) +----------------- -2005-02-14 fix bug in cbook alltrue() and onetrue() - SC +2005-02-14 + fix bug in cbook alltrue() and onetrue() - SC -2005-02-11 updated qtagg backend from Ted - JDH +2005-02-11 + updated qtagg backend from Ted - JDH -2005-02-11 matshow fixes for figure numbering, return value and docs - FP +2005-02-11 + matshow fixes for figure numbering, return value and docs - FP -2005-02-09 new zorder example for fine control in zorder_demo.py - FP +2005-02-09 + new zorder example for fine control in zorder_demo.py - FP -2005-02-09 backend renderer draw_lines now has transform in backend, - as in draw_markers; use numerix in _backend_agg, aded small - line optimization to agg +2005-02-09 + backend renderer draw_lines now has transform in backend, as in + draw_markers; use numerix in _backend_agg, aded small line optimization to + agg -2005-02-09 subplot now deletes axes that it overlaps +2005-02-09 + subplot now deletes axes that it overlaps -2005-02-08 Added transparent support for gzipped files in load/save - Fernando - Perez (FP from now on). +2005-02-08 + Added transparent support for gzipped files in load/save - Fernando Perez + (FP from now on). -2005-02-08 Small optimizations in PS backend. They may have a big impact for - large plots, otherwise they don't hurt - FP +2005-02-08 + Small optimizations in PS backend. They may have a big impact for large + plots, otherwise they don't hurt - FP -2005-02-08 Added transparent support for gzipped files in load/save - Fernando - Perez (FP from now on). +2005-02-08 + Added transparent support for gzipped files in load/save - Fernando Perez + (FP from now on). -2005-02-07 Added newstyle path drawing for markers - only implemented - in agg currently - JDH +2005-02-07 + Added newstyle path drawing for markers - only implemented in agg currently + - JDH -2005-02-05 Some superscript text optimizations for ticking log plots +2005-02-05 + Some superscript text optimizations for ticking log plots -2005-02-05 Added some default key press events to pylab figures: 'g' - toggles grid - JDH +2005-02-05 + Added some default key press events to pylab figures: 'g' toggles grid - + JDH -2005-02-05 Added some support for handling log switching for lines - that have nonpos data - JDH +2005-02-05 + Added some support for handling log switching for lines that have nonpos + data - JDH -2005-02-04 Added Nadia's contour patch - contour now has matlab - compatible syntax; this also fixed an unequal sized contour - array bug- JDH +2005-02-04 + Added Nadia's contour patch - contour now has matlab compatible syntax; + this also fixed an unequal sized contour array bug- JDH -2005-02-04 Modified GTK backends to allow the FigureCanvas to be resized - smaller than its original size - SC +2005-02-04 + Modified GTK backends to allow the FigureCanvas to be resized smaller than + its original size - SC -2005-02-02 Fixed a bug in dates mx2num - JDH +2005-02-02 + Fixed a bug in dates mx2num - JDH -2005-02-02 Incorporated Fernando's matshow - JDH +2005-02-02 + Incorporated Fernando's matshow - JDH -2005-02-01 Added Fernando's figure num patch, including experimental - support for pylab backend switching, LineCOllection.color - warns, savefig now a figure method, fixed a close(fig) bug - - JDH +2005-02-01 + Added Fernando's figure num patch, including experimental support for pylab + backend switching, LineCOllection.color warns, savefig now a figure method, + fixed a close(fig) bug - JDH -2005-01-31 updated datalim in contour - JDH +2005-01-31 + updated datalim in contour - JDH -2005-01-30 Added backend_qtagg.py provided by Sigve Tjora - SC +2005-01-30 + Added backend_qtagg.py provided by Sigve Tjora - SC -2005-01-28 Added tk.inspect rc param to .matplotlibrc. IDLE users - should set tk.pythoninspect:True and interactive:True and - backend:TkAgg +2005-01-28 + Added tk.inspect rc param to .matplotlibrc. IDLE users should set + tk.pythoninspect:True and interactive:True and backend:TkAgg -2005-01-28 Replaced examples/interactive.py with an updated script from - Fernando Perez - SC +2005-01-28 + Replaced examples/interactive.py with an updated script from Fernando Perez + - SC -2005-01-27 Added support for shared x or y axes. See - examples/shared_axis_demo.py and examples/ganged_plots.py +2005-01-27 + Added support for shared x or y axes. See examples/shared_axis_demo.py and + examples/ganged_plots.py -2005-01-27 Added Lee's patch for missing symbols \leq and \LEFTbracket - to _mathtext_data - JDH +2005-01-27 + Added Lee's patch for missing symbols \leq and \LEFTbracket to + _mathtext_data - JDH -2005-01-26 Added Baptiste's two scales patch -- see help(twinx) in the - pylab interface for more info. See also - examples/two_scales.py +2005-01-26 + Added Baptiste's two scales patch -- see help(twinx) in the pylab interface + for more info. See also examples/two_scales.py -2005-01-24 Fixed a mathtext parser bug that prevented font changes in - sub/superscripts - JDH +2005-01-24 + Fixed a mathtext parser bug that prevented font changes in sub/superscripts + - JDH -2005-01-24 Fixed contour to work w/ interactive changes in colormaps, - clim, etc - JDH +2005-01-24 + Fixed contour to work w/ interactive changes in colormaps, clim, etc - JDH ----------------------------- -2005-01-21 matplotlib-0.71 released +0.71 (2005-01-21) +----------------- -2005-01-21 Refactored numerix to solve vexing namespace issues - JDH +2005-01-21 + Refactored numerix to solve vexing namespace issues - JDH -2005-01-21 Applied Nadia's contour bug fix - JDH +2005-01-21 + Applied Nadia's contour bug fix - JDH -2005-01-20 Made some changes to the contour routine - particularly - region=1 seems t fix a lot of the zigzag strangeness. - Added colormaps as default for contour - JDH +2005-01-20 + Made some changes to the contour routine - particularly region=1 seems t + fix a lot of the zigzag strangeness. Added colormaps as default for + contour - JDH -2005-01-19 Restored builtin names which were overridden (min, max, - abs, round, and sum) in pylab. This is a potentially - significant change for those who were relying on an array - version of those functions that previously overrode builtin - function names. - ADS +2005-01-19 + Restored builtin names which were overridden (min, max, abs, round, and + sum) in pylab. This is a potentially significant change for those who were + relying on an array version of those functions that previously overrode + builtin function names. - ADS -2005-01-18 Added accents to mathtext: \hat, \breve, \grave, \bar, - \acute, \tilde, \vec, \dot, \ddot. All of them have the - same syntax, e.g., to make an overbar you do \bar{o} or to - make an o umlaut you do \ddot{o}. The shortcuts are also - provided, e.g., \"o \'e \`e \~n \.x \^y - JDH +2005-01-18 + Added accents to mathtext: \hat, \breve, \grave, \bar, \acute, \tilde, + \vec, \dot, \ddot. All of them have the same syntax, e.g., to make an + overbar you do \bar{o} or to make an o umlaut you do \ddot{o}. The + shortcuts are also provided, e.g., \"o \'e \`e \~n \.x \^y - JDH -2005-01-18 Plugged image resize memory leaks - JDH +2005-01-18 + Plugged image resize memory leaks - JDH -2005-01-18 Fixed some mathtext parser problems relating to superscripts +2005-01-18 + Fixed some mathtext parser problems relating to superscripts -2005-01-17 Fixed a yticklabel problem for colorbars under change of - clim - JDH +2005-01-17 + Fixed a yticklabel problem for colorbars under change of clim - JDH -2005-01-17 Cleaned up Destroy handling in wx reducing memleak/fig from - approx 800k to approx 6k- JDH +2005-01-17 + Cleaned up Destroy handling in wx reducing memleak/fig from approx 800k to + approx 6k- JDH -2005-01-17 Added kappa to latex_to_bakoma - JDH +2005-01-17 + Added kappa to latex_to_bakoma - JDH -2005-01-15 Support arbitrary colorbar axes and horizontal colorbars - JDH +2005-01-15 + Support arbitrary colorbar axes and horizontal colorbars - JDH -2005-01-15 Fixed colormap number of colors bug so that the colorbar - has the same discretization as the image - JDH +2005-01-15 + Fixed colormap number of colors bug so that the colorbar has the same + discretization as the image - JDH -2005-01-15 Added Nadia's x,y contour fix - JDH +2005-01-15 + Added Nadia's x,y contour fix - JDH -2005-01-15 backend_cairo: added PDF support which requires pycairo 0.1.4. - Its not usable yet, but is ready for when the Cairo PDF backend - matures - SC +2005-01-15 + backend_cairo: added PDF support which requires pycairo 0.1.4. Its not + usable yet, but is ready for when the Cairo PDF backend matures - SC -2005-01-15 Added Nadia's x,y contour fix +2005-01-15 + Added Nadia's x,y contour fix -2005-01-12 Fixed set clip_on bug in artist - JDH +2005-01-12 + Fixed set clip_on bug in artist - JDH -2005-01-11 Reverted pythoninspect in tkagg - JDH +2005-01-11 + Reverted pythoninspect in tkagg - JDH -2005-01-09 Fixed a backend_bases event bug caused when an event is - triggered when location is None - JDH +2005-01-09 + Fixed a backend_bases event bug caused when an event is triggered when + location is None - JDH -2005-01-07 Add patch from Stephen Walton to fix bug in pylab.load() - when the % character is included in a comment. - ADS +2005-01-07 + Add patch from Stephen Walton to fix bug in pylab.load() when the % + character is included in a comment. - ADS -2005-01-07 Added markerscale attribute to Legend class. This allows - the marker size in the legend to be adjusted relative to - that in the plot. - ADS +2005-01-07 + Added markerscale attribute to Legend class. This allows the marker size + in the legend to be adjusted relative to that in the plot. - ADS -2005-01-06 Add patch from Ben Vanhaeren to make the FigureManagerGTK vbox a - public attribute - SC +2005-01-06 + Add patch from Ben Vanhaeren to make the FigureManagerGTK vbox a public + attribute - SC ---------------------------- -2004-12-30 Release 0.70 +2004-12-30 + Release 0.70 -2004-12-28 Added coord location to key press and added a - examples/picker_demo.py +2004-12-28 + Added coord location to key press and added a examples/picker_demo.py -2004-12-28 Fixed coords notification in wx toolbar - JDH +2004-12-28 + Fixed coords notification in wx toolbar - JDH -2004-12-28 Moved connection and disconnection event handling to the - FigureCanvasBase. Backends now only need to connect one - time for each of the button press, button release and key - press/release functions. The base class deals with - callbacks and multiple connections. This fixes flakiness - on some backends (tk, wx) in the presence of multiple - connections and/or disconnect - JDH +2004-12-28 + Moved connection and disconnection event handling to the FigureCanvasBase. + Backends now only need to connect one time for each of the button press, + button release and key press/release functions. The base class deals with + callbacks and multiple connections. This fixes flakiness on some backends + (tk, wx) in the presence of multiple connections and/or disconnect - JDH -2004-12-27 Fixed PS mathtext bug where color was not set - Jochen - please verify correct - JDH +2004-12-27 + Fixed PS mathtext bug where color was not set - Jochen please verify + correct - JDH -2004-12-27 Added Shadow class and added shadow kwarg to legend and pie - for shadow effect - JDH +2004-12-27 + Added Shadow class and added shadow kwarg to legend and pie for shadow + effect - JDH -2004-12-27 Added pie charts and new example/pie_demo.py +2004-12-27 + Added pie charts and new example/pie_demo.py -2004-12-23 Fixed an agg text rotation alignment bug, fixed some text - kwarg processing bugs, and added examples/text_rotation.py - to explain and demonstrate how text rotations and alignment - work in matplotlib. - JDH +2004-12-23 + Fixed an agg text rotation alignment bug, fixed some text kwarg processing + bugs, and added examples/text_rotation.py to explain and demonstrate how + text rotations and alignment work in matplotlib. - JDH ----------------------- -2004-12-22 0.65.1 released - JDH +0.65.1 (2004-12-22) +------------------- -2004-12-22 Fixed colorbar bug which caused colorbar not to respond to - changes in colormap in some instances - JDH +2004-12-22 + Fixed colorbar bug which caused colorbar not to respond to changes in + colormap in some instances - JDH -2004-12-22 Refactored NavigationToolbar in tkagg to support app - embedding , init now takes (canvas, window) rather than - (canvas, figman) - JDH +2004-12-22 + Refactored NavigationToolbar in tkagg to support app embedding , init now + takes (canvas, window) rather than (canvas, figman) - JDH -2004-12-21 Refactored axes and subplot management - removed - add_subplot and add_axes from the FigureManager. classic - toolbar updates are done via an observer pattern on the - figure using add_axobserver. Figure now maintains the axes - stack (for gca) and supports axes deletion. Ported changes - to GTK, Tk, Wx, and FLTK. Please test! Added delaxes - JDH +2004-12-21 + Refactored axes and subplot management - removed add_subplot and add_axes + from the FigureManager. classic toolbar updates are done via an observer + pattern on the figure using add_axobserver. Figure now maintains the axes + stack (for gca) and supports axes deletion. Ported changes to GTK, Tk, Wx, + and FLTK. Please test! Added delaxes - JDH -2004-12-21 Lots of image optimizations - 4x performance boost over - 0.65 JDH +2004-12-21 + Lots of image optimizations - 4x performance boost over 0.65 JDH -2004-12-20 Fixed a figimage bug where the axes is shown and modified - tkagg to move the destroy binding into the show method. +2004-12-20 + Fixed a figimage bug where the axes is shown and modified tkagg to move the + destroy binding into the show method. -2004-12-18 Minor refactoring of NavigationToolbar2 to support - embedding in an application - JDH +2004-12-18 + Minor refactoring of NavigationToolbar2 to support embedding in an + application - JDH -2004-12-14 Added linestyle to collections (currently broken) - JDH +2004-12-14 + Added linestyle to collections (currently broken) - JDH -2004-12-14 Applied Nadia's setupext patch to fix libstdc++ link - problem with contour and solaris -JDH +2004-12-14 + Applied Nadia's setupext patch to fix libstdc++ link problem with contour + and solaris -JDH -2004-12-14 A number of pychecker inspired fixes, including removal of - True and False from cbook which I erroneously thought was - needed for python2.2 - JDH +2004-12-14 + A number of pychecker inspired fixes, including removal of True and False + from cbook which I erroneously thought was needed for python2.2 - JDH -2004-12-14 Finished porting doc strings for set introspection. - Used silent_list for many get funcs that return - lists. JDH +2004-12-14 + Finished porting doc strings for set introspection. Used silent_list for + many get funcs that return lists. JDH -2004-12-13 dates.py: removed all timezone() calls, except for UTC - SC +2004-12-13 + dates.py: removed all timezone() calls, except for UTC - SC ---------------------------- -2004-12-13 0.65 released - JDH - -2004-12-13 colors.py: rgb2hex(), hex2color() made simpler (and faster), also - rgb2hex() - added round() instead of integer truncation - hex2color() - changed 256.0 divisor to 255.0, so now - '#ffffff' becomes (1.0,1.0,1.0) not (0.996,0.996,0.996) - SC +0.65 (2004-12-13) +----------------- -2004-12-11 Added ion and ioff to pylab interface - JDH +2004-12-13 + colors.py: rgb2hex(), hex2color() made simpler (and faster), also rgb2hex() + - added round() instead of integer truncation hex2color() - changed 256.0 + divisor to 255.0, so now '#ffffff' becomes (1.0,1.0,1.0) not + (0.996,0.996,0.996) - SC -2004-12-11 backend_template.py: delete FigureCanvasTemplate.realize() - most - backends don't use it and its no longer needed +2004-12-11 + Added ion and ioff to pylab interface - JDH - backend_ps.py, backend_svg.py: delete show() and - draw_if_interactive() - they are not needed for image backends +2004-12-11 + backend_template.py: delete FigureCanvasTemplate.realize() - most backends + don't use it and its no longer needed - backend_svg.py: write direct to file instead of StringIO - - SC + backend_ps.py, backend_svg.py: delete show() and draw_if_interactive() - + they are not needed for image backends -2004-12-10 Added zorder to artists to control drawing order of lines, - patches and text in axes. See examples/zoder_demo.py - JDH + backend_svg.py: write direct to file instead of StringIO -2004-12-10 Fixed colorbar bug with scatter - JDH + - SC -2004-12-10 Added Nadia Dencheva contour code - JDH +2004-12-10 + Added zorder to artists to control drawing order of lines, patches and text + in axes. See examples/zoder_demo.py - JDH -2004-12-10 backend_cairo.py: got mathtext working - SC +2004-12-10 + Fixed colorbar bug with scatter - JDH -2004-12-09 Added Norm Peterson's svg clipping patch +2004-12-10 + Added Nadia Dencheva contour code - JDH -2004-12-09 Added Matthew Newville's wx printing patch +2004-12-10 + backend_cairo.py: got mathtext working - SC -2004-12-09 Migrated matlab to pylab - JDH +2004-12-09 + Added Norm Peterson's svg clipping patch -2004-12-09 backend_gtk.py: split into two parts - - backend_gdk.py - an image backend - - backend_gtk.py - A GUI backend that uses GDK - SC +2004-12-09 + Added Matthew Newville's wx printing patch -2004-12-08 backend_gtk.py: remove quit_after_print_xvfb(\*args), show_xvfb(), - Dialog_MeasureTool(gtk.Dialog) one month after sending mail to - matplotlib-users asking if anyone still uses these functions - SC +2004-12-09 + Migrated matlab to pylab - JDH -2004-12-02 backend_bases.py, backend_template.py: updated some of the method - documentation to make them consistent with each other - SC +2004-12-09 + backend_gtk.py: split into two parts -2004-12-04 Fixed multiple bindings per event for TkAgg mpl_connect and - mpl_disconnect. Added a "test_disconnect" command line - parameter to coords_demo.py JTM + - backend_gdk.py - an image backend + - backend_gtk.py - A GUI backend that uses GDK - SC -2004-12-04 Fixed some legend bugs JDH +2004-12-08 + backend_gtk.py: remove quit_after_print_xvfb(\*args), show_xvfb(), + Dialog_MeasureTool(gtk.Dialog) one month after sending mail to + matplotlib-users asking if anyone still uses these functions - SC -2004-11-30 Added over command for oneoff over plots. e.g., over(plot, x, - y, lw=2). Works with any plot function. +2004-12-02 + backend_bases.py, backend_template.py: updated some of the method + documentation to make them consistent with each other - SC -2004-11-30 Added bbox property to text - JDH +2004-12-04 + Fixed multiple bindings per event for TkAgg mpl_connect and mpl_disconnect. + Added a "test_disconnect" command line parameter to coords_demo.py JTM -2004-11-29 Zoom to rect now respect reversed axes limits (for both - linear and log axes). - GL +2004-12-04 + Fixed some legend bugs JDH -2004-11-29 Added the over command to the matlab interface. over - allows you to add an overlay plot regardless of hold - state. - JDH +2004-11-30 + Added over command for oneoff over plots. e.g., over(plot, x, y, lw=2). + Works with any plot function. -2004-11-25 Added Printf to mplutils for printf style format string - formatting in C++ (should help write better exceptions) +2004-11-30 + Added bbox property to text - JDH -2004-11-24 IMAGE_FORMAT: remove from agg and gtkagg backends as its no longer - used - SC +2004-11-29 + Zoom to rect now respect reversed axes limits (for both linear and log + axes). - GL -2004-11-23 Added matplotlib compatible set and get introspection. See - set_and_get.py +2004-11-29 + Added the over command to the matlab interface. over allows you to add an + overlay plot regardless of hold state. - JDH -2004-11-23 applied Norbert's patched and exposed legend configuration - to kwargs - JDH +2004-11-25 + Added Printf to mplutils for printf style format string formatting in C++ + (should help write better exceptions) -2004-11-23 backend_gtk.py: added a default exception handler - SC +2004-11-24 + IMAGE_FORMAT: remove from agg and gtkagg backends as its no longer used - + SC -2004-11-18 backend_gtk.py: change so that the backend knows about all image - formats and does not need to use IMAGE_FORMAT in other backends - SC +2004-11-23 + Added matplotlib compatible set and get introspection. See set_and_get.py -2004-11-18 Fixed some report_error bugs in string interpolation as - reported on SF bug tracker- JDH +2004-11-23 + applied Norbert's patched and exposed legend configuration to kwargs - JDH -2004-11-17 backend_gtkcairo.py: change so all print_figure() calls render using - Cairo and get saved using backend_gtk.print_figure() - SC +2004-11-23 + backend_gtk.py: added a default exception handler - SC -2004-11-13 backend_cairo.py: Discovered the magic number (96) required for - Cairo PS plots to come out the right size. Restored Cairo PS output - and added support for landscape mode - SC +2004-11-18 + backend_gtk.py: change so that the backend knows about all image formats + and does not need to use IMAGE_FORMAT in other backends - SC -2004-11-13 Added ishold - JDH +2004-11-18 + Fixed some report_error bugs in string interpolation as reported on SF bug + tracker- JDH -2004-11-12 Added many new matlab colormaps - autumn bone cool copper - flag gray hot hsv jet pink prism spring summer winter - PG +2004-11-17 + backend_gtkcairo.py: change so all print_figure() calls render using Cairo + and get saved using backend_gtk.print_figure() - SC -2004-11-11 greatly simplify the emitted postscript code - JV +2004-11-13 + backend_cairo.py: Discovered the magic number (96) required for Cairo PS + plots to come out the right size. Restored Cairo PS output and added + support for landscape mode - SC -2004-11-12 Added new plotting functions spy, spy2 for sparse matrix - visualization - JDH +2004-11-13 + Added ishold - JDH -2004-11-11 Added rgrids, thetragrids for customizing the grid - locations and labels for polar plots - JDH +2004-11-12 + Added many new matlab colormaps - autumn bone cool copper flag gray hot hsv + jet pink prism spring summer winter - PG -2004-11-11 make the Gtk backends build without an X-server connection - JV +2004-11-11 + greatly simplify the emitted postscript code - JV -2004-11-10 matplotlib/__init__.py: Added FROZEN to signal we are running under - py2exe (or similar) - is used by backend_gtk.py - SC +2004-11-12 + Added new plotting functions spy, spy2 for sparse matrix visualization - + JDH -2004-11-09 backend_gtk.py: Made fix suggested by maffew@cat.org.au - to prevent problems when py2exe calls pygtk.require(). - SC +2004-11-11 + Added rgrids, thetragrids for customizing the grid locations and labels for + polar plots - JDH -2004-11-09 backend_cairo.py: Added support for printing to a fileobject. - Disabled cairo PS output which is not working correctly. - SC +2004-11-11 + make the Gtk backends build without an X-server connection - JV ----------------------------------- +2004-11-10 + matplotlib/__init__.py: Added FROZEN to signal we are running under py2exe + (or similar) - is used by backend_gtk.py - SC -2004-11-08 matplotlib-0.64 released +2004-11-09 + backend_gtk.py: Made fix suggested by maffew@cat.org.au to prevent problems + when py2exe calls pygtk.require(). - SC -2004-11-04 Changed -dbackend processing to only use known backends, so - we don't clobber other non-matplotlib uses of -d, like -debug. +2004-11-09 + backend_cairo.py: Added support for printing to a fileobject. Disabled + cairo PS output which is not working correctly. - SC -2004-11-04 backend_agg.py: added IMAGE_FORMAT to list the formats that the - backend can save to. - backend_gtkagg.py: added support for saving JPG files by using the - GTK backend - SC +---------------------------------- -2004-10-31 backend_cairo.py: now produces png and ps files (although the figure - sizing needs some work). pycairo did not wrap all the necessary - functions, so I wrapped them myself, they are included in the - backend_cairo.py doc string. - SC +0.64 (2004-11-08) +----------------- + +2004-11-04 + Changed -dbackend processing to only use known backends, so we don't + clobber other non-matplotlib uses of -d, like -debug. + +2004-11-04 + backend_agg.py: added IMAGE_FORMAT to list the formats that the backend can + save to. backend_gtkagg.py: added support for saving JPG files by using + the GTK backend - SC -2004-10-31 backend_ps.py: clean up the generated PostScript code, use - the PostScript stack to hold itermediate values instead of - storing them in the dictionary. - JV +2004-10-31 + backend_cairo.py: now produces png and ps files (although the figure sizing + needs some work). pycairo did not wrap all the necessary functions, so I + wrapped them myself, they are included in the backend_cairo.py doc string. + - SC -2004-10-30 backend_ps.py, ft2font.cpp, ft2font.h: fix the position of - text in the PostScript output. The new FT2Font method - get_descent gives the distance between the lower edge of - the bounding box and the baseline of a string. In - backend_ps the text is shifted upwards by this amount. - JV +2004-10-31 + backend_ps.py: clean up the generated PostScript code, use the PostScript + stack to hold itermediate values instead of storing them in the dictionary. + - JV -2004-10-30 backend_ps.py: clean up the code a lot. Change the - PostScript output to be more DSC compliant. All - definitions for the generated PostScript are now in a - PostScript dictionary 'mpldict'. Moved the long comment - about drawing ellipses from the PostScript output into a - Python comment. - JV +2004-10-30 + backend_ps.py, ft2font.cpp, ft2font.h: fix the position of text in the + PostScript output. The new FT2Font method get_descent gives the distance + between the lower edge of the bounding box and the baseline of a string. + In backend_ps the text is shifted upwards by this amount. - JV -2004-10-30 backend_gtk.py: removed FigureCanvasGTK.realize() as its no longer - needed. Merged ColorManager into GraphicsContext - backend_bases.py: For set_capstyle/joinstyle() only set cap or - joinstyle if there is no error. - SC +2004-10-30 + backend_ps.py: clean up the code a lot. Change the PostScript output to be + more DSC compliant. All definitions for the generated PostScript are now + in a PostScript dictionary 'mpldict'. Moved the long comment about drawing + ellipses from the PostScript output into a Python comment. - JV -2004-10-30 backend_gtk.py: tidied up print_figure() and removed some of the - dependency on widget events - SC +2004-10-30 + backend_gtk.py: removed FigureCanvasGTK.realize() as its no longer needed. + Merged ColorManager into GraphicsContext backend_bases.py: For + set_capstyle/joinstyle() only set cap or joinstyle if there is no error. - + SC -2004-10-28 backend_cairo.py: The renderer is complete except for mathtext, - draw_image() and clipping. gtkcairo works reasonably well. cairo - does not yet create any files since I can't figure how to set the - 'target surface', I don't think pycairo wraps the required functions - - SC +2004-10-30 + backend_gtk.py: tidied up print_figure() and removed some of the dependency + on widget events - SC -2004-10-28 backend_gtk.py: Improved the save dialog (GTK 2.4 only) so it - presents the user with a menu of supported image formats - SC +2004-10-28 + backend_cairo.py: The renderer is complete except for mathtext, + draw_image() and clipping. gtkcairo works reasonably well. cairo does not + yet create any files since I can't figure how to set the 'target surface', + I don't think pycairo wraps the required functions - SC -2004-10-28 backend_svg.py: change print_figure() to restore original face/edge - color - backend_ps.py : change print_figure() to ensure original face/edge - colors are restored even if there's an IOError - SC +2004-10-28 + backend_gtk.py: Improved the save dialog (GTK 2.4 only) so it presents the + user with a menu of supported image formats - SC -2004-10-27 Applied Norbert's errorbar patch to support barsabove kwarg +2004-10-28 + backend_svg.py: change print_figure() to restore original face/edge color + backend_ps.py : change print_figure() to ensure original face/edge colors + are restored even if there's an IOError - SC -2004-10-27 Applied Norbert's legend patch to support None handles +2004-10-27 + Applied Norbert's errorbar patch to support barsabove kwarg -2004-10-27 Added two more backends: backend_cairo.py, backend_gtkcairo.py - They are not complete yet, currently backend_gtkcairo just renders - polygons, rectangles and lines - SC +2004-10-27 + Applied Norbert's legend patch to support None handles -2004-10-21 Added polar axes and plots - JDH +2004-10-27 + Added two more backends: backend_cairo.py, backend_gtkcairo.py They are not + complete yet, currently backend_gtkcairo just renders polygons, rectangles + and lines - SC -2004-10-20 Fixed corrcoef bug exposed by corrcoef(X) where X is matrix - - JDH +2004-10-21 + Added polar axes and plots - JDH -2004-10-19 Added kwarg support to xticks and yticks to set ticklabel - text properties -- thanks to T. Edward Whalen for the suggestion +2004-10-20 + Fixed corrcoef bug exposed by corrcoef(X) where X is matrix - JDH -2004-10-19 Added support for PIL images in imshow(), image.py - ADS +2004-10-19 + Added kwarg support to xticks and yticks to set ticklabel text properties + -- thanks to T. Edward Whalen for the suggestion -2004-10-19 Re-worked exception handling in _image.py and _transforms.py - to avoid masking problems with shared libraries. - JTM +2004-10-19 + Added support for PIL images in imshow(), image.py - ADS -2004-10-16 Streamlined the matlab interface wrapper, removed the - noplot option to hist - just use mlab.hist instead. +2004-10-19 + Re-worked exception handling in _image.py and _transforms.py to avoid + masking problems with shared libraries. - JTM -2004-09-30 Added Andrew Dalke's strftime code to extend the range of - dates supported by the DateFormatter - JDH +2004-10-16 + Streamlined the matlab interface wrapper, removed the noplot option to hist + - just use mlab.hist instead. -2004-09-30 Added barh - JDH +2004-09-30 + Added Andrew Dalke's strftime code to extend the range of dates supported + by the DateFormatter - JDH -2004-09-30 Removed fallback to alternate array package from numerix - so that ImportErrors are easier to debug. JTM +2004-09-30 + Added barh - JDH -2004-09-30 Add GTK+ 2.4 support for the message in the toolbar. SC +2004-09-30 + Removed fallback to alternate array package from numerix so that + ImportErrors are easier to debug. - JTM -2004-09-30 Made some changes to support python22 - lots of doc - fixes. - JDH +2004-09-30 + Add GTK+ 2.4 support for the message in the toolbar. SC -2004-09-29 Added a Verbose class for reporting - JDH +2004-09-30 + Made some changes to support python22 - lots of doc fixes. - JDH + +2004-09-29 + Added a Verbose class for reporting - JDH ------------------------------------ -2004-09-28 Released 0.63.0 - -2004-09-28 Added save to file object for agg - see - examples/print_stdout.py - -2004-09-24 Reorganized all py code to lib subdir - -2004-09-24 Fixed axes resize image edge effects on interpolation - - required upgrade to agg22 which fixed an agg bug related to - this problem - -2004-09-20 Added toolbar2 message display for backend_tkagg. JTM - - -2004-09-17 Added coords formatter attributes. These must be callable, - and return a string for the x or y data. These will be used - to format the x and y data for the coords box. Default is - the axis major formatter. e.g.: - - # format the coords message box - def price(x): return '$%1.2f'%x - ax.format_xdata = DateFormatter('%Y-%m-%d') - ax.format_ydata = price - - -2004-09-17 Total rewrite of dates handling to use python datetime with - num2date, date2num and drange. pytz for timezone handling, - dateutils for spohisticated ticking. date ranges from - 0001-9999 are supported. rrules allow arbitrary date - ticking. examples/date_demo*.py converted to show new - usage. new example examples/date_demo_rrule.py shows how - to use rrules in date plots. The date locators are much - more general and almost all of them have different - constructors. See matplotlib.dates for more info. - -2004-09-15 Applied Fernando's backend __init__ patch to support easier - backend maintenance. Added his numutils to mlab. JDH - -2004-09-16 Re-designated all files in matplotlib/images as binary and - w/o keyword substitution using "cvs admin -kb \*.svg ...". - See binary files in "info cvs" under Linux. This was messing - up builds from CVS on windows since CVS was doing lf -> cr/lf - and keyword substitution on the bitmaps. - JTM - -2004-09-15 Modified setup to build array-package-specific extensions - for those extensions which are array-aware. Setup builds - extensions automatically for either Numeric, numarray, or - both, depending on what you have installed. Python proxy - modules for the array-aware extensions import the version - optimized for numarray or Numeric determined by numerix. - - JTM - -2004-09-15 Moved definitions of infinity from mlab to numerix to avoid - divide by zero warnings for numarray - JTM - -2004-09-09 Added axhline, axvline, axhspan and axvspan +2004-09-28 + Released 0.63.0 + +2004-09-28 + Added save to file object for agg - see examples/print_stdout.py + +2004-09-24 + Reorganized all py code to lib subdir + +2004-09-24 + Fixed axes resize image edge effects on interpolation - required upgrade to + agg22 which fixed an agg bug related to this problem + +2004-09-20 + Added toolbar2 message display for backend_tkagg. JTM + +2004-09-17 + Added coords formatter attributes. These must be callable, and return a + string for the x or y data. These will be used to format the x and y data + for the coords box. Default is the axis major formatter. e.g.:: + + # format the coords message box + def price(x): return '$%1.2f'%x + ax.format_xdata = DateFormatter('%Y-%m-%d') + ax.format_ydata = price + +2004-09-17 + Total rewrite of dates handling to use python datetime with num2date, + date2num and drange. pytz for timezone handling, dateutils for + spohisticated ticking. date ranges from 0001-9999 are supported. rrules + allow arbitrary date ticking. examples/date_demo*.py converted to show new + usage. new example examples/date_demo_rrule.py shows how to use rrules in + date plots. The date locators are much more general and almost all of them + have different constructors. See matplotlib.dates for more info. + +2004-09-15 + Applied Fernando's backend __init__ patch to support easier backend + maintenance. Added his numutils to mlab. JDH + +2004-09-16 + Re-designated all files in matplotlib/images as binary and w/o keyword + substitution using "cvs admin -kb \*.svg ...". See binary files in "info + cvs" under Linux. This was messing up builds from CVS on windows since CVS + was doing lf -> cr/lf and keyword substitution on the bitmaps. - JTM + +2004-09-15 + Modified setup to build array-package-specific extensions for those + extensions which are array-aware. Setup builds extensions automatically + for either Numeric, numarray, or both, depending on what you have + installed. Python proxy modules for the array-aware extensions import the + version optimized for numarray or Numeric determined by numerix. - JTM + +2004-09-15 + Moved definitions of infinity from mlab to numerix to avoid divide by zero + warnings for numarray - JTM + +2004-09-09 + Added axhline, axvline, axhspan and axvspan ------------------------------- -2004-08-30 matplotlib 0.62.4 released +0.62.4 (2004-08-30) +------------------- -2004-08-30 Fixed a multiple images with different extent bug, - Fixed markerfacecolor as RGB tuple +2004-08-30 + Fixed a multiple images with different extent bug, Fixed markerfacecolor as + RGB tuple -2004-08-27 Mathtext now more than 5x faster. Thanks to Paul Mcguire - for fixes both to pyparsing and to the matplotlib grammar! - mathtext broken on python2.2 +2004-08-27 + Mathtext now more than 5x faster. Thanks to Paul Mcguire for fixes both to + pyparsing and to the matplotlib grammar! mathtext broken on python2.2 -2004-08-25 Exposed Darren's and Greg's log ticking and formatting - options to semilogx and friends +2004-08-25 + Exposed Darren's and Greg's log ticking and formatting options to semilogx + and friends -2004-08-23 Fixed grid w/o args to toggle grid state - JDH +2004-08-23 + Fixed grid w/o args to toggle grid state - JDH -2004-08-11 Added Gregory's log patches for major and minor ticking +2004-08-11 + Added Gregory's log patches for major and minor ticking -2004-08-18 Some pixel edge effects fixes for images +2004-08-18 + Some pixel edge effects fixes for images -2004-08-18 Fixed TTF files reads in backend_ps on win32. +2004-08-18 + Fixed TTF files reads in backend_ps on win32. -2004-08-18 Added base and subs properties for logscale plots, user - modifiable using - set_[x,y]scale('log',base=b,subs=[mt1,mt2,...]) - GL +2004-08-18 + Added base and subs properties for logscale plots, user modifiable using + set_[x,y]scale('log',base=b,subs=[mt1,mt2,...]) - GL -2004-08-18 fixed a bug exposed by trying to find the HOME dir on win32 - thanks to Alan Issac for pointing to the light - JDH +2004-08-18 + fixed a bug exposed by trying to find the HOME dir on win32 thanks to Alan + Issac for pointing to the light - JDH -2004-08-18 fixed errorbar bug in setting ecolor - JDH +2004-08-18 + fixed errorbar bug in setting ecolor - JDH -2004-08-12 Added Darren Dale's exponential ticking patch +2004-08-12 + Added Darren Dale's exponential ticking patch -2004-08-11 Added Gregory's fltkagg backend +2004-08-11 + Added Gregory's fltkagg backend ------------------------------ -2004-08-09 matplotlib-0.61.0 released +0.61.0 (2004-08-09) +------------------- -2004-08-08 backend_gtk.py: get rid of the final PyGTK deprecation warning by - replacing gtkOptionMenu with gtkMenu in the 2.4 version of the - classic toolbar. +2004-08-08 + backend_gtk.py: get rid of the final PyGTK deprecation warning by replacing + gtkOptionMenu with gtkMenu in the 2.4 version of the classic toolbar. -2004-08-06 Added Tk zoom to rect rectangle, proper idle drawing, and - keybinding - JDH +2004-08-06 + Added Tk zoom to rect rectangle, proper idle drawing, and keybinding - JDH -2004-08-05 Updated installing.html and INSTALL - JDH +2004-08-05 + Updated installing.html and INSTALL - JDH -2004-08-01 backend_gtk.py: move all drawing code into the expose_event() +2004-08-01 + backend_gtk.py: move all drawing code into the expose_event() -2004-07-28 Added Greg's toolbar2 and backend_*agg patches - JDH +2004-07-28 + Added Greg's toolbar2 and backend_*agg patches - JDH -2004-07-28 Added image.imread with support for loading png into - numerix arrays +2004-07-28 + Added image.imread with support for loading png into numerix arrays -2004-07-28 Added key modifiers to events - implemented dynamic updates - and rubber banding for interactive pan/zoom - JDH +2004-07-28 + Added key modifiers to events - implemented dynamic updates and rubber + banding for interactive pan/zoom - JDH -2004-07-27 did a readthrough of SVG, replacing all the string - additions with string interps for efficiency, fixed some - layout problems, added font and image support (through - external pngs) - JDH +2004-07-27 + did a readthrough of SVG, replacing all the string additions with string + interps for efficiency, fixed some layout problems, added font and image + support (through external pngs) - JDH -2004-07-25 backend_gtk.py: modify toolbar2 to make it easier to support GTK+ - 2.4. Add GTK+ 2.4 toolbar support. - SC +2004-07-25 + backend_gtk.py: modify toolbar2 to make it easier to support GTK+ 2.4. Add + GTK+ 2.4 toolbar support. - SC -2004-07-24 backend_gtk.py: Simplified classic toolbar creation - SC +2004-07-24 + backend_gtk.py: Simplified classic toolbar creation - SC -2004-07-24 Added images/matplotlib.svg to be used when GTK+ windows are - minimised - SC +2004-07-24 + Added images/matplotlib.svg to be used when GTK+ windows are minimised - SC -2004-07-22 Added right mouse click zoom for NavigationToolbar2 panning - mode. - JTM +2004-07-22 + Added right mouse click zoom for NavigationToolbar2 panning mode. - JTM -2004-07-22 Added NavigationToolbar2 support to backend_tkagg. - Minor tweak to backend_bases. - JTM +2004-07-22 + Added NavigationToolbar2 support to backend_tkagg. Minor tweak to + backend_bases. - JTM -2004-07-22 Incorporated Gergory's renderer cache and buffer object - cache - JDH +2004-07-22 + Incorporated Gergory's renderer cache and buffer object cache - JDH -2004-07-22 Backend_gtk.py: Added support for GtkFileChooser, changed - FileSelection/FileChooser so that only one instance pops up, - and made them both modal. - SC +2004-07-22 + Backend_gtk.py: Added support for GtkFileChooser, changed + FileSelection/FileChooser so that only one instance pops up, and made them + both modal. - SC -2004-07-21 Applied backend_agg memory leak patch from hayden - - jocallo@online.no. Found and fixed a leak in binary - operations on transforms. Moral of the story: never incref - where you meant to decref! Fixed several leaks in ft2font: - moral of story: almost always return Py::asObject over - Py::Object - JDH +2004-07-21 + Applied backend_agg memory leak patch from hayden - jocallo@online.no. + Found and fixed a leak in binary operations on transforms. Moral of the + story: never incref where you meant to decref! Fixed several leaks in + ft2font: moral of story: almost always return Py::asObject over Py::Object + - JDH -2004-07-21 Fixed a to string memory allocation bug in agg and image - modules - JDH +2004-07-21 + Fixed a to string memory allocation bug in agg and image modules - JDH -2004-07-21 Added mpl_connect and mpl_disconnect to matlab interface - - JDH +2004-07-21 + Added mpl_connect and mpl_disconnect to matlab interface - JDH -2004-07-21 Added beginnings of users_guide to CVS - JDH +2004-07-21 + Added beginnings of users_guide to CVS - JDH -2004-07-20 ported toolbar2 to wx +2004-07-20 + ported toolbar2 to wx -2004-07-20 upgraded to agg21 - JDH +2004-07-20 + upgraded to agg21 - JDH -2004-07-20 Added new icons for toolbar2 - JDH +2004-07-20 + Added new icons for toolbar2 - JDH -2004-07-19 Added vertical mathtext for \*Agg and GTK - thanks Jim - Benson! - JDH +2004-07-19 + Added vertical mathtext for \*Agg and GTK - thanks Jim Benson! - JDH -2004-07-16 Added ps/eps/svg savefig options to wx and gtk JDH +2004-07-16 + Added ps/eps/svg savefig options to wx and gtk JDH -2004-07-15 Fixed python framework tk finder in setupext.py - JDH +2004-07-15 + Fixed python framework tk finder in setupext.py - JDH -2004-07-14 Fixed layer images demo which was broken by the 07/12 image - extent fixes - JDH +2004-07-14 + Fixed layer images demo which was broken by the 07/12 image extent fixes - + JDH -2004-07-13 Modified line collections to handle arbitrary length - segments for each line segment. - JDH +2004-07-13 + Modified line collections to handle arbitrary length segments for each line + segment. - JDH -2004-07-13 Fixed problems with image extent and origin - - set_image_extent deprecated. Use imshow(blah, blah, - extent=(xmin, xmax, ymin, ymax) instead - JDH +2004-07-13 + Fixed problems with image extent and origin - set_image_extent deprecated. + Use imshow(blah, blah, extent=(xmin, xmax, ymin, ymax) instead - JDH -2004-07-12 Added prototype for new nav bar with codifed event - handling. Use mpl_connect rather than connect for - matplotlib event handling. toolbar style determined by rc - toolbar param. backend status: gtk: prototype, wx: in - progress, tk: not started - JDH +2004-07-12 + Added prototype for new nav bar with codifed event handling. Use + mpl_connect rather than connect for matplotlib event handling. toolbar + style determined by rc toolbar param. backend status: gtk: prototype, wx: + in progress, tk: not started - JDH -2004-07-11 backend_gtk.py: use builtin round() instead of redefining it. - - SC +2004-07-11 + backend_gtk.py: use builtin round() instead of redefining it. - SC -2004-07-10 Added embedding_in_wx3 example - ADS +2004-07-10 + Added embedding_in_wx3 example - ADS -2004-07-09 Added dynamic_image_wxagg to examples - ADS +2004-07-09 + Added dynamic_image_wxagg to examples - ADS -2004-07-09 added support for embedding TrueType fonts in PS files - PEB +2004-07-09 + added support for embedding TrueType fonts in PS files - PEB -2004-07-09 fixed a sfnt bug exposed if font cache is not built +2004-07-09 + fixed a sfnt bug exposed if font cache is not built -2004-07-09 added default arg None to matplotlib.matlab grid command to - toggle current grid state +2004-07-09 + added default arg None to matplotlib.matlab grid command to toggle current + grid state --------------------- -2004-07-08 0.60.2 released +0.60.2 (2004-07-08) +------------------- -2004-07-08 fixed a mathtext bug for '6' +2004-07-08 + fixed a mathtext bug for '6' -2004-07-08 added some numarray bug workarounds +2004-07-08 + added some numarray bug workarounds -------------------------- -2004-07-07 0.60 released - -2004-07-07 Fixed a bug in dynamic_demo_wx - +0.60 (2004-07-07) +----------------- -2004-07-07 backend_gtk.py: raise SystemExit immediately if - 'import pygtk' fails - SC +2004-07-07 + Fixed a bug in dynamic_demo_wx -2004-07-05 Added new mathtext commands \over{sym1}{sym2} and - \under{sym1}{sym2} +2004-07-07 + backend_gtk.py: raise SystemExit immediately if 'import pygtk' fails - SC -2004-07-05 Unified image and patch collections colormapping and - scaling args. Updated docstrings for all - JDH +2004-07-05 + Added new mathtext commands \over{sym1}{sym2} and \under{sym1}{sym2} -2004-07-05 Fixed a figure legend bug and added - examples/figlegend_demo.py - JDH +2004-07-05 + Unified image and patch collections colormapping and scaling args. Updated + docstrings for all - JDH -2004-07-01 Fixed a memory leak in image and agg to string methods +2004-07-05 + Fixed a figure legend bug and added examples/figlegend_demo.py - JDH -2004-06-25 Fixed fonts_demo spacing problems and added a kwargs - version of the fonts_demo fonts_demo_kw.py - JDH +2004-07-01 + Fixed a memory leak in image and agg to string methods -2004-06-25 finance.py: handle case when urlopen() fails - SC +2004-06-25 + Fixed fonts_demo spacing problems and added a kwargs version of the + fonts_demo fonts_demo_kw.py - JDH -2004-06-24 Support for multiple images on axes and figure, with - blending. Support for upper and lower image origins. - clim, jet and gray functions in matlab interface operate on - current image - JDH +2004-06-25 + finance.py: handle case when urlopen() fails - SC -2004-06-23 ported code to Perry's new colormap and norm scheme. Added - new rc attributes image.aspect, image.interpolation, - image.cmap, image.lut, image.origin +2004-06-24 + Support for multiple images on axes and figure, with blending. Support for + upper and lower image origins. clim, jet and gray functions in matlab + interface operate on current image - JDH -2004-06-20 backend_gtk.py: replace gtk.TRUE/FALSE with True/False. - simplified _make_axis_menu(). - SC +2004-06-23 + ported code to Perry's new colormap and norm scheme. Added new rc + attributes image.aspect, image.interpolation, image.cmap, image.lut, + image.origin -2004-06-19 anim_tk.py: Updated to use TkAgg by default (not GTK) - backend_gtk_py: Added '_' in front of private widget - creation functions - SC +2004-06-20 + backend_gtk.py: replace gtk.TRUE/FALSE with True/False. simplified + _make_axis_menu(). - SC -2004-06-17 backend_gtk.py: Create a GC once in realise(), not every - time draw() is called. - SC +2004-06-19 + anim_tk.py: Updated to use TkAgg by default (not GTK) backend_gtk_py: Added + '_' in front of private widget creation functions - SC -2004-06-16 Added new py2exe FAQ entry and added frozen support in - get_data_path for py2exe - JDH +2004-06-17 + backend_gtk.py: Create a GC once in realise(), not every time draw() is + called. - SC -2004-06-16 Removed GTKGD, which was always just a proof-of-concept - backend - JDH +2004-06-16 + Added new py2exe FAQ entry and added frozen support in get_data_path for + py2exe - JDH -2004-06-16 backend_gtk.py updates to replace deprecated functions - gtk.mainquit(), gtk.mainloop(). - Update NavigationToolbar to use the new GtkToolbar API - SC +2004-06-16 + Removed GTKGD, which was always just a proof-of-concept backend - JDH -2004-06-15 removed set_default_font from font_manager to unify font - customization using the new function rc. See API_CHANGES - for more info. The examples fonts_demo.py and - fonts_demo_kw.py are ported to the new API - JDH +2004-06-16 + backend_gtk.py updates to replace deprecated functions gtk.mainquit(), + gtk.mainloop(). Update NavigationToolbar to use the new GtkToolbar API - + SC -2004-06-15 Improved (yet again!) axis scaling to properly handle - singleton plots - JDH +2004-06-15 + removed set_default_font from font_manager to unify font customization + using the new function rc. See API_CHANGES for more info. The examples + fonts_demo.py and fonts_demo_kw.py are ported to the new API - JDH -2004-06-15 Restored the old FigureCanvasGTK.draw() - SC +2004-06-15 + Improved (yet again!) axis scaling to properly handle singleton plots - JDH -2004-06-11 More memory leak fixes in transforms and ft2font - JDH +2004-06-15 + Restored the old FigureCanvasGTK.draw() - SC -2004-06-11 Eliminated numerix .numerix file and environment variable - NUMERIX. Fixed bug which prevented command line overrides: - --numarray or --numeric. - JTM +2004-06-11 + More memory leak fixes in transforms and ft2font - JDH -2004-06-10 Added rc configuration function rc; deferred all rc param - setting until object creation time; added new rc attrs: - lines.markerfacecolor, lines.markeredgecolor, - lines.markeredgewidth, patch.linewidth, patch.facecolor, - patch.edgecolor, patch.antialiased; see - examples/customize_rc.py for usage - JDH +2004-06-11 + Eliminated numerix .numerix file and environment variable NUMERIX. Fixed + bug which prevented command line overrides: --numarray or --numeric. - JTM +2004-06-10 + Added rc configuration function rc; deferred all rc param setting until + object creation time; added new rc attrs: lines.markerfacecolor, + lines.markeredgecolor, lines.markeredgewidth, patch.linewidth, + patch.facecolor, patch.edgecolor, patch.antialiased; see + examples/customize_rc.py for usage - JDH --------------------------------------------------------------- -2004-06-09 0.54.2 released +0.54.2 (2004-06-09) +------------------- -2004-06-08 Rewrote ft2font using CXX as part of general memory leak - fixes; also fixed transform memory leaks - JDH +2004-06-08 + Rewrote ft2font using CXX as part of general memory leak fixes; also fixed + transform memory leaks - JDH -2004-06-07 Fixed several problems with log ticks and scaling - JDH +2004-06-07 + Fixed several problems with log ticks and scaling - JDH -2004-06-07 Fixed width/height issues for images - JDH +2004-06-07 + Fixed width/height issues for images - JDH -2004-06-03 Fixed draw_if_interactive bug for semilogx; +2004-06-03 + Fixed draw_if_interactive bug for semilogx; -2004-06-02 Fixed text clipping to clip to axes - JDH +2004-06-02 + Fixed text clipping to clip to axes - JDH -2004-06-02 Fixed leading newline text and multiple newline text - JDH +2004-06-02 + Fixed leading newline text and multiple newline text - JDH -2004-06-02 Fixed plot_date to return lines - JDH +2004-06-02 + Fixed plot_date to return lines - JDH -2004-06-01 Fixed plot to work with x or y having shape N,1 or 1,N - JDH +2004-06-01 + Fixed plot to work with x or y having shape N,1 or 1,N - JDH -2004-05-31 Added renderer markeredgewidth attribute of Line2D. - ADS +2004-05-31 + Added renderer markeredgewidth attribute of Line2D. - ADS -2004-05-29 Fixed tick label clipping to work with navigation. +2004-05-29 + Fixed tick label clipping to work with navigation. -2004-05-28 Added renderer grouping commands to support groups in +2004-05-28 + Added renderer grouping commands to support groups in SVG/PS. - JDH -2004-05-28 Fixed, this time I really mean it, the singleton plot - plot([0]) scaling bug; Fixed Flavio's shape = N,1 bug - JDH +2004-05-28 + Fixed, this time I really mean it, the singleton plot plot([0]) scaling + bug; Fixed Flavio's shape = N,1 bug - JDH -2004-05-28 added colorbar - JDH +2004-05-28 + added colorbar - JDH -2004-05-28 Made some changes to the matplotlib.colors.Colormap to - properly support clim - JDH +2004-05-28 + Made some changes to the matplotlib.colors.Colormap to properly support + clim - JDH ----------------------------------------------------------------- -2004-05-27 0.54.1 released +0.54.1 (2004-05-27) +------------------- -2004-05-27 Lots of small bug fixes: rotated text at negative angles, - errorbar capsize and autoscaling, right tick label - position, gtkagg on win98, alpha of figure background, - singleton plots - JDH +2004-05-27 + Lots of small bug fixes: rotated text at negative angles, errorbar capsize + and autoscaling, right tick label position, gtkagg on win98, alpha of + figure background, singleton plots - JDH -2004-05-26 Added Gary's errorbar stuff and made some fixes for length - one plots and constant data plots - JDH +2004-05-26 + Added Gary's errorbar stuff and made some fixes for length one plots and + constant data plots - JDH -2004-05-25 Tweaked TkAgg backend so that canvas.draw() works - more like the other backends. Fixed a bug resulting - in 2 draws per figure manager show(). - JTM +2004-05-25 + Tweaked TkAgg backend so that canvas.draw() works more like the other + backends. Fixed a bug resulting in 2 draws per figure manager show(). + - JTM ------------------------------------------------------------ -2004-05-19 0.54 released +0.54 (2004-05-19) +----------------- -2004-05-18 Added newline separated text with rotations to text.Text - layout - JDH +2004-05-18 + Added newline separated text with rotations to text.Text layout - JDH -2004-05-16 Added fast pcolor using PolyCollections. - JDH +2004-05-16 + Added fast pcolor using PolyCollections. - JDH -2004-05-14 Added fast polygon collections - changed scatter to use - them. Added multiple symbols to scatter. 10x speedup on - large scatters using \*Agg and 5X speedup for ps. - JDH +2004-05-14 + Added fast polygon collections - changed scatter to use them. Added + multiple symbols to scatter. 10x speedup on large scatters using \*Agg and + 5X speedup for ps. - JDH -2004-05-14 On second thought... created an "nx" namespace in - in numerix which maps type names onto typecodes - the same way for both numarray and Numeric. This - undoes my previous change immediately below. To get a - typename for Int16 usable in a Numeric extension: - say nx.Int16. - JTM +2004-05-14 + On second thought... created an "nx" namespace in in numerix which maps + type names onto typecodes the same way for both numarray and Numeric. This + undoes my previous change immediately below. To get a typename for Int16 + usable in a Numeric extension: say nx.Int16. - JTM -2004-05-15 Rewrote transformation class in extension code, simplified - all the artist constructors - JDH +2004-05-15 + Rewrote transformation class in extension code, simplified all the artist + constructors - JDH -2004-05-14 Modified the type definitions in the numarray side of - numerix so that they are Numeric typecodes and can be - used with Numeric compilex extensions. The original - numarray types were renamed to type. - JTM +2004-05-14 + Modified the type definitions in the numarray side of numerix so that they + are Numeric typecodes and can be used with Numeric compilex extensions. + The original numarray types were renamed to type. - JTM -2004-05-06 Gary Ruben sent me a bevy of new plot symbols and markers. - See matplotlib.matlab.plot - JDH +2004-05-06 + Gary Ruben sent me a bevy of new plot symbols and markers. See + matplotlib.matlab.plot - JDH -2004-05-06 Total rewrite of mathtext - factored ft2font stuff out of - layout engine and defined abstract class for font handling - to lay groundwork for ps mathtext. Rewrote parser and made - layout engine much more precise. Fixed all the layout - hacks. Added spacing commands \/ and \hspace. Added - composite chars and defined angstrom. - JDH +2004-05-06 + Total rewrite of mathtext - factored ft2font stuff out of layout engine and + defined abstract class for font handling to lay groundwork for ps mathtext. + Rewrote parser and made layout engine much more precise. Fixed all the + layout hacks. Added spacing commands \/ and \hspace. Added composite + chars and defined angstrom. - JDH -2004-05-05 Refactored text instances out of backend; aligned - text with arbitrary rotations is now supported - JDH +2004-05-05 + Refactored text instances out of backend; aligned text with arbitrary + rotations is now supported - JDH -2004-05-05 Added a Matrix capability for numarray to numerix. JTM +2004-05-05 + Added a Matrix capability for numarray to numerix. JTM -2004-05-04 Updated whats_new.html.template to use dictionary and - template loop, added anchors for all versions and items; - updated goals.txt to use those for links. PG +2004-05-04 + Updated whats_new.html.template to use dictionary and template loop, added + anchors for all versions and items; updated goals.txt to use those for + links. PG -2004-05-04 Added fonts_demo.py to backend_driver, and AFM and TTF font - caches to font_manager.py - PEB +2004-05-04 + Added fonts_demo.py to backend_driver, and AFM and TTF font caches to + font_manager.py - PEB -2004-05-03 Redid goals.html.template to use a goals.txt file that - has a pseudo restructured text organization. PG +2004-05-03 + Redid goals.html.template to use a goals.txt file that has a pseudo + restructured text organization. PG -2004-05-03 Removed the close buttons on all GUIs and added the python - #! bang line to the examples following Steve Chaplin's - advice on matplotlib dev +2004-05-03 + Removed the close buttons on all GUIs and added the python #! bang line to + the examples following Steve Chaplin's advice on matplotlib dev -2004-04-29 Added CXX and rewrote backend_agg using it; tracked down - and fixed agg memory leak - JDH +2004-04-29 + Added CXX and rewrote backend_agg using it; tracked down and fixed agg + memory leak - JDH -2004-04-29 Added stem plot command - JDH +2004-04-29 + Added stem plot command - JDH -2004-04-28 Fixed PS scaling and centering bug - JDH +2004-04-28 + Fixed PS scaling and centering bug - JDH -2004-04-26 Fixed errorbar autoscale problem - JDH +2004-04-26 + Fixed errorbar autoscale problem - JDH -2004-04-22 Fixed copy tick attribute bug, fixed singular datalim - ticker bug; fixed mathtext fontsize interactive bug. - JDH +2004-04-22 + Fixed copy tick attribute bug, fixed singular datalim ticker bug; fixed + mathtext fontsize interactive bug. - JDH -2004-04-21 Added calls to draw_if_interactive to axes(), legend(), - and pcolor(). Deleted duplicate pcolor(). - JTM +2004-04-21 + Added calls to draw_if_interactive to axes(), legend(), and pcolor(). + Deleted duplicate pcolor(). - JTM ------------------------------------------------------------ -2004-04-21 matplotlib 0.53 release +2004-04-21 + matplotlib 0.53 release -2004-04-19 Fixed vertical alignment bug in PS backend - JDH +2004-04-19 + Fixed vertical alignment bug in PS backend - JDH -2004-04-17 Added support for two scales on the "same axes" with tick - different ticking and labeling left right or top bottom. - See examples/two_scales.py - JDH +2004-04-17 + Added support for two scales on the "same axes" with tick different ticking + and labeling left right or top bottom. See examples/two_scales.py - JDH -2004-04-17 Added default dirs as list rather than single dir in - setupext.py - JDH +2004-04-17 + Added default dirs as list rather than single dir in setupext.py - JDH -2004-04-16 Fixed wx exception swallowing bug (and there was much - rejoicing!) - JDH +2004-04-16 + Fixed wx exception swallowing bug (and there was much rejoicing!) - JDH -2004-04-16 Added new ticker locator a formatter, fixed default font - return - JDH +2004-04-16 + Added new ticker locator a formatter, fixed default font return - JDH -2004-04-16 Added get_name method to FontProperties class. Fixed font lookup - in GTK and WX backends. - PEB +2004-04-16 + Added get_name method to FontProperties class. Fixed font lookup in GTK and + WX backends. - PEB -2004-04-16 Added get- and set_fontstyle msethods. - PEB +2004-04-16 + Added get- and set_fontstyle msethods. - PEB -2004-04-10 Mathtext fixes: scaling with dpi, - JDH +2004-04-10 + Mathtext fixes: scaling with dpi, - JDH -2004-04-09 Improved font detection algorithm. - PEB +2004-04-09 + Improved font detection algorithm. - PEB -2004-04-09 Move deprecation warnings from text.py to __init__.py - PEB +2004-04-09 + Move deprecation warnings from text.py to __init__.py - PEB -2004-04-09 Added default font customization - JDH +2004-04-09 + Added default font customization - JDH -2004-04-08 Fixed viewlim set problem on axes and axis. - JDH +2004-04-08 + Fixed viewlim set problem on axes and axis. - JDH -2004-04-07 Added validate_comma_sep_str and font properties parameters to - __init__. Removed font families and added rcParams to - FontProperties __init__ arguments in font_manager. Added - default font property parameters to .matplotlibrc file with - descriptions. Added deprecation warnings to the get\_ - and - set_fontXXX methods of the Text object. - PEB +2004-04-07 + Added validate_comma_sep_str and font properties parameters to __init__. + Removed font families and added rcParams to FontProperties __init__ + arguments in font_manager. Added default font property parameters to + .matplotlibrc file with descriptions. Added deprecation warnings to the + get\_ - and set_fontXXX methods of the Text object. - PEB -2004-04-06 Added load and save commands for ASCII data - JDH +2004-04-06 + Added load and save commands for ASCII data - JDH -2004-04-05 Improved font caching by not reading AFM fonts until needed. - Added better documentation. Changed the behaviour of the - get_family, set_family, and set_name methods of FontProperties. - - PEB +2004-04-05 + Improved font caching by not reading AFM fonts until needed. Added better + documentation. Changed the behaviour of the get_family, set_family, and + set_name methods of FontProperties. - PEB -2004-04-05 Added WXAgg backend - JDH +2004-04-05 + Added WXAgg backend - JDH -2004-04-04 Improved font caching in backend_agg with changes to - font_manager - JDH +2004-04-04 + Improved font caching in backend_agg with changes to font_manager - JDH -2004-03-29 Fixed fontdicts and kwargs to work with new font manager - - JDH +2004-03-29 + Fixed fontdicts and kwargs to work with new font manager - JDH -------------------------------------------- This is the Old, stale, never used changelog -2002-12-10 - Added a TODO file and CHANGELOG. Lots to do -- get - crackin'! +2002-12-10 + - Added a TODO file and CHANGELOG. Lots to do -- get crackin'! - - Fixed y zoom tool bug + - Fixed y zoom tool bug - - Adopted a compromise fix for the y data clipping problem. - The problem was that for solid lines, the y data clipping - (as opposed to the gc clipping) caused artifactual - horizontal solid lines near the ylim boundaries. I did a - 5% offset hack in Axes set_ylim functions which helped, - but didn't cure the problem for very high gain y zooms. - So I disabled y data clipping for connected lines . If - you need extensive y clipping, either plot(y,x) because x - data clipping is always enabled, or change the _set_clip - code to 'if 1' as indicated in the lines.py src. See - _set_clip in lines.py and set_ylim in figure.py for more - information. + - Adopted a compromise fix for the y data clipping problem. The problem + was that for solid lines, the y data clipping (as opposed to the gc + clipping) caused artifactual horizontal solid lines near the ylim + boundaries. I did a 5% offset hack in Axes set_ylim functions which + helped, but didn't cure the problem for very high gain y zooms. So I + disabled y data clipping for connected lines . If you need extensive y + clipping, either plot(y,x) because x data clipping is always enabled, or + change the _set_clip code to 'if 1' as indicated in the lines.py src. + See _set_clip in lines.py and set_ylim in figure.py for more information. +2002-12-11 + - Added a measurement dialog to the figure window to measure axes position + and the delta x delta y with a left mouse drag. These defaults can be + overridden by deriving from Figure and overriding button_press_event, + button_release_event, and motion_notify_event, and _dialog_measure_tool. -2002-12-11 - Added a measurement dialog to the figure window to - measure axes position and the delta x delta y with a left - mouse drag. These defaults can be overridden by deriving - from Figure and overriding button_press_event, - button_release_event, and motion_notify_event, - and _dialog_measure_tool. + - fixed the navigation dialog so you can check the axes the navigation + buttons apply to. - - fixed the navigation dialog so you can check the axes the - navigation buttons apply to. +2003-04-23 + Released matplotlib v0.1 +2003-04-24 + Added a new line style PixelLine2D which is the plots the markers as pixels + (as small as possible) with format symbol ',' + Added a new class Patch with derived classes Rectangle, RegularPolygon and + Circle -2003-04-23 Released matplotlib v0.1 - -2003-04-24 Added a new line style PixelLine2D which is the plots the - markers as pixels (as small as possible) with format - symbol ',' - - Added a new class Patch with derived classes Rectangle, - RegularPolygon and Circle - -2003-04-25 Implemented new functions errorbar, scatter and hist - - Added a new line type '|' which is a vline. syntax is - plot(x, Y, '|') where y.shape = len(x),2 and each row gives - the ymin,ymax for the respective values of x. Previously I - had implemented vlines as a list of lines, but I needed the - efficientcy of the numeric clipping for large numbers of - vlines outside the viewport, so I wrote a dedicated class - Vline2D which derives from Line2D +2003-04-25 + Implemented new functions errorbar, scatter and hist + Added a new line type '|' which is a vline. syntax is plot(x, Y, '|') + where y.shape = len(x),2 and each row gives the ymin,ymax for the + respective values of x. Previously I had implemented vlines as a list of + lines, but I needed the efficientcy of the numeric clipping for large + numbers of vlines outside the viewport, so I wrote a dedicated class + Vline2D which derives from Line2D 2003-05-01 - - Fixed ytick bug where grid and tick show outside axis viewport with gc clip + Fixed ytick bug where grid and tick show outside axis viewport with gc clip 2003-05-14 - - Added new ways to specify colors 1) matlab format string 2) - html-style hex string, 3) rgb tuple. See examples/color_demo.py + Added new ways to specify colors 1) matlab format string 2) html-style hex + string, 3) rgb tuple. See examples/color_demo.py 2003-05-28 - - Changed figure rendering to draw form a pixmap to reduce flicker. - See examples/system_monitor.py for an example where the plot is - continusouly updated w/o flicker. This example is meant to - simulate a system monitor that shows free CPU, RAM, etc... + Changed figure rendering to draw form a pixmap to reduce flicker. See + examples/system_monitor.py for an example where the plot is continusouly + updated w/o flicker. This example is meant to simulate a system monitor + that shows free CPU, RAM, etc... 2003-08-04 - - Added Jon Anderson's GTK shell, which doesn't require pygtk to - have threading built-in and looks nice! + Added Jon Anderson's GTK shell, which doesn't require pygtk to have + threading built-in and looks nice! 2003-08-25 - - Fixed deprecation warnings for python2.3 and pygtk-1.99.18 + Fixed deprecation warnings for python2.3 and pygtk-1.99.18 2003-08-26 - - Added figure text with new example examples/figtext.py - + Added figure text with new example examples/figtext.py 2003-08-27 + Fixed bugs i figure text with font override dictionairies and fig text that + was placed outside the window bounding box - Fixed bugs i figure text with font override dictionairies and fig - text that was placed outside the window bounding box - -2003-09-1 through 2003-09-15 - - Added a postscript and a GD module backend +2003-09-01 through 2003-09-15 + Added a postscript and a GD module backend 2003-09-16 - - Fixed font scaling and point scaling so circles, squares, etc on - lines will scale with DPI as will fonts. Font scaling is not fully - implemented on the gtk backend because I have not figured out how - to scale fonts to arbitrary sizes with GTK + Fixed font scaling and point scaling so circles, squares, etc on lines will + scale with DPI as will fonts. Font scaling is not fully implemented on the + gtk backend because I have not figured out how to scale fonts to arbitrary + sizes with GTK 2003-09-17 + Fixed figure text bug which crashed X windows on long figure text extending + beyond display area. This was, I believe, due to the vestigial erase + functionality that was no longer needed since I began rendering to a pixmap - Fixed figure text bug which crashed X windows on long figure text - extending beyond display area. This was, I believe, due to the - vestigial erase functionality that was no longer needed since I - began rendering to a pixmap - -2003-09-30 Added legend +2003-09-30 + Added legend -2003-10-01 Fixed bug when colors are specified with rgb tuple or hex - string. +2003-10-01 + Fixed bug when colors are specified with rgb tuple or hex string. +2003-10-21 + Andrew Straw provided some legend code which I modified and incorporated. + Thanks Andrew! -2003-10-21 Andrew Straw provided some legend code which I modified - and incorporated. Thanks Andrew! +2003-10-27 + Fixed a bug in axis.get_view_distance that affected zoom in versus out with + interactive scrolling, and a bug in the axis text reset system that + prevented the text from being redrawn on a interactive gtk view lim set + with the widget -2003-10-27 Fixed a bug in axis.get_view_distance that affected zoom in - versus out with interactive scrolling, and a bug in the axis text - reset system that prevented the text from being redrawn on a - interactive gtk view lim set with the widget + Fixed a bug in that prevented the manual setting of ticklabel strings from + working properly - Fixed a bug in that prevented the manual setting of ticklabel - strings from working properly - -2003-11-02 - Do a nearest neighbor color pick on GD when - allocate fails +2003-11-02 + - Do a nearest neighbor color pick on GD when allocate fails 2003-11-02 - - Added pcolor plot - - Added MRI example - - Fixed bug that screwed up label position if xticks or yticks were - empty - - added nearest neighbor color picker when GD max colors exceeded - - fixed figure background color bug in GD backend + - Added pcolor plot + - Added MRI example + - Fixed bug that screwed up label position if xticks or yticks were empty + - added nearest neighbor color picker when GD max colors exceeded + - fixed figure background color bug in GD backend 2003-11-10 - 2003-11-11 - - major refactoring. - - * Ticks (with labels, lines and grid) handled by dedicated class - * Artist now know bounding box and dpi - * Bounding boxes and transforms handled by dedicated classes - * legend in dedicated class. Does a better job of alignment and - bordering. Can be initialized with specific line instances. - See examples/legend_demo2.py - - -2003-11-14 Fixed legend positioning bug and added new position args + major refactoring. -2003-11-16 Finished porting GD to new axes API + * Ticks (with labels, lines and grid) handled by dedicated class + * Artist now know bounding box and dpi + * Bounding boxes and transforms handled by dedicated classes + * legend in dedicated class. Does a better job of alignment and bordering. + Can be initialized with specific line instances. See + examples/legend_demo2.py +2003-11-14 + Fixed legend positioning bug and added new position args -2003-11-20 - add TM for matlab on website and in docs +2003-11-16 + Finished porting GD to new axes API +2003-11-20 + - add TM for matlab on website and in docs -2003-11-20 - make a nice errorbar and scatter screenshot +2003-11-20 + - make a nice errorbar and scatter screenshot -2003-11-20 - auto line style cycling for multiple line types - broken +2003-11-20 + - auto line style cycling for multiple line types broken -2003-11-18 (using inkrect) :logical rect too big on gtk backend +2003-11-18 + (using inkrect) :logical rect too big on gtk backend -2003-11-18 ticks don't reach edge of axes in gtk mode -- - rounding error? +2003-11-18 + ticks don't reach edge of axes in gtk mode -- rounding error? -2003-11-20 - port Gary's errorbar code to new API before 0.40 +2003-11-20 + - port Gary's errorbar code to new API before 0.40 -2003-11-20 - problem with stale _set_font. legend axes box - doesn't resize on save in GTK backend -- see htdocs legend_demo.py +2003-11-20 + - problem with stale _set_font. legend axes box doesn't resize on save in + GTK backend -- see htdocs legend_demo.py -2003-11-21 - make a dash-dot dict for the GC +2003-11-21 + - make a dash-dot dict for the GC -2003-12-15 - fix install path bug +2003-12-15 + - fix install path bug diff --git a/doc/users/prev_whats_new/github_stats_3.0.0.rst b/doc/users/prev_whats_new/github_stats_3.0.0.rst new file mode 100644 index 000000000000..ab90e5e79e4e --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.0.0.rst @@ -0,0 +1,1221 @@ +.. _github-stats-3-0-0: + +GitHub statistics for 3.0.0 (Sep 18, 2018) +========================================== + +GitHub statistics for 2017/01/17 (tag: v2.0.0) - 2018/09/18 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 123 issues and merged 598 pull requests. +The full list can be seen `on GitHub `__ + +The following 478 authors contributed 9809 commits. + +* 816-8055 +* Aashil Patel +* AbdealiJK +* Adam +* Adam Williamson +* Adrian Price-Whelan +* Adrien Chardon +* Adrien F. Vincent +* ahed87 +* akrherz +* Akshay Nair +* Alan Bernstein +* Alberto +* alcinos +* Aleksey Bilogur +* Alex Rothberg +* Alexander Buchkovsky +* Alexander Harnisch +* AlexCav +* Alexis Bienvenüe +* Ali Uneri +* Allan Haldane +* Allen Downey +* Alvaro Sanchez +* alvarosg +* AndersonDaniel +* Andras Deak +* Andreas Gustafsson +* Andreas Hilboll +* Andreas Mayer +* Andreas Mueller +* Andrew Nelson +* Andy Mastbaum +* aneda +* Anthony Scopatz +* Anton Akhmerov +* Antony Lee +* aparamon +* apodemus +* Arthur Paulino +* Arvind +* as691454 +* ash13 +* Atharva Khare +* Avinash Sharma +* Bastian Bechtold +* bduick +* Ben +* Ben Root +* Benedikt Daurer +* Benjamin Berg +* Benjamin Congdon +* Bernhard M. Wiedemann +* BHT +* Bianca Gibson +* Björn Dahlgren +* Blaise Thompson +* Boaz Mohar +* Brendan Zhang +* Brennan Magee +* Bruno Zohreh +* BTWS +* buefox +* Cameron Davidson-Pilon +* Cameron Fackler +* cclauss +* ch3rn0v +* Charles Ruan +* chelseatroy +* Chen Karako +* Chris Holdgraf +* Christoph Deil +* Christoph Gohlke +* Cimarron Mittelsteadt +* CJ Carey +* cknd +* cldssty +* clintval +* Cody Scot +* Colin +* Conner R. Phillips +* Craig Citro +* DaCoEx +* dahlbaek +* Dakota Blair +* Damian +* Dan Hickstein +* Dana +* Daniel C. Marcu +* Daniel Laidig +* danielballan +* Danny Hermes +* daronjp +* DaveL17 +* David A +* David Brooks +* David Kent +* David Stansby +* deeenes +* deepyaman +* Derek Kim +* Derek Tropf +* Devashish Deshpande +* Diego Mora Cespedes +* Dietmar Schwertberger +* Dietrich Brunn +* Divyam Madaan +* dlmccaffrey +* Dmitry Shachnev +* Dora Fraeman +* DoriekeMG +* Dorota Jarecka +* Doug Blank +* Drew J. Sonne +* Duncan Macleod +* Dylan Evans +* E. G. Patrick Bos +* Egor Panfilov +* Elijah Schutz +* Elizabeth Seiver +* Elliott Sales de Andrade +* Elvis Stansvik +* Emlyn Price +* endolith +* Eric Dill +* Eric Firing +* Eric Galloway +* Eric Larson +* Eric Wang (Mac) +* Eric Wieser +* Erik M. Bray +* Erin Pintozzi +* et2010 +* Ethan Ligon +* Eugene Yurtsev +* Fabian Kloosterman +* Fabian-Robert Stöter +* FedeMiorelli +* Federico Ariza +* Felix +* Felix Kohlgrüber +* Felix Yan +* Filip Dimitrovski +* Florencia Noriega +* Florian Le Bourdais +* Franco Vaccari +* Francoise Provencher +* Frank Yu +* fredrik-1 +* fuzzythecat +* Gabe +* Gabriel Munteanu +* Gauravjeet +* Gaute Hope +* gcallah +* Geoffrey Spear +* gnaggnoyil +* goldstarwebs +* Graeme Smecher +* greg-roper +* gregorybchris +* Grillard +* Guillermo Breto +* Gustavo Goretkin +* Hajoon Choi +* Hakan Kucukdereli +* hannah +* Hans Moritz Günther +* Harnesser +* Harshal Prakash Patankar +* Harshit Patni +* Hassan Kibirige +* Hastings Greer +* Heath Henley +* Heiko Oberdiek +* Helder +* helmiriawan +* Henning Pohl +* Herbert Kruitbosch +* HHest +* Hubert Holin +* Ian Thomas +* Ida Hjorth +* Ildar Akhmetgaleev +* ilivni +* Ilya Flyamer +* ImportanceOfBeingErnest +* ImSoErgodic +* Isa Hassen +* Isaac Schwabacher +* Isaac Slavitt +* Ismo Toijala +* J Alammar +* J. Goutin +* Jaap Versteegh +* Jacob McDonald +* jacob-on-github +* Jae-Joon Lee +* Jake Vanderplas +* James A. Bednar +* Jamie Nunez +* Jan Koehler +* Jan Schlüter +* Jan Schulz +* Jarrod Millman +* Jason King +* Jason Neal +* Jason Zheng +* jbhopkins +* jdollichon +* Jeffrey Hokanson @ Loki +* JelsB +* Jens Hedegaard Nielsen +* Jerry Lui +* jerrylui803 +* jhelie +* jli +* Jody Klymak +* joelostblom +* Johannes Wienke +* John Hoffman +* John Vandenberg +* Johnny Gill +* JojoBoulix +* jonchar +* Joseph Albert +* Joseph Fox-Rabinovitz +* Joseph Jon Booker +* Joseph Martinot-Lagarde +* Jouni K. Seppänen +* Juan Nunez-Iglesias +* Julia Sprenger +* Julian Mehne +* Julian V. Modesto +* Julien Lhermitte +* Julien Schueller +* Jun Tan +* Justin Cai +* Jörg Dietrich +* Kacper Kowalik (Xarthisius) +* Kanchana Ranasinghe +* Katrin Leinweber +* Keerysanth Sribaskaran +* keithbriggs +* Kenneth Ma +* Kevin Davies +* Kevin Ji +* Kevin Keating +* Kevin Rose +* Kexuan Sun +* khyox +* Kieran Ramos +* Kjartan Myrdal +* Kjell Le +* Klara Gerlei +* klaus +* klonuo +* Kristen M. Thyng +* kshramt +* Kyle Bridgemohansingh +* Kyle Sunden +* Kyler Brown +* Laptop11_ASPP2016 +* lboogaard +* legitz7 +* Leo Singer +* Leon Yin +* Levi Kilcher +* Liam Brannigan +* Lionel Miller +* lspvic +* Luca Verginer +* Luis Pedro Coelho +* luz.paz +* lzkelley +* Maarten Baert +* Magnus Nord +* mamrehn +* Manish Devgan +* Manuel Jung +* Mark Harfouche +* Martin Fitzpatrick +* Martin Spacek +* Massimo Santini +* Matt Hancock +* Matt Newville +* Matthew Bell +* Matthew Brett +* Matthias Bussonnier +* Matthias Lüthi +* Matti Picus +* Maximilian Albert +* Maximilian Maahn +* Maximilian Nöthe +* mcquin +* Mher Kazandjian +* Michael Droettboom +* Michael Scott Cuthbert +* Michael Seifert +* Michiel de Hoon +* Mike Henninger +* Mike Jarvis +* MinRK +* Mitar +* mitch +* mlub +* mobando +* Molly Rossow +* Moritz Boehle +* muahah +* Mudit Surana +* myyc +* Naoya Kanai +* Nathan Goldbaum +* Nathan Musoke +* Nathaniel M. Beaver +* navdeep rana +* nbrunett +* Nelle Varoquaux +* nemanja +* neok-m4700 +* nepix32 +* Nick Forrington +* Nick Garvey +* Nick Papior +* Nico Schlömer +* Nicolas P. Rougier +* Nicolas Tessore +* Nik Quibin +* Nikita Kniazev +* Nils Werner +* Ninad Bhat +* nmartensen +* Norman Fomferra +* ob +* OceanWolf +* Olivier +* Orso Meneghini +* Osarumwense +* Pankaj Pandey +* Paramonov Andrey +* Pastafarianist +* Paul Ganssle +* Paul Hobson +* Paul Ivanov +* Paul Kirow +* Paul Romano +* Paul Seyfert +* Pavol Juhas +* pdubcali +* Pete Huang +* Pete Peterson +* Peter Mackenzie-Helnwein +* Peter Mortensen +* Peter Würtz +* Petr Danecek +* pharshalp +* Phil Elson +* Phil Ruffwind +* Pierre de Buyl +* Pierre Haessig +* Pranav Garg +* productivememberofsociety666 +* Przemysław Dąbek +* Qingpeng "Q.P." Zhang +* RAKOTOARISON Herilalaina +* Ramiro Gómez +* Randy Olson +* rebot +* Richard Gowers +* Rishikesh +* Rob Harrigan +* Robin Dunn +* Robin Neatherway +* Robin Wilson +* Ronald Hartley-Davies +* Roy Smith +* Rui Lopes +* ruin +* rvhbooth +* Ryan +* Ryan May +* Ryan Morshead +* RyanPan +* s0vereign +* Saket Choudhary +* Salganos +* Salil Vanvari +* Salinder Sidhu +* Sam Vaughan +* Samson +* Samuel St-Jean +* Sander +* scls19fr +* Scott Howard +* Scott Lasley +* scott-vsi +* Sean Farley +* Sebastian Raschka +* Sebastián Vanrell +* Seraphim Alvanides +* Sergey B Kirpichev +* serv-inc +* settheory +* shaunwbell +* Simon Gibbons +* simonpf +* sindunuragarp +* Sourav Singh +* Stefan Pfenninger +* Stephan Erb +* Sterling Smith +* Steven Silvester +* Steven Tilley +* stone +* stonebig +* Tadeo Corradi +* Taehoon Lee +* Tanuj +* Taras +* Taras Kuzyo +* TD22057 +* Ted Petrou +* terranjp +* Terrence J. Katzenbaer +* Terrence Katzenbaer +* The Gitter Badger +* Thomas A Caswell +* Thomas Hisch +* Thomas Levine +* Thomas Mansencal +* Thomas Robitaille +* Thomas Spura +* Thomas VINCENT +* Thorsten Liebig +* thuvejan +* Tian Xia +* Till Stensitzki +* Tim Hoffmann +* tmdavison +* Tobias Froehlich +* Tobias Megies +* Tom +* Tom Augspurger +* Tom Dupré la Tour +* tomoemon +* tonyyli +* Trish Gillett-Kawamoto +* Truong Pham +* Tuan Dung Tran +* u55 +* ultra-andy +* V. R +* vab9 +* Valentin Schmidt +* Vedant Nanda +* Vidur Satija +* vraelvrangr +* Víctor Zabalza +* WANG Aiyong +* Warren Weckesser +* watkinrt +* Wieland Hoffmann +* Will Silva +* William Granados +* William Mallard +* Xufeng Wang +* y1thof +* Yao-Yuan Mao +* Yuval Langer +* Zac Hatfield-Dodds +* Zbigniew Jędrzejewski-Szmek +* zhangeugenia +* ZhaoZhonglun1991 +* zhoubecky +* ZWL +* Élie Gouzien +* Андрей Парамонов + +GitHub issues and pull requests: + +Pull Requests (598): + +* :ghpull:`12145`: Doc final 3.0 docs +* :ghpull:`12143`: Backport PR #12142 on branch v3.0.x (Unbreak formlayout for image edits.) +* :ghpull:`12142`: Unbreak formlayout for image edits. +* :ghpull:`12135`: Backport PR #12131 on branch v3.0.x (Fixes currently release version of cartopy) +* :ghpull:`12131`: Fixes currently release version of cartopy +* :ghpull:`12129`: Backports for 3.0 +* :ghpull:`12132`: Backport PR #12130 on branch v3.0.x (Mention colorbar.minorticks_on/off in references) +* :ghpull:`12130`: Mention colorbar.minorticks_on/off in references +* :ghpull:`12099`: FIX: make sure all ticks show up for colorbar minor tick +* :ghpull:`11962`: Propagate changes to backend loading to setup/setupext. +* :ghpull:`12128`: Unbreak the Sphinx 1.8 build by renaming :math: to :mathmpl:. +* :ghpull:`12126`: Backport PR #12117 on branch v3.0.x (Fix Agg extent calculations for empty draws) +* :ghpull:`12113`: Backport PR #12112 on branch v3.0.x (Reword the LockDraw docstring.) +* :ghpull:`12112`: Reword the LockDraw docstring. +* :ghpull:`12110`: Backport PR #12109 on branch v3.0.x (Pin to sphinx<1.8; unremove sphinxext.mathmpl.) +* :ghpull:`12084`: DOC: link palettable +* :ghpull:`12096`: Backport PR #12092 on branch v3.0.x (Update backend_qt5agg to fix PySide2 mem issues) +* :ghpull:`12083`: Backport PR #12012 on branch v3.0.x (FIX: fallback text renderer to fig._cachedRenderer, if none found) +* :ghpull:`12081`: Backport PR #12037 on branch v3.0.x (Fix ArtistInspector.get_aliases.) +* :ghpull:`12080`: Backport PR #12053 on branch v3.0.x (Fix up some OSX backend issues) +* :ghpull:`12037`: Fix ArtistInspector.get_aliases. +* :ghpull:`12053`: Fix up some OSX backend issues +* :ghpull:`12064`: Backport PR #11971 on branch v3.0.x (FIX: use cached renderer on Legend.get_window_extent) +* :ghpull:`12063`: Backport PR #12036 on branch v3.0.x (Interactive tests update) +* :ghpull:`11928`: Update doc/conf.py to avoid warnings with (future) sphinx 1.8. +* :ghpull:`12048`: Backport PR #12047 on branch v3.0.x (Remove asserting about current backend at the end of mpl_test_settings.) +* :ghpull:`11971`: FIX: use cached renderer on Legend.get_window_extent +* :ghpull:`12036`: Interactive tests update +* :ghpull:`12029`: Backport PR #12022 on branch v3.0.x (Remove intent to deprecate rcParams["backend_fallback"].) +* :ghpull:`12047`: Remove asserting about current backend at the end of mpl_test_settings. +* :ghpull:`12020`: Backport PR #12019 on branch v3.0.x (typo: s/unmultipled/unmultiplied) +* :ghpull:`12022`: Remove intent to deprecate rcParams["backend_fallback"]. +* :ghpull:`12028`: Backport PR #12023 on branch v3.0.x (Fix deprecation check in wx Timer.) +* :ghpull:`12023`: Fix deprecation check in wx Timer. +* :ghpull:`12019`: typo: s/unmultipled/unmultiplied +* :ghpull:`12017`: Backport PR #12016 on branch v3.0.x (Fix AttributeError in GTK3Agg backend) +* :ghpull:`12016`: Fix AttributeError in GTK3Agg backend +* :ghpull:`11991`: Backport PR #11988 on branch v3.0.x +* :ghpull:`11978`: Backport PR #11973 on branch v3.0.x +* :ghpull:`11968`: Backport PR #11963 on branch v3.0.x +* :ghpull:`11967`: Backport PR #11961 on branch v3.0.x +* :ghpull:`11969`: Fix an invalid escape sequence. +* :ghpull:`11963`: Fix some lgtm convention alerts +* :ghpull:`11961`: Downgrade backend_version log to DEBUG level. +* :ghpull:`11953`: Backport PR #11896 on branch v3.0.x +* :ghpull:`11896`: Resolve backend in rcParams.__getitem__("backend"). +* :ghpull:`11950`: Backport PR #11934 on branch v3.0.x +* :ghpull:`11952`: Backport PR #11949 on branch v3.0.x +* :ghpull:`11949`: Remove test2.png from examples. +* :ghpull:`11934`: Suppress the "non-GUI backend" warning from the .. plot:: directive... +* :ghpull:`11918`: Backport PR #11917 on branch v3.0.x +* :ghpull:`11916`: Backport PR #11897 on branch v3.0.x +* :ghpull:`11915`: Backport PR #11591 on branch v3.0.x +* :ghpull:`11897`: HTMLWriter, put initialisation of frames in setup +* :ghpull:`11591`: BUG: correct the scaling in the floating-point slop test. +* :ghpull:`11910`: Backport PR #11907 on branch v3.0.x +* :ghpull:`11907`: Move TOC back to top in axes documentation +* :ghpull:`11904`: Backport PR #11900 on branch v3.0.x +* :ghpull:`11900`: Allow args to pass through _allow_super_init +* :ghpull:`11889`: Backport PR #11847 on branch v3.0.x +* :ghpull:`11890`: Backport PR #11850 on branch v3.0.x +* :ghpull:`11850`: FIX: macosx framework check +* :ghpull:`11883`: Backport PR #11862 on branch v3.0.x +* :ghpull:`11882`: Backport PR #11876 on branch v3.0.x +* :ghpull:`11876`: MAINT Better error message for number of colors versus number of data… +* :ghpull:`11862`: Fix NumPy FutureWarning for non-tuple indexing. +* :ghpull:`11845`: Use Format_ARGB32_Premultiplied instead of RGBA8888 for Qt backends. +* :ghpull:`11843`: Remove unnecessary use of nose. +* :ghpull:`11600`: backend switching -- don't create a public fallback API +* :ghpull:`11833`: adding show inheritance to autosummary template +* :ghpull:`11828`: changed warning in animation +* :ghpull:`11829`: func animation warning changes +* :ghpull:`11826`: DOC documented more of the gridspec options +* :ghpull:`11818`: Merge v2.2.x +* :ghpull:`11821`: DOC: remove multicolumns from examples +* :ghpull:`11819`: DOC: fix minor typo in figure example +* :ghpull:`11722`: Remove unnecessary hacks from setup.py. +* :ghpull:`11802`: gridspec tutorial edits +* :ghpull:`11801`: update annotations +* :ghpull:`11734`: Small cleanups to backend_agg. +* :ghpull:`11785`: Add missing API changes +* :ghpull:`11788`: Fix DeprecationWarning on LocatableAxes +* :ghpull:`11558`: Added xkcd Style for Markers (plot only) +* :ghpull:`11755`: Add description for metadata argument of savefig +* :ghpull:`11703`: FIX: make update-from also set the original face/edgecolor +* :ghpull:`11765`: DOC: reorder examples and fix top level heading +* :ghpull:`11724`: Fix cairo's image inversion and alpha misapplication. +* :ghpull:`11726`: Consolidate agg-buffer examples. +* :ghpull:`11754`: FIX: update spine positions before get extents +* :ghpull:`11779`: Remove unused attribute in tests. +* :ghpull:`11770`: Correct errors in documentation +* :ghpull:`11778`: Unpin pandas in the CI. +* :ghpull:`11772`: Clarifying an error message +* :ghpull:`11760`: Switch grid documentation to numpydoc style +* :ghpull:`11705`: Suppress/fix some test warnings. +* :ghpull:`11763`: Pin OSX CI to numpy<1.15 to unbreak the build. +* :ghpull:`11767`: Add tolerance to csd frequency test +* :ghpull:`11757`: PGF backend output text color even if black +* :ghpull:`11751`: Remove the unused 'verbose' option from setupext. +* :ghpull:`9084`: Require calling a _BoundMethodProxy to get the underlying callable. +* :ghpull:`11752`: Fix section level of Previous Whats New +* :ghpull:`10513`: Replace most uses of getfilesystemencoding by os.fs{en,de}code. +* :ghpull:`11739`: fix tight_layout bug #11737 +* :ghpull:`11744`: minor doc update on axes_grid1's inset_axes +* :ghpull:`11729`: Pass 'figure' as kwarg to FigureCanvasQt5Agg super __init__. +* :ghpull:`11736`: Remove unused needs_sphinx marker; move importorskip to toplevel. +* :ghpull:`11731`: Directly get the size of the renderer buffer from the renderer. +* :ghpull:`11717`: DOC: fix broken link in inset-locator example +* :ghpull:`11723`: Start work on making colormaps picklable. +* :ghpull:`11721`: Remove some references to colorConverter. +* :ghpull:`11713`: Don't assume cwd in test_ipynb. +* :ghpull:`11026`: ENH add an inset_axes to the axes class +* :ghpull:`11712`: Fix drawing on qt+retina. +* :ghpull:`11714`: docstring for Figure.tight_layout don't include renderer parameter +* :ghpull:`8951`: Let QPaintEvent tell us what region to repaint. +* :ghpull:`11234`: Add fig.add_artist method +* :ghpull:`11706`: Remove unused private method. +* :ghpull:`11637`: Split API changes into individual pages +* :ghpull:`10403`: Deprecate LocatableAxes from toolkits +* :ghpull:`11699`: Dedent overindented rst bullet lists. +* :ghpull:`11701`: Use skipif instead of xfail when test dependencies are missing. +* :ghpull:`11700`: Don't use pytest -rw now that pytest-warnings is builtin. +* :ghpull:`11696`: Don't force backend in toolmanager example. +* :ghpull:`11690`: Avoid using private APIs in examples. +* :ghpull:`11684`: Style +* :ghpull:`11666`: TESTS: Increase tolerance for aarch64 tests +* :ghpull:`11680`: Boring style fixes. +* :ghpull:`11678`: Use super() instead of manually fetching supermethods for parasite axes. +* :ghpull:`11679`: Remove pointless draw() at the end of static examples. +* :ghpull:`11676`: Remove unused C++ code. +* :ghpull:`11010`: ENH: Add gridspec method to figure, and subplotspecs +* :ghpull:`11672`: Add comment re: use of lru_cache in PsfontsMap. +* :ghpull:`11674`: Boring style fixes. +* :ghpull:`10954`: Cache various dviread constructs globally. +* :ghpull:`9150`: Don't update style-blacklisted rcparams in rc_* functions +* :ghpull:`10936`: Simplify tkagg C extension. +* :ghpull:`11378`: SVG Backend gouraud_triangle Correction +* :ghpull:`11383`: FIX: Improve *c* (color) kwarg checking in scatter and the related exceptions +* :ghpull:`11627`: FIX: CL avoid fully collapsed axes +* :ghpull:`11504`: Bump pgi requirement to 0.0.11.2. +* :ghpull:`11640`: Fix barplot color if none and alpha is set +* :ghpull:`11443`: changed paths in kwdocs +* :ghpull:`11626`: Minor docstring fixes +* :ghpull:`11631`: DOC: better tight_layout error handling +* :ghpull:`11651`: Remove unused imports in examples +* :ghpull:`11633`: Clean up next api_changes +* :ghpull:`11643`: Fix deprecation messages. +* :ghpull:`9223`: Set norm to log if bins=='log' in hexbin +* :ghpull:`11622`: FIX: be forgiving about the event for enterEvent not having a pos +* :ghpull:`11581`: backend switching. +* :ghpull:`11616`: Fix some doctest issues +* :ghpull:`10872`: Cleanup _plot_args_replacer logic +* :ghpull:`11617`: Clean up what's new +* :ghpull:`11610`: FIX: let colorbar extends work for PowerNorm +* :ghpull:`11615`: Revert glyph warnings +* :ghpull:`11614`: CI: don't run tox to test pytz +* :ghpull:`11603`: Doc merge up +* :ghpull:`11613`: Make flake8 exceptions explicit +* :ghpull:`11611`: Fix css for parameter types +* :ghpull:`10001`: MAINT/BUG: Don't use 5-sided quadrilaterals in Axes3D.plot_surface +* :ghpull:`10234`: PowerNorm: do not clip negative values +* :ghpull:`11398`: Simplify retrieval of cache and config directories +* :ghpull:`10682`: ENH have ax.get_tightbbox have a bbox around all artists attached to axes. +* :ghpull:`11590`: Don't associate Wx timers with the parent frame. +* :ghpull:`10245`: Cache paths of fonts shipped with mpl relative to the mpl data path. +* :ghpull:`11381`: Deprecate text.latex.unicode. +* :ghpull:`11601`: FIX: subplots don't mutate kwargs passed by user. +* :ghpull:`11609`: Remove _macosx.NavigationToolbar. +* :ghpull:`11608`: Remove some conditional branches in examples for wx<4. +* :ghpull:`11604`: TST: Place animation files in a temp dir. +* :ghpull:`11605`: Suppress a spurious missing-glyph warning with ft2font. +* :ghpull:`11360`: Pytzectomy +* :ghpull:`10885`: Move GTK3 setupext checks to within the process. +* :ghpull:`11081`: Help tool for Wx backends +* :ghpull:`10851`: Wx Toolbar for ToolManager +* :ghpull:`11247`: Remove mplDeprecation +* :ghpull:`9795`: Backend switching +* :ghpull:`9426`: Don't mark a patch transform as set if the parent transform is not set. +* :ghpull:`9175`: Warn on freetype missing glyphs. +* :ghpull:`11412`: Make contour and contourf color assignments consistent. +* :ghpull:`11477`: Enable flake8 and re-enable it everywhere +* :ghpull:`11165`: Fix figure window icon +* :ghpull:`11584`: ENH: fix colorbar bad minor ticks +* :ghpull:`11438`: ENH: add get_gridspec convenience method to subplots +* :ghpull:`11451`: Cleanup Matplotlib API docs +* :ghpull:`11579`: DOC update some examples to use constrained_layout=True +* :ghpull:`11594`: Some more docstring cleanups. +* :ghpull:`11593`: Skip wx interactive tests on OSX. +* :ghpull:`11592`: Remove some extra spaces in docstrings/comments. +* :ghpull:`11585`: Some doc cleanup of Triangulation +* :ghpull:`10474`: Use TemporaryDirectory instead of mkdtemp in a few places. +* :ghpull:`11240`: Deprecate the examples.directory rcParam. +* :ghpull:`11370`: Sorting drawn artists by their zorder when blitting using FuncAnimation +* :ghpull:`11576`: Add parameter doc to save_diff_image +* :ghpull:`11573`: Inline setup_external_compile into setupext. +* :ghpull:`11571`: Cleanup stix_fonts_demo example. +* :ghpull:`11563`: Use explicit signature in pyplot.close() +* :ghpull:`9801`: ENH: Change default Autodatelocator *interval_multiples* +* :ghpull:`11570`: More simplifications to FreeType setup on Windows. +* :ghpull:`11401`: Some py3fications. +* :ghpull:`11566`: Cleanups. +* :ghpull:`11520`: Add private API retrieving the current event loop and backend GUI info. +* :ghpull:`11544`: Restore axes sharedness when unpickling. +* :ghpull:`11568`: Figure.text changes +* :ghpull:`11248`: Simplify FreeType Windows build. +* :ghpull:`11556`: Fix colorbar bad ticks +* :ghpull:`11494`: Fix CI install of wxpython. +* :ghpull:`11564`: triinterpolate cleanups. +* :ghpull:`11548`: Use numpydoc-style parameter lists for choices +* :ghpull:`9583`: Add edgecolors kwarg to contourf +* :ghpull:`10275`: Update contour.py and widget.py +* :ghpull:`11547`: Fix example links +* :ghpull:`11555`: Fix spelling in title +* :ghpull:`11404`: FIX: don't include text at -inf in bbox +* :ghpull:`11455`: Fixing the issue where right column and top row generate wrong stream… +* :ghpull:`11297`: Prefer warn_deprecated instead of warnings.warn. +* :ghpull:`11495`: Update the documentation guidelines +* :ghpull:`11545`: Doc: fix x(filled) marker image +* :ghpull:`11287`: Maintain artist addition order in Axes.mouseover_set. +* :ghpull:`11530`: FIX: Ensuring both x and y attrs of LocationEvent are int +* :ghpull:`10336`: Use Integral and Real in typechecks rather than explicit types. +* :ghpull:`10298`: Apply gtk3 background. +* :ghpull:`10297`: Fix gtk3agg alpha channel. +* :ghpull:`9094`: axisbelow should just set zorder. +* :ghpull:`11542`: Documentation polar grids +* :ghpull:`11459`: Doc changes in add_subplot and add_axes +* :ghpull:`10908`: Make draggable callbacks check that artist has not been removed. +* :ghpull:`11522`: Small cleanups. +* :ghpull:`11539`: DOC: talk about sticky edges in Axes.margins +* :ghpull:`11540`: adding axes to module list +* :ghpull:`11537`: Fix invalid value warning when autoscaling with no data limits +* :ghpull:`11512`: Skip 3D rotation example in sphinx gallery +* :ghpull:`11538`: Re-enable pep8 on examples folder +* :ghpull:`11136`: Move remaining examples from api/ +* :ghpull:`11519`: Raise ImportError on failure to import backends. +* :ghpull:`11529`: add documentation for quality in savefig +* :ghpull:`11528`: Replace an unnecessary zip() in mplot3d by numpy ops. +* :ghpull:`11492`: add __repr__ to GridSpecBase +* :ghpull:`11521`: Add missing ``.`` to rcParam +* :ghpull:`11491`: Fixed the source path on windows in rcparam_role +* :ghpull:`11514`: Remove embedding_in_tk_canvas, which demonstrated a private API. +* :ghpull:`11507`: Fix embedding_in_tk_canvas example. +* :ghpull:`11513`: Changed docstrings in Text +* :ghpull:`11503`: Remove various mentions of the now removed GTK(2) backend. +* :ghpull:`11493`: Update a test to a figure-equality test. +* :ghpull:`11501`: Treat empty $MPLBACKEND as an unset value. +* :ghpull:`11395`: Various fixes to deprecated and warn_deprecated. +* :ghpull:`11408`: Figure equality-based tests. +* :ghpull:`11461`: Fixed bug in rendering font property kwargs list +* :ghpull:`11397`: Replace ACCEPTS by standard numpydoc params table. +* :ghpull:`11483`: Use pip requirements files for travis build +* :ghpull:`11481`: remove more pylab references +* :ghpull:`10940`: Run flake8 instead of pep8 on Python 3.6 +* :ghpull:`11476`: Remove pylab references +* :ghpull:`11448`: Link rcParams role to docs +* :ghpull:`11424`: DOC: point align-ylabel demo to new align-label functions +* :ghpull:`11454`: add subplots to axes documentation +* :ghpull:`11470`: Hyperlink DOIs against preferred resolver +* :ghpull:`11421`: DOC: make signature background grey +* :ghpull:`11457`: Search $CPATH for include directories +* :ghpull:`11456`: DOC: fix minor typo in figaspect +* :ghpull:`11293`: Lim parameter naming +* :ghpull:`11447`: Do not use class attributes as defaults for instance attributes +* :ghpull:`11449`: Slightly improve doc sidebar layout +* :ghpull:`11224`: Add deprecation messages for unused kwargs in FancyArrowPatch +* :ghpull:`11437`: Doc markersupdate +* :ghpull:`11417`: FIX: better default spine path (for logit) +* :ghpull:`11406`: Backport PR #11403 on branch v2.2.2-doc +* :ghpull:`11427`: FIX: pathlib in nbagg +* :ghpull:`11428`: Doc: Remove huge note box from examples. +* :ghpull:`11392`: Deprecate the ``verts`` kwarg to ``scatter``. +* :ghpull:`8834`: WIP: Contour log extension +* :ghpull:`11402`: Remove unnecessary str calls. +* :ghpull:`11399`: Autogenerate credits.rst +* :ghpull:`11382`: plt.subplots and plt.figure docstring changes +* :ghpull:`11388`: DOC: Constrained layout tutorial improvements +* :ghpull:`11400`: Correct docstring for axvspan() +* :ghpull:`11396`: Remove some (minor) comments regarding Py2. +* :ghpull:`11210`: FIX: don't pad axes for ticks if they aren't visible or axis off +* :ghpull:`11362`: Fix tox configuration +* :ghpull:`11366`: Improve docstring of Axes.spy +* :ghpull:`11289`: io.open and codecs.open are redundant with open on Py3. +* :ghpull:`11213`: MNT: deprecate patches.YAArrow +* :ghpull:`11352`: Catch a couple of test warnings +* :ghpull:`11292`: Simplify cleanup decorator implementation. +* :ghpull:`11349`: Remove non-existent files from MANIFEST.IN +* :ghpull:`8774`: Git issue #7216 - Add a "ruler" tool to the plot UI +* :ghpull:`11348`: Make OSX's blit() have a consistent signature with other backends. +* :ghpull:`11345`: Revert "Deprecate text.latex.unicode." +* :ghpull:`11250`: [WIP] Add tutorial for LogScale +* :ghpull:`11223`: Add an arrow tutorial +* :ghpull:`10212`: Categorical refactor +* :ghpull:`11339`: Convert Ellipse docstring to numpydoc +* :ghpull:`11255`: Deprecate text.latex.unicode. +* :ghpull:`11338`: Fix typos +* :ghpull:`11332`: Let plt.rc = matplotlib.rc, instead of being a trivial wrapper. +* :ghpull:`11331`: multiprocessing.set_start_method() --> mp.set_start_method() +* :ghpull:`9948`: Add ``ealpha`` option to ``errorbar`` +* :ghpull:`11329`: Minor docstring update of thumbnail +* :ghpull:`9551`: Refactor backend loading +* :ghpull:`11328`: Undeprecate Polygon.xy from #11299 +* :ghpull:`11318`: Improve docstring of imread() and imsave() +* :ghpull:`11311`: Simplify image.thumbnail. +* :ghpull:`11225`: Add stacklevel=2 to some more warnings.warn() calls +* :ghpull:`11313`: Add changelog entry for removal of proprietary sphinx directives. +* :ghpull:`11323`: Fix infinite loop for connectionstyle + add some tests +* :ghpull:`11314`: API changes: use the heading format defined in README.txt +* :ghpull:`11320`: Py3fy multiprocess example. +* :ghpull:`6254`: adds two new cyclic color schemes +* :ghpull:`11268`: DOC: Sanitize some internal documentation links +* :ghpull:`11300`: Start replacing ACCEPTS table by parsing numpydoc. +* :ghpull:`11298`: Automagically set the stacklevel on warnings. +* :ghpull:`11277`: Avoid using MacRoman encoding. +* :ghpull:`11295`: Use sphinx builtin only directive instead of custom one. +* :ghpull:`11305`: Reuse the noninteractivity warning from Figure.show in _Backend.show. +* :ghpull:`11307`: Avoid recursion for subclasses of str that are also "PathLike" in to_filehandle() +* :ghpull:`11304`: Re-remove six from INSTALL.rst. +* :ghpull:`11299`: Fix a bunch of doc/comment typos in patches.py. +* :ghpull:`11301`: Undefined name: cbook --> matplotlib.cbook +* :ghpull:`11254`: Update INSTALL.rst. +* :ghpull:`11267`: FIX: allow nan values in data for plt.hist +* :ghpull:`11271`: Better argspecs for Axes.stem +* :ghpull:`11272`: Remove commented-out code, unused imports +* :ghpull:`11280`: Trivial cleanups +* :ghpull:`10514`: Cleanup/update cairo + gtk compatibility matrix. +* :ghpull:`11282`: Reduce the use of C++ exceptions +* :ghpull:`11263`: Fail gracefully if can't decode font names +* :ghpull:`11278`: Remove conditional path for sphinx <1.3 in plot_directive. +* :ghpull:`11273`: Include template matplotlibrc in package_data. +* :ghpull:`11265`: Minor cleanups. +* :ghpull:`11249`: Simplify FreeType build. +* :ghpull:`11158`: Remove dependency on six - we're Py3 only now! +* :ghpull:`10050`: Update Legend draggable API +* :ghpull:`11206`: More cleanups +* :ghpull:`11001`: DOC: improve legend bbox_to_anchor description +* :ghpull:`11258`: Removed comment in AGG backend that is no longer applicable +* :ghpull:`11062`: FIX: call constrained_layout twice +* :ghpull:`11251`: Re-run boilerplate.py. +* :ghpull:`11228`: Don't bother checking luatex's version. +* :ghpull:`11207`: Update venv gui docs wrt availability of PySide2. +* :ghpull:`11236`: Minor cleanups to setupext. +* :ghpull:`11239`: Reword the timeout error message in cbook._lock_path. +* :ghpull:`11204`: Test that boilerplate.py is correctly run. +* :ghpull:`11172`: ENH add rcparam to legend_title +* :ghpull:`11229`: Simplify lookup of animation external commands. +* :ghpull:`9086`: Add SVG animation. +* :ghpull:`11212`: Fix CirclePolygon __str__ + adding tests +* :ghpull:`6737`: Ternary +* :ghpull:`11216`: Yet another set of simplifications. +* :ghpull:`11056`: Simplify travis setup a bit. +* :ghpull:`11211`: Revert explicit linestyle kwarg on step() +* :ghpull:`11205`: Minor cleanups to pyplot. +* :ghpull:`11174`: Replace numeric loc by position string +* :ghpull:`11208`: Don't crash qt figure options on unknown marker styles. +* :ghpull:`11195`: Some unrelated cleanups. +* :ghpull:`11192`: Don't use deprecated get_texcommand in backend_pgf. +* :ghpull:`11197`: Simplify demo_ribbon_box.py. +* :ghpull:`11137`: Convert ``**kwargs`` to named arguments for a clearer API +* :ghpull:`10982`: Improve docstring of Axes.imshow +* :ghpull:`11182`: Use GLib.MainLoop() instead of deprecated GObject.MainLoop() +* :ghpull:`11185`: Fix undefined name error in backend_pgf. +* :ghpull:`10321`: Ability to scale axis by a fixed factor +* :ghpull:`8787`: Faster path drawing for the cairo backend (cairocffi only) +* :ghpull:`4559`: tight_layout: Use a different default gridspec +* :ghpull:`11179`: Convert internal tk focus helper to a context manager +* :ghpull:`11176`: Allow creating empty closed paths +* :ghpull:`10339`: Pass explicit font paths to fontspec in backend_pgf. +* :ghpull:`9832`: Minor cleanup to Text class. +* :ghpull:`11141`: Remove mpl_examples symlink. +* :ghpull:`10715`: ENH: add title_fontsize to legend +* :ghpull:`11166`: Set stacklevel to 2 for backend_wx +* :ghpull:`10934`: Autogenerate (via boilerplate) more of pyplot. +* :ghpull:`9298`: Cleanup blocking_input. +* :ghpull:`6329`: Set _text to '' if Text.set_text argument is None +* :ghpull:`11157`: Fix contour return link +* :ghpull:`11146`: Explicit args and refactor Axes.margins +* :ghpull:`11145`: Use kwonlyargs instead of popping from kwargs +* :ghpull:`11119`: PGF: Get unitless positions from Text elements (fix #11116) +* :ghpull:`9078`: New anchored direction arrows +* :ghpull:`11144`: Remove toplevel unit/ directory. +* :ghpull:`11148`: remove use of subprocess compatibility shim +* :ghpull:`11143`: Use debug level for debugging messages +* :ghpull:`11142`: Finish removing future imports. +* :ghpull:`11130`: Don't include the postscript title if it is not latin-1 encodable. +* :ghpull:`11093`: DOC: Fixup to AnchoredArtist examples in the gallery +* :ghpull:`11132`: pillow-dependency update +* :ghpull:`10446`: implementation of the copy canvas tool +* :ghpull:`9131`: FIX: prevent the canvas from jump sizes due to DPI changes +* :ghpull:`9454`: Batch ghostscript converter. +* :ghpull:`10545`: Change manual kwargs popping to kwonly arguments. +* :ghpull:`10950`: Actually ignore invalid log-axis limit setting +* :ghpull:`11096`: Remove support for bar(left=...) (as opposed to bar(x=...)). +* :ghpull:`11106`: py3fy art3d. +* :ghpull:`11085`: Use GtkShortcutsWindow for Help tool. +* :ghpull:`11099`: Deprecate certain marker styles that have simpler synonyms. +* :ghpull:`11100`: Some more deprecations of old, old stuff. +* :ghpull:`11098`: Make Marker.get_snap_threshold() always return a scalar. +* :ghpull:`11097`: Schedule a removal date for passing normed (instead of density) to hist. +* :ghpull:`9706`: Masking invalid x and/or weights in hist +* :ghpull:`11080`: Py3fy backend_qt5 + other cleanups to the backend. +* :ghpull:`10967`: updated the pyplot fill_between example to elucidate the premise;maki… +* :ghpull:`11075`: Drop alpha channel when saving comparison failure diff image. +* :ghpull:`9022`: Help tool +* :ghpull:`11045`: Help tool. +* :ghpull:`11076`: Don't create texput.{aux,log} in rootdir everytime tests are run. +* :ghpull:`11073`: py3fication of some tests. +* :ghpull:`11074`: bytes % args is back since py3.5 +* :ghpull:`11066`: Use chained comparisons where reasonable. +* :ghpull:`11061`: Changed tight_layout doc strings +* :ghpull:`11064`: Minor docstring format cleanup +* :ghpull:`11055`: Remove setup_tests_only.py. +* :ghpull:`11057`: Update Ellipse position with ellipse.center +* :ghpull:`10435`: Pathlibify font_manager (only internally, doesn't change the API). +* :ghpull:`10442`: Make the filternorm prop of Images a boolean rather than a {0,1} scalar. +* :ghpull:`9855`: ENH: make ax.get_position apply aspect +* :ghpull:`9987`: MNT: hist2d now uses pcolormesh instead of pcolorfast +* :ghpull:`11014`: Merge v2.2.x into master +* :ghpull:`11000`: FIX: improve Text repr to not error if non-float x and y. +* :ghpull:`10910`: FIX: return proper legend window extent +* :ghpull:`10915`: FIX: tight_layout having negative width axes +* :ghpull:`10408`: Factor out common code in _process_unit_info +* :ghpull:`10960`: Added share_tickers parameter to axes._AxesBase.twinx/y +* :ghpull:`10971`: Skip pillow animation test if pillow not importable +* :ghpull:`10970`: Simplify/fix some manual manipulation of len(args). +* :ghpull:`10958`: Simplify the grouper implementation. +* :ghpull:`10508`: Deprecate FigureCanvasQT.keyAutoRepeat. +* :ghpull:`10607`: Move notify_axes_change to FigureManagerBase class. +* :ghpull:`10215`: Test timers and (a bit) key_press_event for interactive backends. +* :ghpull:`10955`: Py3fy cbook, compare_backend_driver_results +* :ghpull:`10680`: Rewrite the tk C blitting code +* :ghpull:`9498`: Move title up if x-axis is on the top of the figure +* :ghpull:`10942`: Make active param in CheckBottons optional, default false +* :ghpull:`10943`: Allow pie textprops to take alignment and rotation arguments +* :ghpull:`10780`: Fix scaling of RadioButtons +* :ghpull:`10938`: Fix two undefined names +* :ghpull:`10685`: fix plt.show doesn't warn if a non-GUI backend +* :ghpull:`10689`: Declare global variables that are created elsewhere +* :ghpull:`10845`: WIP: first draft at replacing linkcheker +* :ghpull:`10898`: Replace "matplotlibrc" by "rcParams" in the docs where applicable. +* :ghpull:`10926`: Some more removals of deprecated APIs. +* :ghpull:`9173`: dynamically generate pyplot functions +* :ghpull:`10918`: Use function signatures in boilerplate.py. +* :ghpull:`10914`: Changed pie charts default shape to circle and added tests +* :ghpull:`10864`: ENH: Stop mangling default figure file name if file exists +* :ghpull:`10562`: Remove deprecated code in image.py +* :ghpull:`10798`: FIX: axes limits reverting to automatic when sharing +* :ghpull:`10485`: Remove the 'hold' kwarg from codebase +* :ghpull:`10571`: Use np.full{,_like} where appropriate. [requires numpy>=1.12] +* :ghpull:`10913`: Rely a bit more on rc_context. +* :ghpull:`10299`: Invalidate texmanager cache when any text.latex.* rc changes. +* :ghpull:`10906`: Deprecate ImageComparisonTest. +* :ghpull:`10904`: Improve docstring of clabel() +* :ghpull:`10912`: remove unused matplotlib.testing import +* :ghpull:`10876`: [wip] Replace _remove_method by _on_remove list of callbacks +* :ghpull:`10692`: Update afm docs and internal data structures +* :ghpull:`10896`: Update INSTALL.rst. +* :ghpull:`10905`: Inline knownfailureif. +* :ghpull:`10907`: No need to mark (unicode) strings as u"foo" anymore. +* :ghpull:`10903`: Py3fy testing machinery. +* :ghpull:`10901`: Remove Py2/3 portable code guide. +* :ghpull:`10900`: Remove some APIs deprecated in mpl2.1. +* :ghpull:`10902`: Kill some Py2 docs. +* :ghpull:`10887`: Added feature (Make pie charts circular by default #10789) +* :ghpull:`10884`: Style fixes to setupext.py. +* :ghpull:`10879`: Deprecate two-args for cycler() and set_prop_cycle() +* :ghpull:`10865`: DOC: use OO-ish interface in image, contour, field examples +* :ghpull:`8479`: FIX markerfacecolor / mfc not in rcparams +* :ghpull:`10314`: setattr context manager. +* :ghpull:`10013`: Allow rasterization for 3D plots +* :ghpull:`10158`: Allow mplot3d rasterization; adjacent cleanups. +* :ghpull:`10871`: Rely on rglob support rather than os.walk. +* :ghpull:`10878`: Change hardcoded brackets for Toolbar message +* :ghpull:`10708`: Py3fy webagg/nbagg. +* :ghpull:`10862`: py3ify table.py and correct some docstrings +* :ghpull:`10810`: Fix for plt.plot() does not support structured arrays as data= kwarg +* :ghpull:`10861`: More python3 cleanup +* :ghpull:`9903`: ENH: adjustable colorbar ticks +* :ghpull:`10831`: Minor docstring updates on binning related plot functions +* :ghpull:`9571`: Remove LaTeX checking in setup.py. +* :ghpull:`10097`: Reset extents in RectangleSelector when not interactive on press. +* :ghpull:`10686`: fix BboxConnectorPatch does not show facecolor +* :ghpull:`10801`: Fix undefined name. Add animation tests. +* :ghpull:`10857`: FIX: ioerror font cache, second try +* :ghpull:`10796`: Added descriptions for line bars and markers examples +* :ghpull:`10846`: Unsixification +* :ghpull:`10852`: Update docs re: pygobject in venv. +* :ghpull:`10847`: Py3fy axis.py. +* :ghpull:`10834`: Minor docstring updates on spectral plot functions +* :ghpull:`10778`: wx_compat is no more. +* :ghpull:`10609`: More wx cleanup. +* :ghpull:`10826`: Py3fy dates.py. +* :ghpull:`10837`: Correctly display error when running setup.py test. +* :ghpull:`10838`: Don't use private attribute in tk example. Fix Toolbar class rename. +* :ghpull:`10835`: DOC: Make colorbar tutorial examples look like colorbars. +* :ghpull:`10823`: Add some basic smoketesting for webagg (and wx). +* :ghpull:`10828`: Add print_rgba to backend_cairo. +* :ghpull:`10830`: Make function signatures more explicit +* :ghpull:`10829`: Use long color names for default rcParams +* :ghpull:`9776`: WIP: Lockout new converters Part 2 +* :ghpull:`10799`: DOC: make legend docstring interpolated +* :ghpull:`10818`: Deprecate vestigial Annotation.arrow. +* :ghpull:`10817`: Add test to imread from url. +* :ghpull:`10696`: Simplify venv docs. +* :ghpull:`10724`: Py3fication of unicode. +* :ghpull:`10815`: API: shift deprecation of TempCache class to 3.0 +* :ghpull:`10725`: FIX/TST constrained_layout remove test8 duplication +* :ghpull:`10705`: FIX: enable extend kwargs with log scale colorbar +* :ghpull:`10400`: numpydoc-ify art3d docstrings +* :ghpull:`10723`: repr style fixes. +* :ghpull:`10592`: Rely on generalized * and ** unpackings where possible. +* :ghpull:`9475`: Declare property aliases in a single place +* :ghpull:`10793`: A hodgepodge of Py3 & style fixes. +* :ghpull:`10794`: fixed comment typo +* :ghpull:`10768`: Fix crash when imshow encounters longdouble data +* :ghpull:`10774`: Remove dead wx testing code. +* :ghpull:`10756`: Fixes png showing inconsistent inset_axes position +* :ghpull:`10773`: Consider alpha channel from RGBA color of text for SVG backend text opacity rendering +* :ghpull:`10772`: API: check locator and formatter args when passed +* :ghpull:`10713`: Implemented support for 'markevery' in prop_cycle +* :ghpull:`10751`: make centre_baseline legal for Text.set_verticalalignment +* :ghpull:`10771`: FIX/TST OS X builds +* :ghpull:`10742`: FIX: reorder linewidth setting before linestyle +* :ghpull:`10714`: sys.platform is normalized to "linux" on Py3. +* :ghpull:`10542`: Minor cleanup: PEP8, PEP257 +* :ghpull:`10636`: Remove some wx version checks. +* :ghpull:`9731`: Make legend title fontsize obey fontsize kwarg by default +* :ghpull:`10697`: Remove special-casing of _remove_method when pickling. +* :ghpull:`10701`: Autoadd removal version to deprecation message. +* :ghpull:`10699`: Remove incorrect warning in gca(). +* :ghpull:`10674`: Fix getting polar axes in plt.polar() +* :ghpull:`10564`: Nested classes and instancemethods are directly picklable on Py3.5+. +* :ghpull:`10107`: Fix stay_span to reset onclick in SpanSelector. +* :ghpull:`10693`: Make markerfacecolor work for 3d scatterplots +* :ghpull:`10596`: Switch to per-file locking. +* :ghpull:`10532`: Py3fy backend_pgf. +* :ghpull:`10618`: Fixes #10501. python3 support and pep8 in jpl_units +* :ghpull:`10652`: Some py3fication for matplotlib/__init__, setupext. +* :ghpull:`10522`: Py3fy font_manager. +* :ghpull:`10666`: More figure-related doc updates +* :ghpull:`10507`: Remove Python 2 code from C extensions +* :ghpull:`10679`: Small fixes to gtk3 examples. +* :ghpull:`10426`: Delete deprecated backends +* :ghpull:`10488`: Bug Fix - Polar plot rectangle patch not transformed correctly (#8521) +* :ghpull:`9814`: figure_enter_event uses now LocationEvent instead of Event. Fix issue #9812. +* :ghpull:`9918`: Remove old nose testing code +* :ghpull:`10672`: Deprecation fixes. +* :ghpull:`10608`: Remove most APIs deprecated in 2.1. +* :ghpull:`10653`: Mock is in stdlib in Py3. +* :ghpull:`10603`: Remove workarounds for numpy<1.10. +* :ghpull:`10660`: Work towards removing reuse-of-axes-on-collision. +* :ghpull:`10661`: Homebrew python is now python 3 +* :ghpull:`10656`: Minor fixes to event handling docs. +* :ghpull:`10635`: Simplify setupext by using globs. +* :ghpull:`10632`: Support markers from Paths that consist of one line segment +* :ghpull:`10558`: Remove if six.PY2 code paths from boilerplate.py +* :ghpull:`10640`: Fix extra and missing spaces in constrainedlayout warning. +* :ghpull:`10624`: Some trivial py3fications. +* :ghpull:`10548`: Implement PdfPages for backend pgf +* :ghpull:`10614`: Use np.stack instead of list(zip()) in colorbar.py. +* :ghpull:`10621`: Cleanup and py3fy backend_gtk3. +* :ghpull:`10615`: More style fixes. +* :ghpull:`10604`: Minor style fixes. +* :ghpull:`10565`: Strip python 2 code from subprocess.py +* :ghpull:`10605`: Bump a tolerance in test_axisartist_floating_axes. +* :ghpull:`7853`: Use exact types for Py_BuildValue. +* :ghpull:`10591`: Switch to @-matrix multiplication. +* :ghpull:`10570`: Fix check_shared in test_subplots. +* :ghpull:`10569`: Various style fixes. +* :ghpull:`10593`: Use 'yield from' where appropriate. +* :ghpull:`10577`: Minor simplification to Figure.__getstate__ logic. +* :ghpull:`10549`: Source typos +* :ghpull:`10525`: Convert six.moves.xrange() to range() for Python 3 +* :ghpull:`10541`: More argumentless (py3) super() +* :ghpull:`10539`: TST: Replace assert_equal with plain asserts. +* :ghpull:`10534`: Modernize cbook.get_realpath_and_stat. +* :ghpull:`10524`: Remove unused private _StringFuncParser. +* :ghpull:`10470`: Remove Python 2 code from setup +* :ghpull:`10528`: py3fy examples +* :ghpull:`10520`: Py3fy mathtext.py. +* :ghpull:`10527`: Switch to argumentless (py3) super(). +* :ghpull:`10523`: The current master branch is now python 3 only. +* :ghpull:`10515`: Use feature detection instead of version detection +* :ghpull:`10432`: Use some new Python3 types +* :ghpull:`10475`: Use HTTP Secure for matplotlib.org +* :ghpull:`10383`: Fix some C++ warnings +* :ghpull:`10498`: Tell the lgtm checker that the project is Python 3 only +* :ghpull:`10505`: Remove backport of which() +* :ghpull:`10483`: Remove backports.functools_lru_cache +* :ghpull:`10492`: Avoid UnboundLocalError in drag_pan. +* :ghpull:`10491`: Simplify Mac builds on Travis +* :ghpull:`10481`: Remove python 2 compatibility code from dviread +* :ghpull:`10447`: Remove Python 2 compatibility code from backend_pdf.py +* :ghpull:`10468`: Replace is_numlike by isinstance(..., numbers.Number). +* :ghpull:`10439`: mkdir is in the stdlib in Py3. +* :ghpull:`10392`: FIX: make set_text(None) keep string empty instead of "None" +* :ghpull:`10425`: API: only support python 3.5+ +* :ghpull:`10316`: TST FIX pyqt5 5.9 +* :ghpull:`4625`: hist2d() is now using pcolormesh instead of pcolorfast + +Issues (123): + +* :ghissue:`12133`: Streamplot does not work for 29x29 grid +* :ghissue:`4429`: Error calculating scaling for radiobutton widget. +* :ghissue:`3293`: markerfacecolor / mfc not in rcparams +* :ghissue:`8109`: Cannot set the markeredgecolor by default +* :ghissue:`7942`: Extend keyword doesn't work with log scale. +* :ghissue:`5571`: Finish reorganizing examples +* :ghissue:`8307`: Colorbar with imshow(logNorm) shows unexpected minor ticks +* :ghissue:`6992`: plt.hist fails when data contains nan values +* :ghissue:`6483`: Range determination for data with NaNs +* :ghissue:`8059`: BboxConnectorPatch does not show facecolor +* :ghissue:`12134`: tight_layout flips images when making plots without displaying them +* :ghissue:`6739`: Make matplotlib fail more gracefully in headless environments +* :ghissue:`3679`: Runtime detection for default backend +* :ghissue:`11966`: CartoPy code gives attribute error +* :ghissue:`11844`: Backend related issues with matplotlib 3.0.0rc1 +* :ghissue:`12095`: colorbar minorticks (possibly release critical for 3.0) +* :ghissue:`12108`: Broken doc build with sphinx 1.8 +* :ghissue:`7366`: handle repaint requests better it qtAgg +* :ghissue:`11985`: Single shot timer not working correctly with MacOSX backend +* :ghissue:`10948`: OSX backend raises deprecation warning for enter_notify_event +* :ghissue:`11970`: Legend.get_window_extent now requires a renderer +* :ghissue:`8293`: investigate whether using a single instance of ghostscript for ps->png conversion can speed up the Windows build +* :ghissue:`7707`: Replace pep8 by pycodestyle for style checking +* :ghissue:`9135`: rcdefaults, rc_file_defaults, rc_file should not update backend if it has already been selected +* :ghissue:`12015`: AttributeError with GTK3Agg backend +* :ghissue:`11913`: plt.contour levels parameter don't work as intended if receive a single int +* :ghissue:`11846`: macosx backend won't load +* :ghissue:`11792`: Newer versions of ImageMagickWriter not found on windows +* :ghissue:`11858`: Adding "pie of pie" and "bar of pie" functionality +* :ghissue:`11852`: get_backend() backward compatibility +* :ghissue:`11629`: Importing qt_compat when no Qt binding is installed fails with NameError instead of ImportError +* :ghissue:`11842`: Failed nose import in test_annotation_update +* :ghissue:`11252`: Some API removals not documented +* :ghissue:`9404`: Drop support for python 2 +* :ghissue:`2625`: Markers in XKCD style +* :ghissue:`11749`: metadata kwarg to savefig is not documented +* :ghissue:`11702`: Setting alpha on legend handle changes patch color +* :ghissue:`8798`: gtk3cairo draw_image does not respect origin and mishandles alpha +* :ghissue:`11737`: Bug in tight_layout +* :ghissue:`11373`: Passing an incorrectly sized colour list to scatter should raise a relevant error +* :ghissue:`11756`: pgf backend doesn't set color of text when the color is black +* :ghissue:`11766`: test_axes.py::test_csd_freqs failing with numpy 1.15.0 on macOS +* :ghissue:`11750`: previous whats new is overindented on "what's new in mpl3.0 page" +* :ghissue:`11728`: Qt5 Segfaults on window resize +* :ghissue:`11709`: Repaint region is wrong on Retina display with Qt5 +* :ghissue:`11578`: wx segfaulting on OSX travis tests +* :ghissue:`11628`: edgecolor argument not working in matplotlib.pyplot.bar +* :ghissue:`11625`: plt.tight_layout() does not work with plt.subplot2grid +* :ghissue:`4993`: Version ~/.cache/matplotlib +* :ghissue:`7842`: If hexbin has logarithmic bins, use log formatter for colorbar +* :ghissue:`11607`: AttributeError: 'QEvent' object has no attribute 'pos' +* :ghissue:`11486`: Colorbar does not render with PowerNorm and min extend when using imshow +* :ghissue:`11582`: wx segfault +* :ghissue:`11515`: using 'sharex' once in 'subplots' function can affect subsequent calles to 'subplots' +* :ghissue:`10269`: input() blocks any rendering and event handling +* :ghissue:`10345`: Python 3.4 with Matplotlib 1.5 vs Python 3.6 with Matplotlib 2.1 +* :ghissue:`10443`: Drop use of pytz dependency in next major release +* :ghissue:`10572`: contour and contourf treat levels differently +* :ghissue:`11123`: Crash when interactively adding a number of subplots +* :ghissue:`11550`: Undefined names: 'obj_type' and 'cbook' +* :ghissue:`11138`: Only the first figure window has mpl icon, all other figures have default tk icon. +* :ghissue:`11510`: extra minor-ticks on the colorbar when used with the extend option +* :ghissue:`11369`: zorder of Artists not being respected when blitting with FuncAnimation +* :ghissue:`11452`: Streamplot ignores rightmost column and topmost row of velocity data +* :ghissue:`11284`: imshow of multiple images produces old pixel values printed in status bar +* :ghissue:`11496`: MouseEvent.x and .y have different types +* :ghissue:`11534`: Cross-reference margins and sticky edges +* :ghissue:`8556`: Add images of markers to the list of markers +* :ghissue:`11386`: Logit scale doesn't position x/ylabel correctly first draw +* :ghissue:`11384`: Undefined name 'Path' in backend_nbagg.py +* :ghissue:`11426`: nbagg broken on master. 'Path' is not defined... +* :ghissue:`11390`: Internal use of deprecated code +* :ghissue:`11203`: tight_layout reserves tick space even if disabled +* :ghissue:`11361`: Tox.ini does not work out of the box +* :ghissue:`11253`: Problem while changing current figure size in Jupyter notebook +* :ghissue:`11219`: Write an arrow tutorial +* :ghissue:`11322`: Really deprecate Patches.xy? +* :ghissue:`11294`: ConnectionStyle Angle3 hangs with specific parameters +* :ghissue:`9518`: Some ConnectionStyle not working +* :ghissue:`11306`: savefig and path.py +* :ghissue:`11077`: Font "DejaVu Sans" can only be used through fallback +* :ghissue:`10717`: Failure to find matplotlibrc when testing installed distribution +* :ghissue:`9912`: Cleaning up variable argument signatures +* :ghissue:`3701`: unit tests should compare pyplot.py with output from boilerplate.py +* :ghissue:`11183`: Undefined name 'system_fonts' in backend_pgf.py +* :ghissue:`11101`: Crash on empty patches +* :ghissue:`11124`: [Bug] savefig cannot save file with a Unicode name +* :ghissue:`7733`: Trying to set_ylim(bottom=0) on a log scaled axis changes plot +* :ghissue:`10319`: TST: pyqt 5.10 breaks pyqt5 interactive tests +* :ghissue:`10676`: Add source code to documentation +* :ghissue:`9207`: axes has no method to return new position after box is adjusted due to aspect ratio... +* :ghissue:`4615`: hist2d with log xy axis +* :ghissue:`10996`: Plotting text with datetime axis causes warning +* :ghissue:`7582`: Report date and time of cursor position on a plot_date plot +* :ghissue:`10114`: Remove mlab from examples +* :ghissue:`10342`: imshow longdouble not truly supported +* :ghissue:`8062`: tight_layout + lots of subplots + long ylabels inverts yaxis +* :ghissue:`4413`: Long axis title alters xaxis length and direction with ``plt.tight_layout()`` +* :ghissue:`1415`: Plot title should be shifted up when xticks are set to the top of the plot +* :ghissue:`10789`: Make pie charts circular by default +* :ghissue:`10941`: Cannot set text alignment in pie chart +* :ghissue:`7908`: plt.show doesn't warn if a non-GUI backend is being used +* :ghissue:`10502`: 'FigureManager' is an undefined name in backend_wx.py +* :ghissue:`10062`: axes limits revert to automatic on sharing axes? +* :ghissue:`9246`: ENH: make default colorbar ticks adjust as nicely as axes ticks +* :ghissue:`8818`: plt.plot() does not support structured arrays as data= kwarg +* :ghissue:`10533`: Recognize pandas Timestamp objects for DateConverter? +* :ghissue:`8358`: Minor ticks on log-scale colorbar are not cleared +* :ghissue:`10075`: RectangleSelector does not work if start and end points are identical +* :ghissue:`8576`: support 'markevery' in prop_cycle +* :ghissue:`8874`: Crash in python setup.py test +* :ghissue:`3871`: replace use of _tkcanvas with get_tk_widget() +* :ghissue:`10550`: Use long color names for rc defaultParams +* :ghissue:`10722`: Duplicated test name in test_constrainedlayout +* :ghissue:`10419`: svg backend does not respect alpha channel of text *when passed as rgba* +* :ghissue:`10769`: DOC: set_major_locator could check that its getting a Locator (was EngFormatter broken?) +* :ghissue:`10719`: Need better type error checking for linewidth in ax.grid +* :ghissue:`7776`: tex cache lockfile retries should be configurable +* :ghissue:`10556`: Special conversions of xrange() +* :ghissue:`10501`: cmp() is an undefined name in Python 3 +* :ghissue:`9812`: figure_enter_event generates base Event and not LocationEvent +* :ghissue:`10602`: Random image failures with test_curvelinear4 +* :ghissue:`7795`: Incorrect uses of is_numlike diff --git a/doc/users/prev_whats_new/github_stats_3.0.1.rst b/doc/users/prev_whats_new/github_stats_3.0.1.rst new file mode 100644 index 000000000000..95e899d1a9de --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.0.1.rst @@ -0,0 +1,203 @@ +.. _github-stats-3-0-1: + +GitHub statistics for 3.0.1 (Oct 25, 2018) +========================================== + +GitHub statistics for 2018/09/18 (tag: v3.0.0) - 2018/10/25 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 31 issues and merged 127 pull requests. +The full list can be seen `on GitHub `__ + +The following 23 authors contributed 227 commits. + +* Abhinuv Nitin Pitale +* Antony Lee +* Anubhav Shrimal +* Ben Root +* Colin +* Daniele Nicolodi +* David Haberthür +* David Stansby +* Elan Ernest +* Elliott Sales de Andrade +* Eric Firing +* ImportanceOfBeingErnest +* Jody Klymak +* Kai Muehlbauer +* Kevin Rose +* Marcel Martin +* MeeseeksMachine +* Nelle Varoquaux +* Nikita Kniazev +* Ryan May +* teresy +* Thomas A Caswell +* Tim Hoffmann + +GitHub issues and pull requests: + +Pull Requests (127): + +* :ghpull:`12595`: Backport PR #12569 on branch v3.0.x (Don't confuse uintptr_t and Py_ssize_t.) +* :ghpull:`12623`: Backport PR #12285 on branch v3.0.x (FIX: Don't apply tight_layout if axes collapse) +* :ghpull:`12285`: FIX: Don't apply tight_layout if axes collapse +* :ghpull:`12622`: FIX: flake8errors 3.0.x mergeup +* :ghpull:`12619`: Backport PR #12548 on branch v3.0.x (undef _XOPEN_SOURCE breaks the build in AIX) +* :ghpull:`12621`: Backport PR #12607 on branch v3.0.x (STY: fix whitespace and escaping) +* :ghpull:`12616`: Backport PR #12615 on branch v3.0.x (Fix travis OSX build) +* :ghpull:`12594`: Backport PR #12572 on branch v3.0.x (Fix singleton hist labels) +* :ghpull:`12615`: Fix travis OSX build +* :ghpull:`12607`: STY: fix whitespace and escaping +* :ghpull:`12605`: Backport PR #12603 on branch v3.0.x (FIX: don't import macosx to check if eventloop running) +* :ghpull:`12604`: FIX: over-ride 'copy' on RcParams +* :ghpull:`12603`: FIX: don't import macosx to check if eventloop running +* :ghpull:`12602`: Backport PR #12599 on branch v3.0.x (Fix formatting of docstring) +* :ghpull:`12599`: Fix formatting of docstring +* :ghpull:`12593`: Backport PR #12581 on branch v3.0.x (Fix hist() error message) +* :ghpull:`12569`: Don't confuse uintptr_t and Py_ssize_t. +* :ghpull:`12572`: Fix singleton hist labels +* :ghpull:`12581`: Fix hist() error message +* :ghpull:`12575`: Backport PR #12573 on branch v3.0.x (BUG: mplot3d: Don't crash if azim or elev are non-integral) +* :ghpull:`12558`: Backport PR #12555 on branch v3.0.x (Clarify horizontalalignment and verticalalignment in suptitle) +* :ghpull:`12544`: Backport PR #12159 on branch v3.0.x (FIX: colorbar re-check norm before draw for autolabels) +* :ghpull:`12159`: FIX: colorbar re-check norm before draw for autolabels +* :ghpull:`12540`: Backport PR #12501 on branch v3.0.x (Rectified plot error) +* :ghpull:`12531`: Backport PR #12431 on branch v3.0.x (FIX: allow single-string color for scatter) +* :ghpull:`12431`: FIX: allow single-string color for scatter +* :ghpull:`12529`: Backport PR #12216 on branch v3.0.x (Doc: Fix search for sphinx >=1.8) +* :ghpull:`12527`: Backport PR #12461 on branch v3.0.x (FIX: make add_lines work with new colorbar) +* :ghpull:`12461`: FIX: make add_lines work with new colorbar +* :ghpull:`12522`: Backport PR #12241 on branch v3.0.x (FIX: make unused spines invisible) +* :ghpull:`12241`: FIX: make unused spines invisible +* :ghpull:`12519`: Backport PR #12504 on branch v3.0.x (DOC: clarify min supported version wording) +* :ghpull:`12517`: Backport PR #12507 on branch v3.0.x (FIX: make minor ticks formatted with science formatter as well) +* :ghpull:`12507`: FIX: make minor ticks formatted with science formatter as well +* :ghpull:`12512`: Backport PR #12363 on branch v3.0.x +* :ghpull:`12511`: Backport PR #12366 on branch v2.2.x (TST: Update test images for new Ghostscript.) +* :ghpull:`12509`: Backport PR #12478 on branch v3.0.x (MAINT: numpy deprecates asscalar in 1.16) +* :ghpull:`12363`: FIX: errors in get_position changes +* :ghpull:`12497`: Backport PR #12495 on branch v3.0.x (Fix duplicate condition in pathpatch3d example) +* :ghpull:`12490`: Backport PR #12489 on branch v3.0.x (Fix typo in documentation of ylim) +* :ghpull:`12485`: Fix font_manager.OSXInstalledFonts() +* :ghpull:`12484`: Backport PR #12448 on branch v3.0.x (Don't error if some font directories are not readable.) +* :ghpull:`12421`: Backport PR #12360 on branch v3.0.x (Replace axes_grid by axes_grid1 in test) +* :ghpull:`12448`: Don't error if some font directories are not readable. +* :ghpull:`12471`: Backport PR #12468 on branch v3.0.x (Fix ``set_ylim`` unit handling) +* :ghpull:`12475`: Backport PR #12469 on branch v3.0.x (Clarify documentation of offsetbox.AnchoredText's prop kw argument) +* :ghpull:`12468`: Fix ``set_ylim`` unit handling +* :ghpull:`12464`: Backport PR #12457 on branch v3.0.x (Fix tutorial typos.) +* :ghpull:`12432`: Backport PR #12277: FIX: datetime64 now recognized if in a list +* :ghpull:`12277`: FIX: datetime64 now recognized if in a list +* :ghpull:`12426`: Backport PR #12293 on branch v3.0.x (Make pyplot more tolerant wrt. 3rd-party subclasses.) +* :ghpull:`12293`: Make pyplot more tolerant wrt. 3rd-party subclasses. +* :ghpull:`12360`: Replace axes_grid by axes_grid1 in test +* :ghpull:`12412`: Backport PR #12394 on branch v3.0.x (DOC: fix CL tutorial to give same output from saved file and example) +* :ghpull:`12410`: Backport PR #12408 on branch v3.0.x (Don't crash on invalid registry font entries on Windows.) +* :ghpull:`12411`: Backport PR #12366 on branch v3.0.0-doc (TST: Update test images for new Ghostscript.) +* :ghpull:`12408`: Don't crash on invalid registry font entries on Windows. +* :ghpull:`12403`: Backport PR #12149 on branch v3.0.x (Mathtext tutorial fixes) +* :ghpull:`12400`: Backport PR #12257 on branch v3.0.x (Document standard backends in matplotlib.use()) +* :ghpull:`12257`: Document standard backends in matplotlib.use() +* :ghpull:`12399`: Backport PR #12383 on branch v3.0.x (Revert change of parameter name in annotate()) +* :ghpull:`12383`: Revert change of parameter name in annotate() +* :ghpull:`12390`: Backport PR #12385 on branch v3.0.x (CI: Added Appveyor Python 3.7 build) +* :ghpull:`12385`: CI: Added Appveyor Python 3.7 build +* :ghpull:`12381`: Backport PR #12353 on branch v3.0.x (Doc: clarify default parameters in scatter docs) +* :ghpull:`12378`: Backport PR #12366 on branch v3.0.x (TST: Update test images for new Ghostscript.) +* :ghpull:`12375`: Backport PR #11648 on branch v3.0.x (FIX: colorbar placement in constrained layout) +* :ghpull:`11648`: FIX: colorbar placement in constrained layout +* :ghpull:`12350`: Backport PR #12214 on branch v3.0.x +* :ghpull:`12348`: Backport PR #12347 on branch v3.0.x (DOC: add_child_axes to axes_api.rst) +* :ghpull:`12214`: Improve docstring of Annotation +* :ghpull:`12344`: Backport PR #12321 on branch v3.0.x (maint: setupext.py for freetype had a Catch case for missing ft2build.h) +* :ghpull:`12342`: Backport PR #12334 on branch v3.0.x (Improve selection of inset indicator connectors.) +* :ghpull:`12334`: Improve selection of inset indicator connectors. +* :ghpull:`12339`: Backport PR #12297 on branch v3.0.x (Remove some pytest parameterising warnings) +* :ghpull:`12338`: Backport PR #12268 on branch v3.0.x (FIX: remove unnecessary ``self`` in ``super_``-calls, fixes #12265) +* :ghpull:`12336`: Backport PR #12212 on branch v3.0.x (font_manager: Fixed problems with Path(...).suffix) +* :ghpull:`12268`: FIX: remove unnecessary ``self`` in ``super_``-calls, fixes #12265 +* :ghpull:`12212`: font_manager: Fixed problems with Path(...).suffix +* :ghpull:`12331`: Backport PR #12322 on branch v3.0.x (Fix the docs build.) +* :ghpull:`12327`: Backport PR #12326 on branch v3.0.x (fixed minor spelling error in docstring) +* :ghpull:`12320`: Backport PR #12319 on branch v3.0.x (Fix Travis 3.6 builds) +* :ghpull:`12315`: Backport PR #12313 on branch v3.0.x (BUG: Fix typo in view_limits() for MultipleLocator) +* :ghpull:`12313`: BUG: Fix typo in view_limits() for MultipleLocator +* :ghpull:`12305`: Backport PR #12274 on branch v3.0.x (MNT: put back ``_hold`` as read-only attribute on AxesBase) +* :ghpull:`12274`: MNT: put back ``_hold`` as read-only attribute on AxesBase +* :ghpull:`12303`: Backport PR #12163 on branch v3.0.x (TST: Defer loading Qt framework until test is run.) +* :ghpull:`12299`: Backport PR #12294 on branch v3.0.x (Fix expand_dims warnings in triinterpolate) +* :ghpull:`12163`: TST: Defer loading Qt framework until test is run. +* :ghpull:`12301`: Ghostscript 9.0 requirement revisited +* :ghpull:`12294`: Fix expand_dims warnings in triinterpolate +* :ghpull:`12297`: Remove some pytest parameterising warnings +* :ghpull:`12295`: Backport PR #12261 on branch v3.0.x (FIX: parasite axis2 demo) +* :ghpull:`12289`: Backport PR #12278 on branch v3.0.x (Document inheriting docstrings) +* :ghpull:`12287`: Backport PR #12262 on branch v3.0.x (Simplify empty-rasterized pdf test.) +* :ghpull:`12280`: Backport PR #12269 on branch v3.0.x (Add some param docs to BlockingInput methods) +* :ghpull:`12266`: Backport PR #12254 on branch v3.0.x (Improve docstrings of Animations) +* :ghpull:`12262`: Simplify empty-rasterized pdf test. +* :ghpull:`12254`: Improve docstrings of Animations +* :ghpull:`12263`: Backport PR #12258 on branch v3.0.x (Fix CSS for module-level data) +* :ghpull:`12250`: Backport PR #12209 on branch v3.0.x (Doc: Sort named colors example by palette) +* :ghpull:`12248`: Backport PR #12237 on branch v3.0.x (Use (float, float) as parameter type for 2D positions in docstrings) +* :ghpull:`12240`: Backport PR #12236 on branch v3.0.x +* :ghpull:`12237`: Use (float, float) as parameter type for 2D positions in docstrings +* :ghpull:`12242`: Backport PR #12238 on branch v3.0.x (Typo in docs) +* :ghpull:`12236`: Make boilerplate-generated pyplot.py flake8 compliant +* :ghpull:`12234`: Backport PR #12228 on branch v3.0.x (Fix trivial typo in docs.) +* :ghpull:`12230`: Backport PR #12213 on branch v3.0.x (Change win32InstalledFonts return value) +* :ghpull:`12213`: Change win32InstalledFonts return value +* :ghpull:`12223`: Backport PR #11688 on branch v3.0.x (Don't draw axis (spines, ticks, labels) twice when using parasite axes.) +* :ghpull:`12224`: Backport PR #12207 on branch v3.0.x (FIX: dont' check for interactive framework if none required) +* :ghpull:`12207`: FIX: don't check for interactive framework if none required +* :ghpull:`11688`: Don't draw axis (spines, ticks, labels) twice when using parasite axes. +* :ghpull:`12205`: Backport PR #12186 on branch v3.0.x (DOC: fix API note about get_tightbbox) +* :ghpull:`12204`: Backport PR #12203 on branch v3.0.x (Document legend best slowness) +* :ghpull:`12203`: Document legend's slowness when "best" location is used +* :ghpull:`12194`: Backport PR #12164 on branch v3.0.x (Fix Annotation.contains.) +* :ghpull:`12193`: Backport PR #12177 on branch v3.0.x (FIX: remove cwd from mac font path search) +* :ghpull:`12164`: Fix Annotation.contains. +* :ghpull:`12177`: FIX: remove cwd from mac font path search +* :ghpull:`12185`: Backport PR #12183 on branch v3.0.x (Doc: Don't use Sphinx 1.8) +* :ghpull:`12183`: Doc: Don't use Sphinx 1.8 +* :ghpull:`12172`: Backport PR #12157 on branch v3.0.x (Properly declare the interactive framework for the qt4foo backends.) +* :ghpull:`12167`: Backport PR #12166 on branch v3.0.x (Document preference order for backend auto selection) +* :ghpull:`12166`: Document preference order for backend auto selection +* :ghpull:`12157`: Properly declare the interactive framework for the qt4foo backends. +* :ghpull:`12153`: Backport PR #12148 on branch v3.0.x (BLD: pragmatic fix for building basic_unit example on py37) + +Issues (31): + +* :ghissue:`12626`: AttributeError: module 'matplotlib' has no attribute 'artist' +* :ghissue:`12613`: transiently linked interactivity of unshared pair of axes generated with make_axes_locatable +* :ghissue:`12601`: Can't import matplotlib +* :ghissue:`12580`: Incorrect hist error message with bad color size +* :ghissue:`12567`: Calling pyplot.show() with TkAgg backend on x86 machine raises OverflowError. +* :ghissue:`12556`: Matplotlib 3.0.0 import hangs in clean environment +* :ghissue:`12550`: colorbar resizes in animation +* :ghissue:`12155`: Incorrect placement of Colorbar ticks using LogNorm +* :ghissue:`12438`: Scatter doesn't accept a list of strings as color spec. +* :ghissue:`12429`: scatter() does not accept gray strings anymore +* :ghissue:`12458`: add_lines misses lines for matplotlib.colorbar.ColorbarBase +* :ghissue:`12239`: 3d axes are collapsed by tight_layout +* :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:`12291`: Importing pyplot crashes on macOS due to missing fontlist-v300.json and then Permission denied: '/opt/local/share/fonts' +* :ghissue:`12288`: New function signatures in pyplot break Cartopy +* :ghissue:`12445`: Error on colorbar +* :ghissue:`12446`: Polar Contour - float() argument must be a string or a number, not 'AxesParasiteParasiteAuxTrans' +* :ghissue:`12271`: error with errorbar with datetime64 +* :ghissue:`12405`: plt.stackplot() does not work with 3.0.0 +* :ghissue:`12406`: Bug with font finding, and here is my fix as well. +* :ghissue:`12325`: Annotation change from "s" to "text" in 3.0- documentation +* :ghissue:`11641`: constrained_layout and colorbar for a subset of axes +* :ghissue:`12352`: TeX rendering broken on master with windows +* :ghissue:`12354`: Too many levels of symbolic links +* :ghissue:`12265`: ParasiteAxesAuxTrans pcolor/pcolormesh and contour/contourf broken +* :ghissue:`12173`: Cannot import pyplot +* :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 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 index edafac67e192..395f87acd534 100644 --- a/doc/users/prev_whats_new/github_stats_3.0.2.rst +++ b/doc/users/prev_whats_new/github_stats_3.0.2.rst @@ -1,13 +1,14 @@ .. _github-stats-3-0-2: -GitHub Stats for Matplotlib 3.0.2 -================================= +GitHub statistics for 3.0.2 (Nov 10, 2018) +========================================== -GitHub stats for 2018/09/18 - 2018/11/09 (tag: v3.0.0) +GitHub statistics for 2018/09/18 (tag: v3.0.0) - 2018/11/10 These lists are automatically generated, and may be incomplete or contain duplicates. We closed 170 issues and merged 224 pull requests. +The full list can be seen `on GitHub `__ The following 49 authors contributed 460 commits. diff --git a/doc/users/prev_whats_new/github_stats_3.0.3.rst b/doc/users/prev_whats_new/github_stats_3.0.3.rst new file mode 100644 index 000000000000..5c1271e52e4f --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.0.3.rst @@ -0,0 +1,147 @@ +.. _github-stats-3-0-3: + +GitHub statistics for 3.0.3 (Feb 28, 2019) +========================================== + +GitHub statistics for 2018/11/10 (tag: v3.0.2) - 2019/02/28 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 14 issues and merged 92 pull requests. +The full list can be seen `on GitHub `__ + +The following 19 authors contributed 157 commits. + +* Antony Lee +* Christer Jensen +* Christoph Gohlke +* David Stansby +* Elan Ernest +* Elliott Sales de Andrade +* ImportanceOfBeingErnest +* James Adams +* Jody Klymak +* Johannes H. Jensen +* Matthias Geier +* MeeseeksMachine +* Molly Rossow +* Nelle Varoquaux +* Paul Ivanov +* Pierre Thibault +* Thomas A Caswell +* Tim Hoffmann +* Tobia De Koninck + +GitHub issues and pull requests: + +Pull Requests (92): + +* :ghpull:`13493`: V3.0.3 prep +* :ghpull:`13491`: V3.0.x pi +* :ghpull:`13460`: Backport PR #13455 on branch v3.0.x (BLD: only try to get freetype src if src does not exist) +* :ghpull:`13461`: Backport PR #13426 on branch v3.0.x (FIX: bbox_inches='tight' with only non-finite bounding boxes) +* :ghpull:`13426`: FIX: bbox_inches='tight' with only non-finite bounding boxes +* :ghpull:`13453`: Backport PR #13451 on branch v3.0.x (MNT: fix logic error where we never try the second freetype URL) +* :ghpull:`13451`: MNT: fix logic error where we never try the second freetype URL +* :ghpull:`13446`: Merge pull request #11246 from anntzer/download-jquery +* :ghpull:`13437`: Backport PR #13436 on branch v3.0.x (Add get/set_in_layout to artist API docs.) +* :ghpull:`13436`: Add get/set_in_layout to artist API docs. +* :ghpull:`13432`: Really fix ArtistInspector.get_aliases +* :ghpull:`13416`: Backport PR #13405 on branch v3.0.x (Fix imshow()ing PIL-opened images.) +* :ghpull:`13418`: Backport PR #13412 and #13337 on branch v3.0.x +* :ghpull:`13412`: CI: add additional qt5 deb package on travis +* :ghpull:`13370`: Backport PR #13367 on branch v3.0.x (DOC: fix note of what version hold was deprecated in (2.0 not 2.1)) +* :ghpull:`13366`: Backport PR #13365 on branch v3.0.x (Fix gcc warning) +* :ghpull:`13365`: Fix gcc warning +* :ghpull:`13347`: Backport PR #13289 on branch v3.0.x (Fix unhandled C++ exception) +* :ghpull:`13349`: Backport PR #13234 on branch v3.0.x +* :ghpull:`13281`: MAINT install of pinned vers for travis +* :ghpull:`13289`: Fix unhandled C++ exception +* :ghpull:`13345`: Backport PR #13333 on branch v3.0.x (Fix possible leak of return of PySequence_GetItem.) +* :ghpull:`13333`: Fix possible leak of return of PySequence_GetItem. +* :ghpull:`13337`: Bump to flake8 3.7. +* :ghpull:`13340`: Backport PR #12398 on branch v3.0.x (CI: Don't run AppVeyor/Travis for doc backport branches.) +* :ghpull:`13317`: Backport PR #13316 on branch v3.0.x (Put correct version in constrained layout tutorial) +* :ghpull:`13308`: Backport PR #12678 on branch v3.0.x +* :ghpull:`12678`: FIX: properly set tz for YearLocator +* :ghpull:`13291`: Backport PR #13287 on branch v3.0.x (Fix unsafe use of NULL pointer) +* :ghpull:`13290`: Backport PR #13288 on branch v3.0.x (Fix potential memory leak) +* :ghpull:`13287`: Fix unsafe use of NULL pointer +* :ghpull:`13288`: Fix potential memory leak +* :ghpull:`13273`: Backport PR #13272 on branch v3.0.x (DOC Better description of inset locator and colorbar) +* :ghpull:`12812`: Backport PR #12809 on branch v3.0.x (Fix TypeError when calculating tick_values) +* :ghpull:`13245`: Backport PR #13244 on branch v3.0.x (Fix typo) +* :ghpull:`13176`: Backport PR #13047 on branch v3.0.x (Improve docs on contourf extend) +* :ghpull:`13215`: Backport PR #13212 on branch v3.0.x (Updated the docstring for pyplot.figure to list floats as the type for figsize argument) +* :ghpull:`13158`: Backport PR #13150 on branch v3.0.x (Remove unused add_dicts from example.) +* :ghpull:`13157`: Backport PR #13152 on branch v3.0.x (DOC: Add explanatory comment for colorbar with axes divider example) +* :ghpull:`13221`: Backport PR #13194 on branch v3.0.x (TST: Fix incorrect call to pytest.raises.) +* :ghpull:`13230`: Backport PR #13226 on branch v3.0.x (Avoid triggering warnings in mandelbrot example.) +* :ghpull:`13216`: Backport #13205 on branch v3.0.x (Add xvfb service to travis) +* :ghpull:`13194`: TST: Fix incorrect call to pytest.raises. +* :ghpull:`13212`: Updated the docstring for pyplot.figure to list floats as the type for figsize argument +* :ghpull:`13205`: Add xvfb service to travis +* :ghpull:`13204`: Add xvfb service to travis +* :ghpull:`13175`: Backport PR #13015 on branch v3.0.x (Enable local doc building without git installation) +* :ghpull:`13047`: Improve docs on contourf extend +* :ghpull:`13015`: Enable local doc building without git installation +* :ghpull:`13159`: Revert "Pin pytest to <3.8 (for 3.0.x)" +* :ghpull:`13150`: Remove unused add_dicts from example. +* :ghpull:`13152`: DOC: Add explanatory comment for colorbar with axes divider example +* :ghpull:`13085`: Backport PR #13081 on branch v3.0.x (DOC: forbid a buggy version of pillow for building docs) +* :ghpull:`13082`: Backport PR #13080 on branch v3.0.x (Pin pillow to < 5.4 to fix doc build) +* :ghpull:`13054`: Backport PR #13052 on branch v3.0.x (Small bug fix in image_slices_viewer) +* :ghpull:`13052`: Small bug fix in image_slices_viewer +* :ghpull:`13036`: Backport PR #12949 on branch v3.0.x (Update docstring of Axes3d.scatter) +* :ghpull:`12949`: Update docstring of Axes3d.scatter +* :ghpull:`13004`: Backport PR #13001: Update windows build instructions +* :ghpull:`13011`: Backport PR #13006 on branch v3.0.x (Add category module to docs) +* :ghpull:`13009`: Fix dependencies for travis build with python 3.5 +* :ghpull:`13006`: Add category module to docs +* :ghpull:`13001`: Update windows build instructions +* :ghpull:`12996`: Fix return type in 3D scatter docs +* :ghpull:`12972`: Backport PR #12929 on branch v3.0.x (FIX: skip gtk backend if gobject but not pygtk is installed) +* :ghpull:`12596`: Use sudo:true for nightly builds. +* :ghpull:`12929`: FIX: skip gtk backend if gobject but not pygtk is installed +* :ghpull:`12965`: Backport PR #12960 on branch v3.0.x (Remove animated=True from animation docs) +* :ghpull:`12964`: Backport PR #12938 on branch v3.0.x (Fix xtick.minor.visible only acting on the xaxis) +* :ghpull:`12938`: Fix xtick.minor.visible only acting on the xaxis +* :ghpull:`12937`: Backport PR #12914 on branch 3.0.x: Fix numpydoc formatting +* :ghpull:`12914`: Fix numpydoc formatting +* :ghpull:`12923`: Backport PR #12921 on branch v3.0.x (Fix documentation of vert parameter of Axes.bxp) +* :ghpull:`12921`: Fix documentation of vert parameter of Axes.bxp +* :ghpull:`12912`: Backport PR #12878 on branch v3.0.2-doc (Pin pytest to <3.8 (for 3.0.x)) +* :ghpull:`12906`: Backport PR #12774 on branch v3.0.x +* :ghpull:`12774`: Cairo backend: Fix alpha render of collections +* :ghpull:`12854`: Backport PR #12835 on branch v3.0.x (Don't fail tests if cairo dependency is not installed.) +* :ghpull:`12896`: Backport PR #12848 on branch v3.0.x (Fix spelling of the name Randall Munroe) +* :ghpull:`12894`: Backport PR #12890 on branch v3.0.x (Restrict postscript title to ascii.) +* :ghpull:`12838`: Backport PR #12795 on branch v3.0.x (Fix Bezier degree elevation formula in backend_cairo.) +* :ghpull:`12843`: Backport PR #12824 on branch v3.0.x +* :ghpull:`12890`: Restrict postscript title to ascii. +* :ghpull:`12878`: Pin pytest to <3.8 (for 3.0.x) +* :ghpull:`12870`: Backport PR #12869 on branch v3.0.x (Fix latin-1-ization of Title in eps.) +* :ghpull:`12869`: Fix latin-1-ization of Title in eps. +* :ghpull:`12835`: Don't fail tests if cairo dependency is not installed. +* :ghpull:`12848`: Fix spelling of the name Randall Munroe +* :ghpull:`12795`: Fix Bezier degree elevation formula in backend_cairo. +* :ghpull:`12824`: Add missing datestr2num to docs +* :ghpull:`12791`: Backport PR #12790 on branch v3.0.x (Remove ticks and titles from tight bbox tests.) +* :ghpull:`12790`: Remove ticks and titles from tight bbox tests. + +Issues (14): + +* :ghissue:`10360`: creating PathCollection proxy artist with %matplotlib inline raises ValueError: cannot convert float NaN to integer +* :ghissue:`13276`: calling annotate with nan values for the position still gives error after 3.0.2 +* :ghissue:`13450`: Issues with jquery download caching +* :ghissue:`13223`: label1On set to true when axis.tick_params(axis='both', which='major', length=5) +* :ghissue:`13311`: docs unclear on status of constraint layout +* :ghissue:`12675`: Off-by-one bug in annual axis labels when localized time crosses year boundary +* :ghissue:`13208`: Wrong argument type for figsize in documentation for figure +* :ghissue:`13201`: test_backend_qt tests failing +* :ghissue:`13013`: v3.0.2 local html docs "git describe" error +* :ghissue:`13051`: Missing self in image_slices_viewer +* :ghissue:`12920`: Incorrect return type in mplot3d documentation +* :ghissue:`12907`: Tiny typo in documentation of matplotlib.figure.Figure.colorbar +* :ghissue:`12892`: GTK3Cairo Backend Legend TypeError +* :ghissue:`12815`: DOC: matplotlib.dates datestr2num function documentation is missing 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 index 704de6d09932..97bee1af56b8 100644 --- a/doc/users/prev_whats_new/github_stats_3.1.0.rst +++ b/doc/users/prev_whats_new/github_stats_3.1.0.rst @@ -1,14 +1,14 @@ .. _github-stats-3-1-0: -GitHub Stats for Matplotlib 3.1.0 -================================= +GitHub statistics for 3.1.0 (May 18, 2019) +========================================== -GitHub stats for 2018/09/18 - 2019/05/13 (tag: v3.0.0) +GitHub statistics for 2018/09/18 (tag: v3.0.0) - 2019/05/18 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 full list can be seen `on GitHub `__ The following 150 authors contributed 3426 commits. diff --git a/doc/users/prev_whats_new/github_stats_3.1.1.rst b/doc/users/prev_whats_new/github_stats_3.1.1.rst index 5de8ba84ade8..3e552c371c55 100644 --- a/doc/users/prev_whats_new/github_stats_3.1.1.rst +++ b/doc/users/prev_whats_new/github_stats_3.1.1.rst @@ -1,9 +1,9 @@ .. _github-stats-3-1-1: -GitHub Stats for Matplotlib 3.1.1 -================================= +GitHub statistics for 3.1.1 (Jul 02, 2019) +========================================== -GitHub stats for 2019/05/18 - 2019/06/30 (tag: v3.1.0) +GitHub statistics for 2019/05/18 (tag: v3.1.0) - 2019/07/02 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.1.2.rst b/doc/users/prev_whats_new/github_stats_3.1.2.rst index 9f11f34cb78a..e1ed84e26372 100644 --- a/doc/users/prev_whats_new/github_stats_3.1.2.rst +++ b/doc/users/prev_whats_new/github_stats_3.1.2.rst @@ -1,202 +1,186 @@ .. _github-stats-3-1-2: -GitHub Stats for Matplotlib 3.1.2 -================================= +GitHub statistics for 3.1.2 (Nov 21, 2019) +========================================== -GitHub stats for 2019/05/18 - 2019/06/30 (tag: v3.1.0) +GitHub statistics for 2019/07/01 (tag: v3.1.1) - 2019/11/21 These lists are automatically generated, and may be incomplete or contain duplicates. -We closed 30 issues and merged 120 pulnl requests. -The full list can be seen `on GitHub `__ +We closed 28 issues and merged 113 pull requests. +The full list can be seen `on GitHub `__ -The following 30 authors contributed 323 commits. +The following 23 authors contributed 192 commits. -* Adam Gomaa +* Alex Rudy * Antony Lee -* Ben Root -* Christer Jensen -* chuanzhu xu +* Bingyao Liu +* Cong Ma * David Stansby -* Deng Tian -* djdt -* Dora Fraeman Caswell -* Elan Ernest * Elliott Sales de Andrade -* Eric Firing -* Filipe Fernandes -* Ian Thomas +* hannah +* Hanno Rein * ImportanceOfBeingErnest +* joaonsg * Jody Klymak -* Johannes H. Jensen -* Jonas Camillus Jeppesen -* LeiSurrre -* Matt Adamson +* Matthias Bussonnier * MeeseeksMachine -* Molly Rossow -* Nathan Goldbaum +* miquelastein * Nelle Varoquaux +* Patrick Shriwise +* Paul Hoffman * Paul Ivanov -* RoryIAngus * Ryan May +* Samesh * Thomas A Caswell -* Thomas Robitaille * Tim Hoffmann +* Vincent L.M. Mazoyer GitHub issues and pull requests: -Pull Requests (120): +Pull Requests (113): -* :ghpull:`14636`: Don't capture stderr in _check_and_log_subprocess. -* :ghpull:`14655`: Backport PR #14649 on branch v3.1.x (Fix appveyor conda py37) -* :ghpull:`14649`: Fix appveyor conda py37 -* :ghpull:`14646`: Backport PR #14640 on branch v3.1.x (FIX: allow secondary axes to be non-linear) -* :ghpull:`14640`: FIX: allow secondary axes to be non-linear -* :ghpull:`14643`: Second attempt at fixing axis inversion (for mpl3.1). -* :ghpull:`14623`: Fix axis inversion with loglocator and logitlocator. -* :ghpull:`14619`: Backport PR #14598 on branch v3.1.x (Fix inversion of shared axes.) -* :ghpull:`14621`: Backport PR #14613 on branch v3.1.x (Cleanup DateFormatter docstring.) -* :ghpull:`14622`: Backport PR #14611 on branch v3.1.x (Update some axis docstrings.) -* :ghpull:`14611`: Update some axis docstrings. -* :ghpull:`14613`: Cleanup DateFormatter docstring. -* :ghpull:`14598`: Fix inversion of shared axes. -* :ghpull:`14610`: Backport PR #14579 on branch v3.1.x (Fix inversion of 3d axis.) -* :ghpull:`14579`: Fix inversion of 3d axis. -* :ghpull:`14600`: Backport PR #14599 on branch v3.1.x (DOC: Add numpngw to third party packages.) -* :ghpull:`14574`: Backport PR #14568 on branch v3.1.x (Don't assume tk canvas have a manager attached.) -* :ghpull:`14568`: Don't assume tk canvas have a manager attached. -* :ghpull:`14571`: Backport PR #14566 on branch v3.1.x (Move setting of AA_EnableHighDpiScaling before creating QApplication.) -* :ghpull:`14566`: Move setting of AA_EnableHighDpiScaling before creating QApplication. -* :ghpull:`14541`: Backport PR #14535 on branch v3.1.x (Invalidate FT2Font cache when fork()ing.) -* :ghpull:`14535`: Invalidate FT2Font cache when fork()ing. -* :ghpull:`14522`: Backport PR #14040 on branch v3.1.x (Gracefully handle non-finite z in tricontour (issue #10167)) -* :ghpull:`14434`: Backport PR #14296 on branch v3.1.x (Fix barbs to accept array of bool for ``flip_barb``) -* :ghpull:`14518`: Backport PR #14509 on branch v3.1.x (Fix too large icon spacing in Qt5 on non-HiDPI screens) -* :ghpull:`14509`: Fix too large icon spacing in Qt5 on non-HiDPI screens -* :ghpull:`14514`: Backport PR #14256 on branch v3.1.x (Improve docstring of Axes.barbs) -* :ghpull:`14256`: Improve docstring of Axes.barbs -* :ghpull:`14505`: Backport PR #14395 on branch v3.1.x (MAINT: work around non-zero exit status of "pdftops -v" command.) -* :ghpull:`14504`: Backport PR #14445 on branch v3.1.x (FIX: fastpath clipped artists) -* :ghpull:`14502`: Backport PR #14451 on branch v3.1.x (FIX: return points rather than path to fix regression) -* :ghpull:`14445`: FIX: fastpath clipped artists -* :ghpull:`14497`: Backport PR #14491 on branch v3.1.x (Fix uses of PyObject_IsTrue.) -* :ghpull:`14491`: Fix uses of PyObject_IsTrue. -* :ghpull:`14492`: Backport PR #14490 on branch v3.1.x (Fix links of parameter types) -* :ghpull:`14490`: Fix links of parameter types -* :ghpull:`14489`: Backport PR #14459 on branch v3.1.x (Cleanup docstring of DraggableBase.) -* :ghpull:`14459`: Cleanup docstring of DraggableBase. -* :ghpull:`14485`: Backport #14429 on v3.1.x -* :ghpull:`14486`: Backport #14403 on v3.1. -* :ghpull:`14429`: FIX: if the first elements of an array are masked keep checking -* :ghpull:`14481`: Backport PR #14475 on branch v3.1.x (change ginoput docstring to match behavior) -* :ghpull:`14482`: Backport PR #14464 on branch v3.1.x (Mention origin and extent tutorial in API docs for origin kwarg) -* :ghpull:`14464`: Mention origin and extent tutorial in API docs for origin kwarg -* :ghpull:`14468`: Backport PR #14449: Improve docs on gridspec -* :ghpull:`14475`: change ginoput docstring to match behavior -* :ghpull:`14477`: Backport PR #14461 on branch v3.1.x (Fix out of bounds read in backend_tk.) -* :ghpull:`14476`: Backport PR #14474 on branch v3.1.x (Fix default value in docstring of errorbar func) -* :ghpull:`14461`: Fix out of bounds read in backend_tk. -* :ghpull:`14474`: Fix default value in docstring of errorbar func -* :ghpull:`14473`: Backport PR #14472 on branch v3.1.x (Fix NameError in example code for setting label via method) -* :ghpull:`14472`: Fix NameError in example code for setting label via method -* :ghpull:`14449`: Improve docs on gridspec -* :ghpull:`14450`: Backport PR #14422 on branch v3.1.x (Fix ReST note in span selector example) -* :ghpull:`14446`: Backport PR #14438 on branch v3.1.x (Issue #14372 - Add degrees to documentation) -* :ghpull:`14438`: Issue #14372 - Add degrees to documentation -* :ghpull:`14437`: Backport PR #14387 on branch v3.1.x (Fix clearing rubberband on nbagg) -* :ghpull:`14387`: Fix clearing rubberband on nbagg -* :ghpull:`14435`: Backport PR #14425 on branch v3.1.x (Lic restore license paint) -* :ghpull:`14296`: Fix barbs to accept array of bool for ``flip_barb`` -* :ghpull:`14430`: Backport PR #14397 on branch v3.1.x (Correctly set clip_path on pcolorfast return artist.) -* :ghpull:`14397`: Correctly set clip_path on pcolorfast return artist. -* :ghpull:`14409`: Backport PR #14335 on branch v3.1.x (Add explanation of animation.embed_limit to matplotlibrc.template) -* :ghpull:`14335`: Add explanation of animation.embed_limit to matplotlibrc.template -* :ghpull:`14403`: Revert "Preserve whitespace in svg output." -* :ghpull:`14407`: Backport PR #14406 on branch v3.1.x (Remove extra \iint in math_symbol_table for document) -* :ghpull:`14398`: Backport PR #14394 on branch v3.1.x (Update link to "MathML torture test".) -* :ghpull:`14394`: Update link to "MathML torture test". -* :ghpull:`14389`: Backport PR #14388 on branch v3.1.x (Fixed one little spelling error) -* :ghpull:`14385`: Backport PR #14316 on branch v3.1.x (Improve error message for kiwisolver import error (DLL load failed)) -* :ghpull:`14388`: Fixed one little spelling error -* :ghpull:`14384`: Backport PR #14369 on branch v3.1.x (Don't use deprecated mathcircled in docs.) -* :ghpull:`14316`: Improve error message for kiwisolver import error (DLL load failed) -* :ghpull:`14369`: Don't use deprecated mathcircled in docs. -* :ghpull:`14375`: Backport PR #14374 on branch v3.1.x (Check that the figure patch is in bbox_artists before trying to remove.) -* :ghpull:`14374`: Check that the figure patch is in bbox_artists before trying to remove. -* :ghpull:`14040`: Gracefully handle non-finite z in tricontour (issue #10167) -* :ghpull:`14342`: Backport PR #14326 on branch v3.1.x (Correctly apply PNG palette when building ImageBase through Pillow.) -* :ghpull:`14326`: Correctly apply PNG palette when building ImageBase through Pillow. -* :ghpull:`14341`: Backport PR #14337 on branch v3.1.x (Docstring cleanup) -* :ghpull:`14337`: Docstring cleanup -* :ghpull:`14325`: Backport PR #14126 on branch v3.1.x (Simplify grouped bar chart example) -* :ghpull:`14324`: Backport PR #14139 on branch v3.1.x (TST: be more explicit about identifying qt4/qt5 imports) -* :ghpull:`14126`: Simplify grouped bar chart example -* :ghpull:`14323`: Backport PR #14290 on branch v3.1.x (Convert SymmetricalLogScale to numpydoc) -* :ghpull:`14139`: TST: be more explicit about identifying qt4/qt5 imports -* :ghpull:`14290`: Convert SymmetricalLogScale to numpydoc -* :ghpull:`14321`: Backport PR #14313 on branch v3.1.x -* :ghpull:`14313`: Support masked array inputs for to_rgba and to_rgba_array. -* :ghpull:`14320`: Backport PR #14319 on branch v3.1.x (Don't set missing history buttons.) -* :ghpull:`14319`: Don't set missing history buttons. -* :ghpull:`14317`: Backport PR #14295: Fix bug in SymmetricalLogTransform. -* :ghpull:`14302`: Backport PR #14255 on branch v3.1.x (Improve docsstring of Axes.streamplot) -* :ghpull:`14255`: Improve docsstring of Axes.streamplot -* :ghpull:`14295`: Fix bug in SymmetricalLogTransform. -* :ghpull:`14294`: Backport PR #14282 on branch v3.1.x (Fix toolmanager's destroy subplots in tk) -* :ghpull:`14282`: Fix toolmanager's destroy subplots in tk -* :ghpull:`14292`: Backport PR #14289 on branch v3.1.x (BUG: Fix performance regression when plotting values from Numpy array sub-classes) -* :ghpull:`14289`: BUG: Fix performance regression when plotting values from Numpy array sub-classes -* :ghpull:`14287`: Backport PR #14286 on branch v3.1.x (fix minor typo) -* :ghpull:`14284`: Backport PR #14279 on branch v3.1.x (In case fallback to Agg fails, let the exception propagate out.) -* :ghpull:`14254`: Merge up 30x -* :ghpull:`14279`: In case fallback to Agg fails, let the exception propagate out. -* :ghpull:`14268`: Backport PR #14261 on branch v3.1.x (Updated polar documentation) -* :ghpull:`14261`: Updated polar documentation -* :ghpull:`14264`: Backport PR #14260 on branch v3.1.x (Remove old OSX FAQ page) -* :ghpull:`14260`: Remove old OSX FAQ page -* :ghpull:`14249`: Backport PR #14243 on branch v3.1.x (Update docstring of makeMappingArray) -* :ghpull:`14250`: Backport PR #14149 on branch v3.1.x -* :ghpull:`14252`: Backport PR #14248 on branch v3.1.x (Fix TextBox not respecting eventson) -* :ghpull:`14253`: Backport PR #13596 on branch v3.1.x (Normalize properties passed to bxp().) -* :ghpull:`14251`: Backport PR #14241 on branch v3.1.x (Fix linear segmented colormap with one element) -* :ghpull:`13596`: Normalize properties passed to bxp(). -* :ghpull:`14248`: Fix TextBox not respecting eventson -* :ghpull:`14241`: Fix linear segmented colormap with one element -* :ghpull:`14243`: Update docstring of makeMappingArray -* :ghpull:`14238`: Backport PR #14164 on branch v3.1.x (Fix regexp for dvipng version detection) -* :ghpull:`14149`: Avoid using ``axis([xlo, xhi, ylo, yhi])`` in examples. -* :ghpull:`14164`: Fix regexp for dvipng version detection -* :ghpull:`13739`: Fix pressing tab breaks keymap in CanvasTk +* :ghpull:`15664`: Backport PR #15649 on branch v3.1.x (Fix searchindex.js loading when ajax fails (because e.g. CORS in embedded iframes)) +* :ghpull:`15722`: Backport PR #15718 on branch v3.1.x (Update donation link) +* :ghpull:`15667`: Backport PR #15654 on branch v3.1.x (Fix some broken links.) +* :ghpull:`15658`: Backport PR #15647 on branch v3.1.x (Update some links) +* :ghpull:`15582`: Backport PR #15512 on branch v3.1.x +* :ghpull:`15512`: FIX: do not consider webagg and nbagg "interactive" for fallback +* :ghpull:`15558`: Backport PR #15553 on branch v3.1.x (DOC: add cache-buster query string to css path) +* :ghpull:`15550`: Backport PR #15528 on branch v3.1.x (Declutter home page) +* :ghpull:`15547`: Backport PR #15516 on branch v3.1.x (Add logo like font) +* :ghpull:`15511`: DOC: fix nav location +* :ghpull:`15508`: Backport PR #15489 on branch v3.1.x (DOC: adding main nav to site) +* :ghpull:`15494`: Backport PR #15486 on branch v3.1.x (Fixes an error in the documentation of Ellipse) +* :ghpull:`15486`: Fixes an error in the documentation of Ellipse +* :ghpull:`15473`: Backport PR #15464 on branch v3.1.x (Remove unused code (remainder from #15453)) +* :ghpull:`15470`: Backport PR #15460 on branch v3.1.x (Fix incorrect value check in axes_grid.) +* :ghpull:`15464`: Remove unused code (remainder from #15453) +* :ghpull:`15455`: Backport PR #15453 on branch v3.1.x (Improve example for tick locators) +* :ghpull:`15453`: Improve example for tick locators +* :ghpull:`15443`: Backport PR #15439 on branch v3.1.x (DOC: mention discourse main page) +* :ghpull:`15424`: Backport PR #15422 on branch v3.1.x (FIX: typo in attribute lookup) +* :ghpull:`15322`: Backport PR #15297 on branch v3.1.x (Document How-to figure empty) +* :ghpull:`15298`: Backport PR #15296 on branch v3.1.x (Fix typo/bug from 18cecf7) +* :ghpull:`15296`: Fix typo/bug from 18cecf7 +* :ghpull:`15278`: Backport PR #15271 on branch v3.1.x (Fix font weight validation) +* :ghpull:`15271`: Fix font weight validation +* :ghpull:`15218`: Backport PR #15217 on branch v3.1.x (Doc: Add ``plt.show()`` to horizontal bar chart example) +* :ghpull:`15207`: Backport PR #15206: FIX: be more forgiving about expecting internal s… +* :ghpull:`15198`: Backport PR #15197 on branch v3.1.x (Remove mention of now-removed basedir setup option.) +* :ghpull:`15197`: Remove mention of now-removed basedir setup option. +* :ghpull:`15189`: Backport PR #14979: FIX: Don't enable IPython integration if not ente… +* :ghpull:`15190`: Backport PR #14683: For non-html output, let sphinx pick the best format +* :ghpull:`15187`: Backport PR #15140 on branch v3.1.x +* :ghpull:`15185`: Backport PR #15168 on branch v3.1.x (MNT: explicitly cast ``np.bool_`` -> bool to prevent deprecation warning) +* :ghpull:`15168`: MNT: explicitly cast ``np.bool_`` -> bool to prevent deprecation warning +* :ghpull:`15183`: Backport PR #15181 on branch v3.1.x (FIX: proper call to zero_formats) +* :ghpull:`15181`: FIX: proper call to zero_formats +* :ghpull:`15172`: Backport PR #15166 on branch v3.1.x +* :ghpull:`15166`: FIX: indexed pandas bar +* :ghpull:`15153`: Backport PR #14456 on branch v3.1.x (PyQT5 Backend Partial Redraw Fix) +* :ghpull:`14456`: PyQT5 Backend Partial Redraw Fix +* :ghpull:`15140`: Fix ScalarFormatter formatting of masked values +* :ghpull:`15135`: Backport PR #15132 on branch v3.1.x (Update documenting guide on rcParams) +* :ghpull:`15128`: Backport PR #15115 on branch v3.1.x (Doc: highlight rcparams) +* :ghpull:`15125`: Backport PR #15110 on branch v3.1.x (Add inheritance diagram to mpl.ticker docs) +* :ghpull:`15116`: Backport PR #15114 on branch v3.1.x (DOC: update language around NF) +* :ghpull:`15058`: Backport PR #15055 on branch v3.1.x (Remove mention of now-removed feature in docstring.) +* :ghpull:`15055`: Remove mention of now-removed feature in docstring. +* :ghpull:`15047`: Backport PR #14919 on branch v3.1.x (FIX constrained_layout w/ hidden axes) +* :ghpull:`14919`: FIX constrained_layout w/ hidden axes +* :ghpull:`15022`: Backport PR #15020 on branch v3.1.x (Let connectionpatch be drawn on figure level) +* :ghpull:`15020`: Let connectionpatch be drawn on figure level +* :ghpull:`15017`: Backport PR #15007 on branch v3.1.x (FIX: support pandas 0.25) +* :ghpull:`14979`: FIX: Don't enable IPython integration if not entering REPL. +* :ghpull:`14987`: Merge pull request #14915 from AWhetter/fix_14585 +* :ghpull:`14985`: Backport PR #14982 on branch v3.1.x (DOC: correct table docstring) +* :ghpull:`14982`: DOC: correct table docstring +* :ghpull:`14975`: Backport PR #14974 on branch v3.1.x (grammar) +* :ghpull:`14972`: Backport PR #14971 on branch v3.1.x (typo) +* :ghpull:`14965`: Fix typo in documentation of table +* :ghpull:`14951`: Backport PR #14934 on branch v3.1.x (DOC: update axes_demo to directly manipulate fig, ax) +* :ghpull:`14938`: Backport PR #14905 on branch v3.1.x (Gracefully handle encoding problems when querying external executables.) +* :ghpull:`14935`: Backport PR #14933 on branch v3.1.x (DOC: typo x2 costum -> custom) +* :ghpull:`14936`: Backport PR #14932 on branch v3.1.x (DOC: Update invert_example to directly manipulate axis.) +* :ghpull:`14905`: Gracefully handle encoding problems when querying external executables. +* :ghpull:`14933`: DOC: typo x2 costum -> custom +* :ghpull:`14910`: Backport PR #14901 on branch v3.1.x (Fix GH14900: numpy 1.17.0 breaks test_colors.) +* :ghpull:`14864`: Backport PR #14830 on branch v3.1.x (FIX: restore special casing of shift-enter in notebook) +* :ghpull:`14861`: Don't use pandas 0.25.0 for testing +* :ghpull:`14855`: Backport PR #14839 on branch v3.1.x +* :ghpull:`14839`: Improve docstring of Axes.hexbin +* :ghpull:`14837`: Backport PR #14757 on branch v3.1.x (Remove incorrect color/cmap docstring line in contour.py) +* :ghpull:`14836`: Backport PR #14764 on branch v3.1.x (DOC: Fixes the links in the see-also section of Axes.get_tightbbox) +* :ghpull:`14818`: Backport PR #14510 on branch v3.1.x (Improve example for fill_between) +* :ghpull:`14819`: Backport PR #14704 on branch v3.1.x (Small patches on Docs (Tutorials and FAQ)) +* :ghpull:`14820`: Backport PR #14765 on branch v3.1.x (DOC: Fix documentation location for patheffects) +* :ghpull:`14821`: Backport PR #14741 on branch v3.1.x (DOC: Update description of properties of Line2D in 'plot' documentation.) +* :ghpull:`14822`: Backport PR #14714 on branch v3.1.x (Point towards how to save output of non-interactive backends) +* :ghpull:`14823`: Backport PR #14784 on branch v3.1.x (Tiny docs/comments cleanups.) +* :ghpull:`14824`: Backport PR #14798 on branch v3.1.x (Cleanup dates.py module docstrings.) +* :ghpull:`14825`: Backport PR #14802 on branch v3.1.x (Fix some broken refs in the docs.) +* :ghpull:`14826`: Backport PR #14806 on branch v3.1.x (Remove unnecessary uses of transFigure from examples.) +* :ghpull:`14827`: Backport PR #14525 on branch v3.1.x (improve documentation of OffsetBox) +* :ghpull:`14828`: Backport PR #14548: Link to matplotlibrc of used version +* :ghpull:`14817`: Backport PR #14697 on branch v3.1.x (Fix NavigationToolbar2QT height) +* :ghpull:`14692`: Backport PR #14688 on branch v3.1.x (Revise the misleading title for subplots demo) +* :ghpull:`14816`: Backport PR #14677 on branch v3.1.x (Don't misclip axis when calling set_ticks on inverted axes.) +* :ghpull:`14815`: Backport PR #14658 on branch v3.1.x (Fix numpydoc formatting) +* :ghpull:`14813`: Backport PR #14488 on branch v3.1.x (Make sure EventCollection doesn't modify input in-place) +* :ghpull:`14806`: Remove unnecessary uses of transFigure from examples. +* :ghpull:`14802`: Fix some broken refs in the docs. +* :ghpull:`14798`: Cleanup dates.py module docstrings. +* :ghpull:`14784`: Tiny docs/comments cleanups. +* :ghpull:`14764`: DOC: Fixes the links in the see-also section of Axes.get_tightbbox +* :ghpull:`14777`: Backport PR #14775 on branch v3.1.x (DOC: Fix CircleCI builds) +* :ghpull:`14769`: Backport PR #14759 on branch v3.1.x (DOC: note about having to rebuild after switching to local freetype) +* :ghpull:`14714`: Point towards how to save output of non-interactive backends +* :ghpull:`14741`: DOC: Update description of properties of Line2D in 'plot' documentation. +* :ghpull:`14771`: Backport PR #14760 on branch v3.1.x (DOC: minor CoC wording change) +* :ghpull:`14765`: DOC: Fix documentation location for patheffects +* :ghpull:`14735`: Backport PR #14734 on branch v3.1.x (Add geoplot to third-party example libraries page.) +* :ghpull:`14711`: Backport PR #14706 on branch v3.1.x (Mention gr backend in docs.) +* :ghpull:`14704`: Small patches on Docs (Tutorials and FAQ) +* :ghpull:`14700`: Backport PR #14698 on branch v3.1.x (Make property name be consistent with rc parameter.) +* :ghpull:`14510`: Improve example for fill_between +* :ghpull:`14683`: For non-html output, let sphinx pick the best format. +* :ghpull:`14697`: Fix NavigationToolbar2QT height +* :ghpull:`14677`: Don't misclip axis when calling set_ticks on inverted axes. +* :ghpull:`14658`: Fix numpydoc formatting +* :ghpull:`14488`: Make sure EventCollection doesn't modify input in-place +* :ghpull:`14570`: Remove print statements +* :ghpull:`14525`: improve documentation of OffsetBox +* :ghpull:`14548`: Link to matplotlibrc of used version +* :ghpull:`14395`: MAINT: work around non-zero exit status of "pdftops -v" command. -Issues (30): +Issues (28): -* :ghissue:`14620`: Plotting on a log/logit scale overwrites axis inverting -* :ghissue:`14615`: Inverting an axis using its limits does not work for log scale -* :ghissue:`14577`: Calling invert_yaxis() on a 3D plot has either no effect or removes ticks -* :ghissue:`14602`: NavigationToolbar2Tk save_figure function bug -* :ghissue:`1219`: Show fails on figures created with the object-oriented system -* :ghissue:`10167`: Segmentation fault with tricontour -* :ghissue:`13723`: RuntimeError when saving PDFs via parallel processes (not threads!) -* :ghissue:`14315`: Improvement: Better error message if kiwisolver fails to import -* :ghissue:`14356`: matplotlib.units.ConversionError on scatter of dates with a NaN in the first position -* :ghissue:`14467`: Docs for plt.ginput() have the wrong default value for show_clicks keyword argument. -* :ghissue:`14225`: Matplotlib crashes on windows while maximizing plot window when using Multicursor -* :ghissue:`14458`: DOC: small inconsistency in errobar docstring -* :ghissue:`14372`: Document that view_init() arguments should be in degrees -* :ghissue:`12201`: issues clearing rubberband on nbagg at non-default browser zoom -* :ghissue:`13576`: pcolorfast misbehaves when changing axis limits -* :ghissue:`14303`: Unable to import matplotlib on Windows 10 v1903 -* :ghissue:`14283`: RendererSVG CSS 'white-space' property conflicts with default HTML CSS -* :ghissue:`14293`: imshow() producing "inverted" colors since 3.0.3 -* :ghissue:`14322`: Cannot import matplotlib with Python 3.7.x on Win10Pro -* :ghissue:`14137`: Qt5 test auto-skip is not working correctly -* :ghissue:`14301`: scatter() fails on nan-containing input when providing edgecolor -* :ghissue:`14318`: Don't try to set missing history buttons. -* :ghissue:`14265`: symlog looses some points since 3.1.0 (example given) -* :ghissue:`14274`: BUG: plotting with Numpy array subclasses is slow with Matplotlib 3.1.0 (regression) -* :ghissue:`14263`: import pyplot issue - -* :ghissue:`14227`: Update "working with Mpl on OSX" docs -* :ghissue:`13448`: boxplot doesn't normalize properties before applying them -* :ghissue:`14226`: Modify matplotlib TextBox value without triggering callback -* :ghissue:`14232`: LinearSegmentedColormap with N=1 gives confusing error message -* :ghissue:`10365`: Scatter plot with non-sequence ´c´ color should give a better Error message. +* :ghissue:`15295`: Can't install matplotlib with pip for Python 3.8b4 +* :ghissue:`15714`: Publish 3.8 wheels +* :ghissue:`15706`: Python 3.8 - Installation error: TypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType +* :ghissue:`15690`: Should xlim support single-entry arrays? +* :ghissue:`15608`: imshow rendering changed from 3.1.0 to 3.1.1 +* :ghissue:`14903`: 'MPLBACKEND=webagg' is overwritten by agg when $DISPLAY is not set on Linux +* :ghissue:`15351`: Bar width expands between subsequent bars +* :ghissue:`15240`: Can't specify integer ``font.weight`` in custom style sheet any more +* :ghissue:`15255`: ``imshow`` in ``v3.1.1``: y-axis chopped-off +* :ghissue:`15186`: 3D quiver plot fails when pivot = "middle" +* :ghissue:`14160`: PySide2/PyQt5: Graphics issues in QScrollArea for OSX +* :ghissue:`15178`: mdates.ConciseDateFormatter() doesn't work with zero_formats parameter +* :ghissue:`15179`: Patch 3.1.1 broke imshow() heatmaps: Tiles cut off on y-axis +* :ghissue:`15162`: axes.bar fails when x is int-indexed pandas.Series +* :ghissue:`15103`: Colorbar for imshow messes interactive cursor with masked data +* :ghissue:`8744`: ConnectionPatch hidden by plots +* :ghissue:`14950`: plt.ioff() not supressing figure generation +* :ghissue:`14959`: Typo in Docs +* :ghissue:`14902`: from matplotlib import animation UnicodeDecodeError +* :ghissue:`14897`: New yticks behavior in 3.1.1 vs 3.1.0 +* :ghissue:`14811`: How to save hexbin binned data in a text file. +* :ghissue:`14551`: Non functional API links break docs builds downstream +* :ghissue:`14720`: Line2D properties should state units +* :ghissue:`10891`: Toolbar icons too large in PyQt5 (Qt5Agg backend) +* :ghissue:`14675`: Heatmaps are being truncated when using with seaborn +* :ghissue:`14487`: eventplot sorts np.array positions, but not list positions +* :ghissue:`14547`: Changing mplstyle: axes.titlelocation causes Bad Key error +* :ghissue:`10410`: eventplot alters data in some cases diff --git a/doc/users/prev_whats_new/github_stats_3.1.3.rst b/doc/users/prev_whats_new/github_stats_3.1.3.rst new file mode 100644 index 000000000000..b4706569df02 --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.1.3.rst @@ -0,0 +1,87 @@ +.. _github-stats-3-1-3: + +GitHub statistics for 3.1.3 (Feb 03, 2020) +========================================== + +GitHub statistics for 2019/11/05 (tag: v3.1.2) - 2020/02/03 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 7 issues and merged 45 pull requests. +The full list can be seen `on GitHub `__ + +The following 13 authors contributed 125 commits. + +* Antony Lee +* David Stansby +* Elliott Sales de Andrade +* hannah +* Jody Klymak +* MeeseeksMachine +* Nelle Varoquaux +* Nikita Kniazev +* Paul Ivanov +* SamSchott +* Steven G. Johnson +* Thomas A Caswell +* Tim Hoffmann + +GitHub issues and pull requests: + +Pull Requests (45): + +* :ghpull:`16382`: Backport PR #16379 on branch v3.1.x (FIX: catch on message content, not module) +* :ghpull:`16362`: Backport PR #16347: FIX: catch warnings from pandas in cbook._check_1d +* :ghpull:`16356`: Backport PR #16330 on branch v3.1.x (Clearer signal handling) +* :ghpull:`16330`: Clearer signal handling +* :ghpull:`16348`: Backport PR #16255 on branch v3.1.x (Move version info to sidebar) +* :ghpull:`16345`: Backport PR #16298 on branch v3.1.x (Don't recursively call draw_idle when updating artists at draw time.) +* :ghpull:`16298`: Don't recursively call draw_idle when updating artists at draw time. +* :ghpull:`16322`: Backport PR #16250: Fix zerolen intersect +* :ghpull:`16320`: Backport PR #16311 on branch v3.1.x (don't override non-Python signal handlers) +* :ghpull:`16311`: don't override non-Python signal handlers +* :ghpull:`16250`: Fix zerolen intersect +* :ghpull:`16237`: Backport PR #16235 on branch v3.1.x (FIX: AttributeError in TimerBase.start) +* :ghpull:`16235`: FIX: AttributeError in TimerBase.start +* :ghpull:`16208`: Backport PR #15556 on branch v3.1.x (Fix test suite compat with ghostscript 9.50.) +* :ghpull:`16213`: Backport PR #15763 on branch v3.1.x (Skip webagg test if tornado is not available.) +* :ghpull:`16167`: Backport PR #16166 on branch v3.1.x (Add badge for citing 3.1.2) +* :ghpull:`16166`: Add badge for citing 3.1.2 +* :ghpull:`16144`: Backport PR #16053 on branch v3.1.x (Fix v_interval setter) +* :ghpull:`16053`: Fix v_interval setter +* :ghpull:`16136`: Backport PR #16112 on branch v3.1.x (CI: Fail when failed to install dependencies) +* :ghpull:`16131`: Backport PR #16126 on branch v3.1.x (TST: test_fork: Missing join) +* :ghpull:`16126`: TST: test_fork: Missing join +* :ghpull:`16091`: Backport PR #16086 on branch v3.1.x (FIX: use supported attribute to check pillow version) +* :ghpull:`16040`: Backport PR #16031 on branch v3.1.x (Fix docstring of hillshade().) +* :ghpull:`16032`: Backport PR #16028 on branch v3.1.x (Prevent FigureCanvasQT_draw_idle recursively calling itself.) +* :ghpull:`16028`: Prevent FigureCanvasQT_draw_idle recursively calling itself. +* :ghpull:`16020`: Backport PR #16007 on branch v3.1.x (Fix search on nested pages) +* :ghpull:`16018`: Backport PR #15735 on branch v3.1.x (Cleanup some mplot3d docstrings.) +* :ghpull:`16007`: Fix search on nested pages +* :ghpull:`15957`: Backport PR #15953 on branch v3.1.x (Update donation link) +* :ghpull:`15763`: Skip webagg test if tornado is not available. +* :ghpull:`15881`: Backport PR #15859 on branch v3.1.x (Doc: Move search field into nav bar) +* :ghpull:`15863`: Backport PR #15244 on branch v3.1.x: Change documentation format of rcParams defaults +* :ghpull:`15859`: Doc: Move search field into nav bar +* :ghpull:`15860`: Backport PR #15851 on branch v3.1.x (ffmpeg is available on default ubuntu packages now) +* :ghpull:`15851`: ffmpeg is available on default ubuntu packages now. +* :ghpull:`15843`: Backport PR #15737 on branch v3.1.x (Fix env override in WebAgg backend test.) +* :ghpull:`15760`: Backport PR #15752 on branch v3.1.x (Update boxplot/violinplot faq.) +* :ghpull:`15757`: Backport PR #15751 on branch v3.1.x (Modernize FAQ entry for plt.show().) +* :ghpull:`15735`: Cleanup some mplot3d docstrings. +* :ghpull:`15753`: Backport PR #15661 on branch v3.1.x (Document scope of 3D scatter depthshading.) +* :ghpull:`15741`: Backport PR #15729 on branch v3.1.x (Catch correct parse errror type for dateutil >= 2.8.1) +* :ghpull:`15729`: Catch correct parse errror type for dateutil >= 2.8.1 +* :ghpull:`15737`: Fix env override in WebAgg backend test. +* :ghpull:`15244`: Change documentation format of rcParams defaults + +Issues (7): + +* :ghissue:`16294`: BUG: Interactive mode slow +* :ghissue:`15842`: Path.intersects_path returns True when it shouldn't +* :ghissue:`16163`: libpng error: Read Error when using matplotlib after setting usetex=True +* :ghissue:`15960`: v3.1.2 - test suite "frozen" after it finishes +* :ghissue:`16083`: Pillow 7.0.0 Support +* :ghissue:`15481`: Recursion error +* :ghissue:`15717`: Move search field into nav bar diff --git a/doc/users/prev_whats_new/github_stats_3.2.0.rst b/doc/users/prev_whats_new/github_stats_3.2.0.rst index f5cee3ad245c..5fd75f7c57d0 100644 --- a/doc/users/prev_whats_new/github_stats_3.2.0.rst +++ b/doc/users/prev_whats_new/github_stats_3.2.0.rst @@ -1,9 +1,9 @@ .. _github-stats-3-2-0: -GitHub Stats for Matplotlib 3.2.0 -================================= +GitHub statistics for 3.2.0 (Mar 04, 2020) +========================================== -GitHub stats for 2019/05/18 - 2020/03/03 (tag: v3.1.0) +GitHub statistics for 2019/05/18 (tag: v3.1.0) - 2020/03/04 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.2.1.rst b/doc/users/prev_whats_new/github_stats_3.2.1.rst index ec95cf4a7887..4f865dbb5429 100644 --- a/doc/users/prev_whats_new/github_stats_3.2.1.rst +++ b/doc/users/prev_whats_new/github_stats_3.2.1.rst @@ -1,9 +1,9 @@ .. _github-stats-3-2-1: -GitHub Stats for Matplotlib 3.2.1 -================================= +GitHub statistics for 3.2.1 (Mar 18, 2020) +========================================== -GitHub stats for 2020/03/03 - 2020/03/17 (tag: v3.2.0) +GitHub statistics for 2020/03/03 (tag: v3.2.0) - 2020/03/18 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.2.2.rst b/doc/users/prev_whats_new/github_stats_3.2.2.rst index 8cd4e4eef1d7..9026d518ce4d 100644 --- a/doc/users/prev_whats_new/github_stats_3.2.2.rst +++ b/doc/users/prev_whats_new/github_stats_3.2.2.rst @@ -1,9 +1,9 @@ .. _github-stats-3-2-2: -GitHub Stats for Matplotlib 3.2.2 -================================= +GitHub statistics for 3.2.2 (Jun 17, 2020) +========================================== -GitHub stats for 2020/03/18 - 2020/06/17 (tag: v3.2.1) +GitHub statistics for 2020/03/18 (tag: v3.2.1) - 2020/06/17 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.3.0.rst b/doc/users/prev_whats_new/github_stats_3.3.0.rst index c57d4cda8cba..c2e6cd132c2d 100644 --- a/doc/users/prev_whats_new/github_stats_3.3.0.rst +++ b/doc/users/prev_whats_new/github_stats_3.3.0.rst @@ -1,9 +1,9 @@ .. _github-stats-3-3-0: -GitHub Stats for Matplotlib 3.3.0 -================================= +GitHub statistics for 3.3.0 (Jul 16, 2020) +========================================== -GitHub stats for 2020/03/03 - 2020/07/16 (tag: v3.2.0) +GitHub statistics for 2020/03/03 (tag: v3.2.0) - 2020/07/16 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.3.1.rst b/doc/users/prev_whats_new/github_stats_3.3.1.rst index ed6638638959..49212587a17a 100644 --- a/doc/users/prev_whats_new/github_stats_3.3.1.rst +++ b/doc/users/prev_whats_new/github_stats_3.3.1.rst @@ -1,9 +1,9 @@ .. _github-stats-3-3-1: -GitHub Stats for Matplotlib 3.3.1 -================================= +GitHub statistics for 3.3.1 (Aug 13, 2020) +========================================== -GitHub stats for 2020/07/16 - 2020/08/13 (tag: v3.3.0) +GitHub statistics for 2020/07/16 (tag: v3.3.0) - 2020/08/13 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.3.2.rst b/doc/users/prev_whats_new/github_stats_3.3.2.rst index 8f9bb9a6eceb..0bc03cbc83ee 100644 --- a/doc/users/prev_whats_new/github_stats_3.3.2.rst +++ b/doc/users/prev_whats_new/github_stats_3.3.2.rst @@ -1,9 +1,9 @@ .. _github-stats-3-3-2: -GitHub Stats for Matplotlib 3.3.2 -================================= +GitHub statistics for 3.3.2 (Sep 15, 2020) +========================================== -GitHub stats for 2020/08/14 - 2020/09/15 (tag: v3.3.1) +GitHub statistics for 2020/08/14 - 2020/09/15 (tag: v3.3.1) These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.3.3.rst b/doc/users/prev_whats_new/github_stats_3.3.3.rst index d7ba592d7339..5475a5209eed 100644 --- a/doc/users/prev_whats_new/github_stats_3.3.3.rst +++ b/doc/users/prev_whats_new/github_stats_3.3.3.rst @@ -1,9 +1,9 @@ .. _github-stats-3-3-3: -GitHub Stats for Matplotlib 3.3.3 -================================= +GitHub statistics for 3.3.3 (Nov 11, 2020) +========================================== -GitHub stats for 2020/09/15 - 2020/11/11 (tag: v3.3.2) +GitHub statistics for 2020/09/15 (tag: v3.3.2) - 2020/11/11 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.3.4.rst b/doc/users/prev_whats_new/github_stats_3.3.4.rst index e61309836034..afff8b384b8e 100644 --- a/doc/users/prev_whats_new/github_stats_3.3.4.rst +++ b/doc/users/prev_whats_new/github_stats_3.3.4.rst @@ -1,9 +1,9 @@ .. _github-stats-3-3-4: -GitHub Stats for Matplotlib 3.3.4 -================================= +GitHub statistics for 3.3.4 (Jan 28, 2021) +========================================== -GitHub stats for 2020/11/12 - 2021/01/28 (tag: v3.3.3) +GitHub statistics for 2020/11/12 (tag: v3.3.3) - 2021/01/28 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.4.0.rst b/doc/users/prev_whats_new/github_stats_3.4.0.rst index eeb53d647957..fe49e673a660 100644 --- a/doc/users/prev_whats_new/github_stats_3.4.0.rst +++ b/doc/users/prev_whats_new/github_stats_3.4.0.rst @@ -1,9 +1,9 @@ .. _github-stats-3-4-0: -GitHub Stats for Matplotlib 3.4.0 -================================= +GitHub statistics for 3.4.0 (Mar 26, 2021) +========================================== -GitHub stats for 2020/07/16 - 2021/03/25 (tag: v3.3.0) +GitHub statistics for 2020/07/16 (tag: v3.3.0) - 2021/03/26 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.4.1.rst b/doc/users/prev_whats_new/github_stats_3.4.1.rst index 220ed67a489a..0819a6850a3e 100644 --- a/doc/users/prev_whats_new/github_stats_3.4.1.rst +++ b/doc/users/prev_whats_new/github_stats_3.4.1.rst @@ -1,9 +1,9 @@ .. _github-stats-3-4-1: -GitHub Stats for Matplotlib 3.4.1 -================================= +GitHub statistics for 3.4.1 (Mar 31, 2021) +========================================== -GitHub stats for 2021/03/26 - 2021/03/31 (tag: v3.4.0) +GitHub statistics for 2021/03/26 (tag: v3.4.0) - 2021/03/31 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/github_stats_3.4.2.rst b/doc/users/prev_whats_new/github_stats_3.4.2.rst index badd0a589785..22b4797c2fc2 100644 --- a/doc/users/prev_whats_new/github_stats_3.4.2.rst +++ b/doc/users/prev_whats_new/github_stats_3.4.2.rst @@ -1,9 +1,9 @@ .. _github-stats-3-4-2: -GitHub Stats for Matplotlib 3.4.2 -================================= +GitHub statistics for 3.4.2 (May 08, 2021) +========================================== -GitHub stats for 2021/03/31 - 2021/05/07 (tag: v3.4.1) +GitHub statistics for 2021/03/31 (tag: v3.4.1) - 2021/05/08 These lists are automatically generated, and may be incomplete or contain duplicates. diff --git a/doc/users/prev_whats_new/whats_new_0.98.4.rst b/doc/users/prev_whats_new/whats_new_0.98.4.rst index 8e4635c175dd..88d376cf79bf 100644 --- a/doc/users/prev_whats_new/whats_new_0.98.4.rst +++ b/doc/users/prev_whats_new/whats_new_0.98.4.rst @@ -1,7 +1,7 @@ .. _whats-new-0-98-4: -New in matplotlib 0.98.4 -======================== +What's new in Matplotlib 0.98.4 +=============================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_0.99.rst b/doc/users/prev_whats_new/whats_new_0.99.rst index fc8b581f605a..c2d761a25031 100644 --- a/doc/users/prev_whats_new/whats_new_0.99.rst +++ b/doc/users/prev_whats_new/whats_new_0.99.rst @@ -1,7 +1,7 @@ .. _whats-new-0-99: -New in matplotlib 0.99 -====================== +What's new in Matplotlib 0.99 (Aug 29, 2009) +============================================ .. contents:: Table of Contents :depth: 2 @@ -112,7 +112,7 @@ that denote the data limits -- in various arbitrary locations. No longer are your axis lines constrained to be a simple rectangle around the figure -- you can turn on or off left, bottom, right and top, as well as "detach" the spine to offset it away from the data. See -:doc:`/gallery/ticks_and_spines/spine_placement_demo` and +:doc:`/gallery/spines/spine_placement_demo` and :class:`matplotlib.spines.Spine`. .. plot:: diff --git a/doc/users/prev_whats_new/whats_new_1.0.rst b/doc/users/prev_whats_new/whats_new_1.0.rst index ac54539c6da9..f80b5ce27972 100644 --- a/doc/users/prev_whats_new/whats_new_1.0.rst +++ b/doc/users/prev_whats_new/whats_new_1.0.rst @@ -1,7 +1,7 @@ .. _whats-new-1-0: -New in matplotlib 1.0 -===================== +What's new in Matplotlib 1.0 (Jul 06, 2010) +=========================================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_1.1.rst b/doc/users/prev_whats_new/whats_new_1.1.rst index 0ff0d46b0843..9b19872a6031 100644 --- a/doc/users/prev_whats_new/whats_new_1.1.rst +++ b/doc/users/prev_whats_new/whats_new_1.1.rst @@ -1,7 +1,7 @@ .. _whats-new-1-1: -New in matplotlib 1.1 -===================== +What's new in Matplotlib 1.1 (Nov 02, 2011) +=========================================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_1.2.2.rst b/doc/users/prev_whats_new/whats_new_1.2.2.rst index 51c43403d22c..ab81018925cd 100644 --- a/doc/users/prev_whats_new/whats_new_1.2.2.rst +++ b/doc/users/prev_whats_new/whats_new_1.2.2.rst @@ -1,7 +1,7 @@ .. _whats-new-1-2-2: -New in matplotlib 1.2.2 -======================= +What's new in Matplotlib 1.2.2 +============================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_1.2.rst b/doc/users/prev_whats_new/whats_new_1.2.rst index c6483584c83c..4169e47bd766 100644 --- a/doc/users/prev_whats_new/whats_new_1.2.rst +++ b/doc/users/prev_whats_new/whats_new_1.2.rst @@ -1,8 +1,8 @@ .. _whats-new-1-2: -New in matplotlib 1.2 -===================== +What's new in Matplotlib 1.2 (Nov 9, 2012) +========================================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_1.3.rst b/doc/users/prev_whats_new/whats_new_1.3.rst index 0107bc7efb65..d10fc738e118 100644 --- a/doc/users/prev_whats_new/whats_new_1.3.rst +++ b/doc/users/prev_whats_new/whats_new_1.3.rst @@ -1,7 +1,7 @@ .. _whats-new-1-3: -New in matplotlib 1.3 -===================== +What's new in Matplotlib 1.3 (Aug 01, 2013) +=========================================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_1.4.rst b/doc/users/prev_whats_new/whats_new_1.4.rst index 2d14709b8185..a58f3348ff68 100644 --- a/doc/users/prev_whats_new/whats_new_1.4.rst +++ b/doc/users/prev_whats_new/whats_new_1.4.rst @@ -1,8 +1,8 @@ .. _whats-new-1-4: -New in matplotlib 1.4 -===================== +What's new in Matplotlib 1.4 (Aug 25, 2014) +=========================================== Thomas A. Caswell served as the release manager for the 1.4 release. diff --git a/doc/users/prev_whats_new/whats_new_1.5.rst b/doc/users/prev_whats_new/whats_new_1.5.rst index 125e87c512d0..3eb017851168 100644 --- a/doc/users/prev_whats_new/whats_new_1.5.rst +++ b/doc/users/prev_whats_new/whats_new_1.5.rst @@ -1,7 +1,7 @@ .. _whats-new-1-5: -New in matplotlib 1.5 -===================== +What's new in Matplotlib 1.5 (Oct 29, 2015) +=========================================== .. contents:: Table of Contents :depth: 2 diff --git a/doc/users/prev_whats_new/whats_new_2.0.0.rst b/doc/users/prev_whats_new/whats_new_2.0.0.rst index 8d9e7e72c125..94da59cd1b88 100644 --- a/doc/users/prev_whats_new/whats_new_2.0.0.rst +++ b/doc/users/prev_whats_new/whats_new_2.0.0.rst @@ -1,11 +1,11 @@ .. _whats-new-2-0-0: -New in matplotlib 2.0 -===================== +What's new in Matplotlib 2.0 (Jan 17, 2017) +=========================================== .. note:: - matplotlib 2.0 supports Python 2.7, and 3.4+ + Matplotlib 2.0 supports Python 2.7, and 3.4+ diff --git a/doc/users/prev_whats_new/whats_new_2.1.0.rst b/doc/users/prev_whats_new/whats_new_2.1.0.rst index 83d6091efe6d..a66e2e10f3a2 100644 --- a/doc/users/prev_whats_new/whats_new_2.1.0.rst +++ b/doc/users/prev_whats_new/whats_new_2.1.0.rst @@ -1,7 +1,7 @@ .. _whats-new-2-1-0: -New in Matplotlib 2.1.0 -======================= +What's new in Matplotlib 2.1.0 (Oct 7, 2017) +============================================ Documentation +++++++++++++ diff --git a/doc/users/prev_whats_new/whats_new_2.2.rst b/doc/users/prev_whats_new/whats_new_2.2.rst index 05affccc7a6f..3dbe6482fd87 100644 --- a/doc/users/prev_whats_new/whats_new_2.2.rst +++ b/doc/users/prev_whats_new/whats_new_2.2.rst @@ -1,7 +1,7 @@ .. _whats-new-2-2-0: -New in Matplotlib 2.2 -===================== +What's new in Matplotlib 2.2 (Mar 06, 2018) +=========================================== Constrained Layout Manager -------------------------- diff --git a/doc/users/prev_whats_new/whats_new_3.0.rst b/doc/users/prev_whats_new/whats_new_3.0.rst index 8aaf4a2d1770..99de2caf9309 100644 --- a/doc/users/prev_whats_new/whats_new_3.0.rst +++ b/doc/users/prev_whats_new/whats_new_3.0.rst @@ -1,7 +1,7 @@ .. _whats-new-3-0-0: -New in Matplotlib 3.0 -===================== +What's new in Matplotlib 3.0 (Sep 18, 2018) +=========================================== Improved default backend selection ---------------------------------- diff --git a/doc/users/prev_whats_new/whats_new_3.1.0.rst b/doc/users/prev_whats_new/whats_new_3.1.0.rst index 9152a0dadd98..8821f8e59257 100644 --- a/doc/users/prev_whats_new/whats_new_3.1.0.rst +++ b/doc/users/prev_whats_new/whats_new_3.1.0.rst @@ -1,6 +1,7 @@ +.. _whats-new-3-1-0: -What's new in Matplotlib 3.1 -============================ +What's new in Matplotlib 3.1 (May 18, 2019) +=========================================== For a list of all of the issues and pull requests since the last revision, see the :ref:`github-stats`. diff --git a/doc/users/prev_whats_new/whats_new_3.2.0.rst b/doc/users/prev_whats_new/whats_new_3.2.0.rst index efa099d01a23..12d7fab3af90 100644 --- a/doc/users/prev_whats_new/whats_new_3.2.0.rst +++ b/doc/users/prev_whats_new/whats_new_3.2.0.rst @@ -1,6 +1,7 @@ +.. _whats-new-3-2-0: -What's new in Matplotlib 3.2 -============================ +What's new in Matplotlib 3.2 (Mar 04, 2020) +=========================================== For a list of all of the issues and pull requests since the last revision, see the :ref:`github-stats`. diff --git a/doc/users/prev_whats_new/whats_new_3.3.0.rst b/doc/users/prev_whats_new/whats_new_3.3.0.rst index 18c22e2cb3cb..f9c9fdcd3713 100644 --- a/doc/users/prev_whats_new/whats_new_3.3.0.rst +++ b/doc/users/prev_whats_new/whats_new_3.3.0.rst @@ -1,6 +1,8 @@ -============================== -What's new in Matplotlib 3.3.0 -============================== +.. _whats-new-3-3-0: + +============================================= +What's new in Matplotlib 3.3.0 (Jul 16, 2020) +============================================= For a list of all of the issues and pull requests since the last revision, see the :ref:`github-stats`. diff --git a/doc/users/prev_whats_new/whats_new_3.4.0.rst b/doc/users/prev_whats_new/whats_new_3.4.0.rst index cb8220bb5f0b..3c11359868dc 100644 --- a/doc/users/prev_whats_new/whats_new_3.4.0.rst +++ b/doc/users/prev_whats_new/whats_new_3.4.0.rst @@ -1,6 +1,8 @@ -============================== -What's new in Matplotlib 3.4.0 -============================== +.. _whats-new-3-4-0: + +============================================= +What's new in Matplotlib 3.4.0 (Mar 26, 2021) +============================================= For a list of all of the issues and pull requests since the last revision, see the :ref:`github-stats`. diff --git a/doc/users/release_notes.rst b/doc/users/release_notes.rst index 440beab397b7..d8458e5ba1c2 100644 --- a/doc/users/release_notes.rst +++ b/doc/users/release_notes.rst @@ -9,8 +9,8 @@ Release notes .. include from another document so that it's easy to exclude this for releases .. include:: release_notes_next.rst -3.4 -=== +Version 3.4 +=========== .. toctree:: :maxdepth: 1 @@ -20,8 +20,8 @@ Release notes prev_whats_new/github_stats_3.4.1.rst prev_whats_new/github_stats_3.4.0.rst -3.3 -=== +Version 3.3 +=========== .. toctree:: :maxdepth: 1 @@ -34,8 +34,8 @@ Release notes prev_whats_new/github_stats_3.3.1.rst prev_whats_new/github_stats_3.3.0.rst -3.2 -=== +Version 3.2 +=========== .. toctree:: :maxdepth: 1 @@ -45,38 +45,42 @@ Release notes prev_whats_new/github_stats_3.2.1.rst prev_whats_new/github_stats_3.2.0.rst -3.1 -=== +Version 3.1 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_3.1.0.rst ../api/prev_api_changes/api_changes_3.1.1.rst ../api/prev_api_changes/api_changes_3.1.0.rst + prev_whats_new/github_stats_3.1.3.rst prev_whats_new/github_stats_3.1.2.rst prev_whats_new/github_stats_3.1.1.rst prev_whats_new/github_stats_3.1.0.rst -3.0 -=== +Version 3.0 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_3.0.rst ../api/prev_api_changes/api_changes_3.0.1.rst ../api/prev_api_changes/api_changes_3.0.0.rst + prev_whats_new/github_stats_3.0.3.rst prev_whats_new/github_stats_3.0.2.rst + prev_whats_new/github_stats_3.0.1.rst + prev_whats_new/github_stats_3.0.0.rst -2.2 -=== +Version 2.2 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_2.2.rst ../api/prev_api_changes/api_changes_2.2.0.rst -2.1 -=== +Version 2.1 +=========== .. toctree:: :maxdepth: 1 @@ -85,8 +89,8 @@ Release notes ../api/prev_api_changes/api_changes_2.1.1.rst ../api/prev_api_changes/api_changes_2.1.0.rst -2.0 -=== +Version 2.0 +=========== .. toctree:: :maxdepth: 1 @@ -94,34 +98,34 @@ Release notes ../api/prev_api_changes/api_changes_2.0.1.rst ../api/prev_api_changes/api_changes_2.0.0.rst -1.5 -=== +Version 1.5 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_1.5.rst ../api/prev_api_changes/api_changes_1.5.3.rst ../api/prev_api_changes/api_changes_1.5.2.rst + ../api/prev_api_changes/api_changes_1.5.0.rst -1.4 -=== +Version 1.4 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_1.4.rst ../api/prev_api_changes/api_changes_1.4.x.rst - ../api/prev_api_changes/api_changes_1.5.0.rst -1.3 -=== +Version 1.3 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_1.3.rst ../api/prev_api_changes/api_changes_1.3.x.rst -1.2 -=== +Version 1.2 +=========== .. toctree:: :maxdepth: 1 @@ -129,23 +133,23 @@ Release notes prev_whats_new/whats_new_1.2.rst ../api/prev_api_changes/api_changes_1.2.x.rst -1.1 -=== +Version 1.1 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_1.1.rst ../api/prev_api_changes/api_changes_1.1.x.rst -1.0 -=== +Version 1.0 +=========== .. toctree:: :maxdepth: 1 prev_whats_new/whats_new_1.0.rst -0.x -=== +Version 0.x +=========== .. toctree:: :maxdepth: 1 diff --git a/doc/users/release_notes_next.rst b/doc/users/release_notes_next.rst index f4122aaf96c7..b5f36efeb1ad 100644 --- a/doc/users/release_notes_next.rst +++ b/doc/users/release_notes_next.rst @@ -1,5 +1,5 @@ -Next -==== +Next Version +============ .. toctree:: :maxdepth: 1 diff --git a/examples/axes_grid1/inset_locator_demo.py b/examples/axes_grid1/inset_locator_demo.py index 16e3cab5f964..974783c04309 100644 --- a/examples/axes_grid1/inset_locator_demo.py +++ b/examples/axes_grid1/inset_locator_demo.py @@ -69,7 +69,7 @@ bbox_transform=ax.transAxes, loc=3) # For visualization purposes we mark the bounding box by a rectangle -ax.add_patch(plt.Rectangle((.2, .4), .6, .5, ls="--", ec="c", fc="None", +ax.add_patch(plt.Rectangle((.2, .4), .6, .5, ls="--", ec="c", fc="none", transform=ax.transAxes)) # We set the axis limits to something other than the default, in order to not @@ -89,9 +89,9 @@ bbox_transform=ax3.transAxes) # For visualization purposes we mark the bounding box by a rectangle -ax2.add_patch(plt.Rectangle((0, 0), 1, 1, ls="--", lw=2, ec="c", fc="None")) +ax2.add_patch(plt.Rectangle((0, 0), 1, 1, ls="--", lw=2, ec="c", fc="none")) ax3.add_patch(plt.Rectangle((.7, .5), .3, .5, ls="--", lw=2, - ec="c", fc="None")) + ec="c", fc="none")) # Turn ticklabels off for axi in [axins2, axins3, ax2, ax3]: diff --git a/examples/axisartist/demo_axisline_style.py b/examples/axisartist/demo_axisline_style.py index 1427a90952a1..c7270941dadf 100644 --- a/examples/axisartist/demo_axisline_style.py +++ b/examples/axisartist/demo_axisline_style.py @@ -7,8 +7,8 @@ Note: The `mpl_toolkits.axisartist` axes classes may be confusing for new users. If the only aim is to obtain arrow heads at the ends of the axes, -rather check out the -:doc:`/gallery/ticks_and_spines/centered_spines_with_arrows` example. +rather check out the :doc:`/gallery/spines/centered_spines_with_arrows` +example. """ from mpl_toolkits.axisartist.axislines import AxesZero diff --git a/examples/axisartist/demo_parasite_axes.py b/examples/axisartist/demo_parasite_axes.py index ef7d5ca5268d..0b7858f645f3 100644 --- a/examples/axisartist/demo_parasite_axes.py +++ b/examples/axisartist/demo_parasite_axes.py @@ -10,7 +10,7 @@ `mpl_toolkits.axes_grid1.parasite_axes.ParasiteAxes`. An alternative approach using standard Matplotlib subplots is shown in the -:doc:`/gallery/ticks_and_spines/multiple_yaxis_with_spines` example. +:doc:`/gallery/spines/multiple_yaxis_with_spines` example. An alternative approach using :mod:`mpl_toolkits.axes_grid1` and :mod:`mpl_toolkits.axisartist` is found in the diff --git a/examples/axisartist/demo_parasite_axes2.py b/examples/axisartist/demo_parasite_axes2.py index 3c23e37b7ae7..651cdd032ae5 100644 --- a/examples/axisartist/demo_parasite_axes2.py +++ b/examples/axisartist/demo_parasite_axes2.py @@ -19,7 +19,7 @@ `~.mpl_toolkits.axes_grid1.parasite_axes.ParasiteAxes` is the :doc:`/gallery/axisartist/demo_parasite_axes` example. An alternative approach using the usual Matplotlib subplots is shown in -the :doc:`/gallery/ticks_and_spines/multiple_yaxis_with_spines` example. +the :doc:`/gallery/spines/multiple_yaxis_with_spines` example. """ from mpl_toolkits.axes_grid1 import host_subplot diff --git a/examples/axisartist/simple_axisartist1.py b/examples/axisartist/simple_axisartist1.py index dacbfd0721f8..95d710cbe0b1 100644 --- a/examples/axisartist/simple_axisartist1.py +++ b/examples/axisartist/simple_axisartist1.py @@ -6,9 +6,9 @@ This example showcases the use of :mod:`.axisartist` to draw spines at custom positions (here, at ``y = 0``). -Note, however, that it is simpler to achieve this effect -using standard `.Spine` methods, as demonstrated in -:doc:`/gallery/ticks_and_spines/centered_spines_with_arrows`. +Note, however, that it is simpler to achieve this effect using standard +`.Spine` methods, as demonstrated in +:doc:`/gallery/spines/centered_spines_with_arrows`. .. redirect-from:: /gallery/axisartist/simple_axisline2 """ diff --git a/examples/lines_bars_and_markers/marker_reference.py b/examples/lines_bars_and_markers/marker_reference.py index 450906637c01..98af2519124c 100644 --- a/examples/lines_bars_and_markers/marker_reference.py +++ b/examples/lines_bars_and_markers/marker_reference.py @@ -117,7 +117,7 @@ def split_list(a_list): fig.suptitle('Mathtext markers', fontsize=14) fig.subplots_adjust(left=0.4) -marker_style.update(markeredgecolor="None", markersize=15) +marker_style.update(markeredgecolor="none", markersize=15) markers = ["$1$", r"$\frac{1}{2}$", "$f$", "$\u266B$", r"$\mathcal{A}$"] for y, marker in enumerate(markers): diff --git a/examples/shapes_and_collections/compound_path.py b/examples/shapes_and_collections/compound_path.py index 76a11703ab9b..d721eaf1c392 100644 --- a/examples/shapes_and_collections/compound_path.py +++ b/examples/shapes_and_collections/compound_path.py @@ -23,7 +23,7 @@ path = Path(vertices, codes) -pathpatch = PathPatch(path, facecolor='None', edgecolor='green') +pathpatch = PathPatch(path, facecolor='none', edgecolor='green') fig, ax = plt.subplots() ax.add_patch(pathpatch) diff --git a/examples/spines/README.txt b/examples/spines/README.txt new file mode 100644 index 000000000000..40bc3952eacd --- /dev/null +++ b/examples/spines/README.txt @@ -0,0 +1,4 @@ +.. _spines_examples: + +Spines +====== diff --git a/examples/ticks_and_spines/centered_spines_with_arrows.py b/examples/spines/centered_spines_with_arrows.py similarity index 100% rename from examples/ticks_and_spines/centered_spines_with_arrows.py rename to examples/spines/centered_spines_with_arrows.py diff --git a/examples/ticks_and_spines/multiple_yaxis_with_spines.py b/examples/spines/multiple_yaxis_with_spines.py similarity index 100% rename from examples/ticks_and_spines/multiple_yaxis_with_spines.py rename to examples/spines/multiple_yaxis_with_spines.py diff --git a/examples/ticks_and_spines/spine_placement_demo.py b/examples/spines/spine_placement_demo.py similarity index 97% rename from examples/ticks_and_spines/spine_placement_demo.py rename to examples/spines/spine_placement_demo.py index e567d8160d9c..d433236657f9 100644 --- a/examples/ticks_and_spines/spine_placement_demo.py +++ b/examples/spines/spine_placement_demo.py @@ -6,7 +6,7 @@ Adjusting the location and appearance of axis spines. Note: If you want to obtain arrow heads at the ends of the axes, also check -out the :doc:`/gallery/ticks_and_spines/centered_spines_with_arrows` example. +out the :doc:`/gallery/spines/centered_spines_with_arrows` example. """ import numpy as np import matplotlib.pyplot as plt diff --git a/examples/ticks_and_spines/spines.py b/examples/spines/spines.py similarity index 100% rename from examples/ticks_and_spines/spines.py rename to examples/spines/spines.py diff --git a/examples/ticks_and_spines/spines_bounds.py b/examples/spines/spines_bounds.py similarity index 100% rename from examples/ticks_and_spines/spines_bounds.py rename to examples/spines/spines_bounds.py diff --git a/examples/ticks_and_spines/spines_dropped.py b/examples/spines/spines_dropped.py similarity index 100% rename from examples/ticks_and_spines/spines_dropped.py rename to examples/spines/spines_dropped.py diff --git a/examples/statistics/errorbars_and_boxes.py b/examples/statistics/errorbars_and_boxes.py index ac0d7cb6cd66..a8bdd7a46384 100644 --- a/examples/statistics/errorbars_and_boxes.py +++ b/examples/statistics/errorbars_and_boxes.py @@ -40,7 +40,7 @@ def make_error_boxes(ax, xdata, ydata, xerror, yerror, facecolor='r', - edgecolor='None', alpha=0.5): + edgecolor='none', alpha=0.5): # Loop over data points; create box from errors at each point errorboxes = [Rectangle((x - xe[0], y - ye[0]), xe.sum(), ye.sum()) @@ -55,7 +55,7 @@ def make_error_boxes(ax, xdata, ydata, xerror, yerror, facecolor='r', # Plot errorbars artists = ax.errorbar(xdata, ydata, xerr=xerror, yerr=yerror, - fmt='None', ecolor='k') + fmt='none', ecolor='k') return artists diff --git a/examples/text_labels_and_annotations/date.py b/examples/text_labels_and_annotations/date.py index c37a5fb61e31..f1701ad9bc3b 100644 --- a/examples/text_labels_and_annotations/date.py +++ b/examples/text_labels_and_annotations/date.py @@ -16,11 +16,10 @@ An alternative formatter is the `~.dates.ConciseDateFormatter`, used in the second ``Axes`` below (see -:doc:`/gallery/ticks_and_spines/date_concise_formatter`), which often -removes the need to rotate the tick labels. The last ``Axes`` -formats the dates manually, using `~.dates.DateFormatter` to -format the dates using the format strings documented at -`datetime.date.strftime`. +:doc:`/gallery/ticks/date_concise_formatter`), which often removes the need to +rotate the tick labels. The last ``Axes`` formats the dates manually, using +`~.dates.DateFormatter` to format the dates using the format strings documented +at `datetime.date.strftime`. """ import matplotlib.pyplot as plt diff --git a/examples/ticks/README.txt b/examples/ticks/README.txt new file mode 100644 index 000000000000..82441a0d9ee7 --- /dev/null +++ b/examples/ticks/README.txt @@ -0,0 +1,4 @@ +.. _ticks_examples: + +Ticks +===== diff --git a/examples/ticks_and_spines/auto_ticks.py b/examples/ticks/auto_ticks.py similarity index 100% rename from examples/ticks_and_spines/auto_ticks.py rename to examples/ticks/auto_ticks.py diff --git a/examples/ticks_and_spines/centered_ticklabels.py b/examples/ticks/centered_ticklabels.py similarity index 100% rename from examples/ticks_and_spines/centered_ticklabels.py rename to examples/ticks/centered_ticklabels.py diff --git a/examples/ticks_and_spines/colorbar_tick_labelling_demo.py b/examples/ticks/colorbar_tick_labelling_demo.py similarity index 100% rename from examples/ticks_and_spines/colorbar_tick_labelling_demo.py rename to examples/ticks/colorbar_tick_labelling_demo.py diff --git a/examples/ticks_and_spines/custom_ticker1.py b/examples/ticks/custom_ticker1.py similarity index 56% rename from examples/ticks_and_spines/custom_ticker1.py rename to examples/ticks/custom_ticker1.py index ee088fa4d5af..f3e0ec4ef3bf 100644 --- a/examples/ticks_and_spines/custom_ticker1.py +++ b/examples/ticks/custom_ticker1.py @@ -1,28 +1,27 @@ """ -============== -Custom Ticker1 -============== +============= +Custom Ticker +============= -The new ticker code was designed to explicitly support user customized -ticking. The documentation of :mod:`matplotlib.ticker` details this -process. That code defines a lot of preset tickers but was primarily -designed to be user extensible. +The :mod:`matplotlib.ticker` module defines many preset tickers, but was +primarily designed for extensibility, i.e., to support user customized ticking. -In this example a user defined function is used to format the ticks in +In this example, a user defined function is used to format the ticks in millions of dollars on the y axis. """ -import matplotlib.pyplot as plt -money = [1.5e5, 2.5e6, 5.5e6, 2.0e7] +import matplotlib.pyplot as plt def millions(x, pos): """The two arguments are the value and tick position.""" return '${:1.1f}M'.format(x*1e-6) + fig, ax = plt.subplots() -# Use automatic FuncFormatter creation +# set_major_formatter internally creates a FuncFormatter from the callable. ax.yaxis.set_major_formatter(millions) +money = [1.5e5, 2.5e6, 5.5e6, 2.0e7] ax.bar(['Bill', 'Fred', 'Mary', 'Sue'], money) plt.show() @@ -33,6 +32,4 @@ def millions(x, pos): # The use of the following functions, methods, classes and modules is shown # in this example: # -# - `matplotlib.pyplot.subplots` # - `matplotlib.axis.Axis.set_major_formatter` -# - `matplotlib.ticker.FuncFormatter` diff --git a/examples/ticks_and_spines/date_concise_formatter.py b/examples/ticks/date_concise_formatter.py similarity index 100% rename from examples/ticks_and_spines/date_concise_formatter.py rename to examples/ticks/date_concise_formatter.py diff --git a/examples/ticks_and_spines/date_demo_convert.py b/examples/ticks/date_demo_convert.py similarity index 100% rename from examples/ticks_and_spines/date_demo_convert.py rename to examples/ticks/date_demo_convert.py diff --git a/examples/ticks_and_spines/date_demo_rrule.py b/examples/ticks/date_demo_rrule.py similarity index 100% rename from examples/ticks_and_spines/date_demo_rrule.py rename to examples/ticks/date_demo_rrule.py diff --git a/examples/ticks_and_spines/date_index_formatter2.py b/examples/ticks/date_index_formatter2.py similarity index 100% rename from examples/ticks_and_spines/date_index_formatter2.py rename to examples/ticks/date_index_formatter2.py diff --git a/examples/ticks_and_spines/date_precision_and_epochs.py b/examples/ticks/date_precision_and_epochs.py similarity index 100% rename from examples/ticks_and_spines/date_precision_and_epochs.py rename to examples/ticks/date_precision_and_epochs.py diff --git a/examples/ticks_and_spines/major_minor_demo.py b/examples/ticks/major_minor_demo.py similarity index 100% rename from examples/ticks_and_spines/major_minor_demo.py rename to examples/ticks/major_minor_demo.py diff --git a/examples/ticks_and_spines/scalarformatter.py b/examples/ticks/scalarformatter.py similarity index 100% rename from examples/ticks_and_spines/scalarformatter.py rename to examples/ticks/scalarformatter.py diff --git a/examples/ticks_and_spines/tick-formatters.py b/examples/ticks/tick-formatters.py similarity index 100% rename from examples/ticks_and_spines/tick-formatters.py rename to examples/ticks/tick-formatters.py diff --git a/examples/ticks_and_spines/tick-locators.py b/examples/ticks/tick-locators.py similarity index 100% rename from examples/ticks_and_spines/tick-locators.py rename to examples/ticks/tick-locators.py diff --git a/examples/ticks_and_spines/tick_label_right.py b/examples/ticks/tick_label_right.py similarity index 100% rename from examples/ticks_and_spines/tick_label_right.py rename to examples/ticks/tick_label_right.py diff --git a/examples/ticks_and_spines/tick_labels_from_values.py b/examples/ticks/tick_labels_from_values.py similarity index 100% rename from examples/ticks_and_spines/tick_labels_from_values.py rename to examples/ticks/tick_labels_from_values.py diff --git a/examples/ticks_and_spines/tick_xlabel_top.py b/examples/ticks/tick_xlabel_top.py similarity index 100% rename from examples/ticks_and_spines/tick_xlabel_top.py rename to examples/ticks/tick_xlabel_top.py diff --git a/examples/ticks_and_spines/ticklabels_rotation.py b/examples/ticks/ticklabels_rotation.py similarity index 100% rename from examples/ticks_and_spines/ticklabels_rotation.py rename to examples/ticks/ticklabels_rotation.py diff --git a/examples/ticks_and_spines/README.txt b/examples/ticks_and_spines/README.txt deleted file mode 100644 index e7869c5a08d1..000000000000 --- a/examples/ticks_and_spines/README.txt +++ /dev/null @@ -1,4 +0,0 @@ -.. _ticks_and_spines_examples: - -Ticks and spines -================ diff --git a/examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py b/examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py index 2f0833f09511..95d8df21a3a2 100644 --- a/examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py +++ b/examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py @@ -20,7 +20,7 @@ win = Gtk.Window() win.connect("delete-event", Gtk.main_quit) win.set_default_size(400, 300) -win.set_title("Embedding in GTK") +win.set_title("Embedding in GTK3") fig = Figure(figsize=(5, 4), dpi=100) ax = fig.add_subplot(1, 1, 1) diff --git a/examples/user_interfaces/embedding_in_gtk3_sgskip.py b/examples/user_interfaces/embedding_in_gtk3_sgskip.py index f5872304964d..b672ba8d9ff0 100644 --- a/examples/user_interfaces/embedding_in_gtk3_sgskip.py +++ b/examples/user_interfaces/embedding_in_gtk3_sgskip.py @@ -19,7 +19,7 @@ win = Gtk.Window() win.connect("delete-event", Gtk.main_quit) win.set_default_size(400, 300) -win.set_title("Embedding in GTK") +win.set_title("Embedding in GTK3") fig = Figure(figsize=(5, 4), dpi=100) ax = fig.add_subplot() diff --git a/examples/user_interfaces/embedding_in_gtk4_panzoom_sgskip.py b/examples/user_interfaces/embedding_in_gtk4_panzoom_sgskip.py new file mode 100644 index 000000000000..685a278fc7ad --- /dev/null +++ b/examples/user_interfaces/embedding_in_gtk4_panzoom_sgskip.py @@ -0,0 +1,51 @@ +""" +=========================================== +Embedding in GTK4 with a navigation toolbar +=========================================== + +Demonstrate NavigationToolbar with GTK4 accessed via pygobject. +""" + +import gi +gi.require_version('Gtk', '4.0') +from gi.repository import Gtk + +from matplotlib.backends.backend_gtk4 import ( + NavigationToolbar2GTK4 as NavigationToolbar) +from matplotlib.backends.backend_gtk4agg import ( + FigureCanvasGTK4Agg as FigureCanvas) +from matplotlib.figure import Figure +import numpy as np + + +def on_activate(app): + win = Gtk.ApplicationWindow(application=app) + win.set_default_size(400, 300) + win.set_title("Embedding in GTK4") + + fig = Figure(figsize=(5, 4), dpi=100) + ax = fig.add_subplot(1, 1, 1) + t = np.arange(0.0, 3.0, 0.01) + s = np.sin(2*np.pi*t) + ax.plot(t, s) + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + win.set_child(vbox) + + # Add canvas to vbox + canvas = FigureCanvas(fig) # a Gtk.DrawingArea + canvas.set_hexpand(True) + canvas.set_vexpand(True) + vbox.append(canvas) + + # Create toolbar + toolbar = NavigationToolbar(canvas, win) + vbox.append(toolbar) + + win.show() + + +app = Gtk.Application( + application_id='org.matplotlib.examples.EmbeddingInGTK4PanZoom') +app.connect('activate', on_activate) +app.run(None) diff --git a/examples/user_interfaces/embedding_in_gtk4_sgskip.py b/examples/user_interfaces/embedding_in_gtk4_sgskip.py new file mode 100644 index 000000000000..c92e139de25f --- /dev/null +++ b/examples/user_interfaces/embedding_in_gtk4_sgskip.py @@ -0,0 +1,45 @@ +""" +================= +Embedding in GTK4 +================= + +Demonstrate adding a FigureCanvasGTK4Agg widget to a Gtk.ScrolledWindow using +GTK4 accessed via pygobject. +""" + +import gi +gi.require_version('Gtk', '4.0') +from gi.repository import Gtk + +from matplotlib.backends.backend_gtk4agg import ( + FigureCanvasGTK4Agg as FigureCanvas) +from matplotlib.figure import Figure +import numpy as np + + +def on_activate(app): + win = Gtk.ApplicationWindow(application=app) + win.set_default_size(400, 300) + win.set_title("Embedding in GTK4") + + fig = Figure(figsize=(5, 4), dpi=100) + ax = fig.add_subplot() + t = np.arange(0.0, 3.0, 0.01) + s = np.sin(2*np.pi*t) + ax.plot(t, s) + + # A scrolled margin goes outside the scrollbars and viewport. + sw = Gtk.ScrolledWindow(margin_top=10, margin_bottom=10, + margin_start=10, margin_end=10) + win.set_child(sw) + + canvas = FigureCanvas(fig) # a Gtk.DrawingArea + canvas.set_size_request(800, 600) + sw.set_child(canvas) + + win.show() + + +app = Gtk.Application(application_id='org.matplotlib.examples.EmbeddingInGTK4') +app.connect('activate', on_activate) +app.run(None) diff --git a/examples/user_interfaces/gtk_spreadsheet_sgskip.py b/examples/user_interfaces/gtk3_spreadsheet_sgskip.py similarity index 97% rename from examples/user_interfaces/gtk_spreadsheet_sgskip.py rename to examples/user_interfaces/gtk3_spreadsheet_sgskip.py index 1f0f6e702240..925ea33faa48 100644 --- a/examples/user_interfaces/gtk_spreadsheet_sgskip.py +++ b/examples/user_interfaces/gtk3_spreadsheet_sgskip.py @@ -1,7 +1,7 @@ """ -=============== -GTK Spreadsheet -=============== +================ +GTK3 Spreadsheet +================ Example of embedding Matplotlib in an application and interacting with a treeview to store data. Double click on an entry to update plot data. diff --git a/examples/user_interfaces/gtk4_spreadsheet_sgskip.py b/examples/user_interfaces/gtk4_spreadsheet_sgskip.py new file mode 100644 index 000000000000..047ae4cf974e --- /dev/null +++ b/examples/user_interfaces/gtk4_spreadsheet_sgskip.py @@ -0,0 +1,91 @@ +""" +================ +GTK4 Spreadsheet +================ + +Example of embedding Matplotlib in an application and interacting with a +treeview to store data. Double click on an entry to update plot data. +""" + +import gi +gi.require_version('Gtk', '4.0') +gi.require_version('Gdk', '4.0') +from gi.repository import Gtk + +from matplotlib.backends.backend_gtk4agg import FigureCanvas # or gtk4cairo. + +from numpy.random import random +from matplotlib.figure import Figure + + +class DataManager(Gtk.ApplicationWindow): + num_rows, num_cols = 20, 10 + + data = random((num_rows, num_cols)) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.set_default_size(600, 600) + + self.set_title('GtkListStore demo') + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, + spacing=8) + self.set_child(vbox) + + label = Gtk.Label(label='Double click a row to plot the data') + vbox.append(label) + + sw = Gtk.ScrolledWindow() + sw.set_has_frame(True) + sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + sw.set_hexpand(True) + sw.set_vexpand(True) + vbox.append(sw) + + model = self.create_model() + self.treeview = Gtk.TreeView(model=model) + self.treeview.connect('row-activated', self.plot_row) + sw.set_child(self.treeview) + + # Matplotlib stuff + fig = Figure(figsize=(6, 4), constrained_layout=True) + + self.canvas = FigureCanvas(fig) # a Gtk.DrawingArea + self.canvas.set_hexpand(True) + self.canvas.set_vexpand(True) + vbox.append(self.canvas) + ax = fig.add_subplot() + self.line, = ax.plot(self.data[0, :], 'go') # plot the first row + + self.add_columns() + + def plot_row(self, treeview, path, view_column): + ind, = path # get the index into data + points = self.data[ind, :] + self.line.set_ydata(points) + self.canvas.draw() + + def add_columns(self): + for i in range(self.num_cols): + column = Gtk.TreeViewColumn(str(i), Gtk.CellRendererText(), text=i) + self.treeview.append_column(column) + + def create_model(self): + types = [float] * self.num_cols + store = Gtk.ListStore(*types) + for row in self.data: + # Gtk.ListStore.append is broken in PyGObject, so insert manually. + it = store.insert(-1) + store.set(it, {i: val for i, val in enumerate(row)}) + return store + + +def on_activate(app): + manager = DataManager(application=app) + manager.show() + + +app = Gtk.Application(application_id='org.matplotlib.examples.GTK4Spreadsheet') +app.connect('activate', on_activate) +app.run() diff --git a/examples/user_interfaces/pylab_with_gtk_sgskip.py b/examples/user_interfaces/pylab_with_gtk3_sgskip.py similarity index 96% rename from examples/user_interfaces/pylab_with_gtk_sgskip.py rename to examples/user_interfaces/pylab_with_gtk3_sgskip.py index 277f7de2a9eb..4d943032df5a 100644 --- a/examples/user_interfaces/pylab_with_gtk_sgskip.py +++ b/examples/user_interfaces/pylab_with_gtk3_sgskip.py @@ -1,7 +1,7 @@ """ -=============== -pyplot with GTK -=============== +================ +pyplot with GTK3 +================ An example of how to use pyplot to manage your figure windows, but modify the GUI by accessing the underlying GTK widgets. diff --git a/examples/user_interfaces/pylab_with_gtk4_sgskip.py b/examples/user_interfaces/pylab_with_gtk4_sgskip.py new file mode 100644 index 000000000000..6e0cebcce23c --- /dev/null +++ b/examples/user_interfaces/pylab_with_gtk4_sgskip.py @@ -0,0 +1,51 @@ +""" +================ +pyplot with GTK4 +================ + +An example of how to use pyplot to manage your figure windows, but modify the +GUI by accessing the underlying GTK widgets. +""" + +import matplotlib +matplotlib.use('GTK4Agg') # or 'GTK4Cairo' +import matplotlib.pyplot as plt + +import gi +gi.require_version('Gtk', '4.0') +from gi.repository import Gtk + + +fig, ax = plt.subplots() +ax.plot([1, 2, 3], 'ro-', label='easy as 1 2 3') +ax.plot([1, 4, 9], 'gs--', label='easy as 1 2 3 squared') +ax.legend() + +manager = fig.canvas.manager +# you can access the window or vbox attributes this way +toolbar = manager.toolbar +vbox = manager.vbox + +# now let's add a button to the toolbar +button = Gtk.Button(label='Click me') +button.connect('clicked', lambda button: print('hi mom')) +button.set_tooltip_text('Click me for fun and profit') +toolbar.append(button) + +# now let's add a widget to the vbox +label = Gtk.Label() +label.set_markup('Drag mouse over axes for position') +vbox.insert_child_after(label, fig.canvas) + + +def update(event): + if event.xdata is None: + label.set_markup('Drag mouse over axes for position') + else: + label.set_markup( + f'x,y=({event.xdata}, {event.ydata})') + + +fig.canvas.mpl_connect('motion_notify_event', update) + +plt.show() diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 0361a37aed48..8a6f9f62c378 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -575,24 +575,13 @@ def gen_candidates(): # rcParams deprecated and automatically mapped to another key. # Values are tuples of (version, new_name, f_old2new, f_new2old). _deprecated_map = {} - # rcParams deprecated; some can manually be mapped to another key. # Values are tuples of (version, new_name_or_None). -_deprecated_ignore_map = { - 'mpl_toolkits.legacy_colorbar': ('3.4', None), -} - +_deprecated_ignore_map = {} # rcParams deprecated; can use None to suppress warnings; remain actually -# listed in the rcParams (not included in _all_deprecated). +# listed in the rcParams. # Values are tuples of (version,) -_deprecated_remain_as_none = { - 'animation.avconv_path': ('3.3',), - 'animation.avconv_args': ('3.3',), - 'animation.html_args': ('3.3',), -} - - -_all_deprecated = {*_deprecated_map, *_deprecated_ignore_map} +_deprecated_remain_as_none = {} @docstring.Substitution( @@ -1098,8 +1087,8 @@ def use(backend, *, force=True): backend names, which are case-insensitive: - interactive backends: - GTK3Agg, GTK3Cairo, MacOSX, nbAgg, QtAgg, QtCairo, - TkAgg, TkCairo, WebAgg, WX, WXAgg, WXCairo, Qt5Agg, Qt5Cairo + GTK3Agg, GTK3Cairo, GTK4Agg, GTK4Cairo, MacOSX, nbAgg, QtAgg, + QtCairo, TkAgg, TkCairo, WebAgg, WX, WXAgg, WXCairo, Qt5Agg, Qt5Cairo - non-interactive backends: agg, cairo, pdf, pgf, ps, svg, template diff --git a/lib/matplotlib/_api/__init__.py b/lib/matplotlib/_api/__init__.py index 43b25908832e..dfd3f6820f1c 100644 --- a/lib/matplotlib/_api/__init__.py +++ b/lib/matplotlib/_api/__init__.py @@ -277,6 +277,13 @@ def my_func(*args, **kwargs): raise +def recursive_subclasses(cls): + """Yield *cls* and direct and indirect subclasses of *cls*.""" + yield cls + for subcls in cls.__subclasses__(): + yield from recursive_subclasses(subcls) + + def warn_external(message, category=None): """ `warnings.warn` wrapper that sets *stacklevel* to "outside Matplotlib". diff --git a/lib/matplotlib/_constrained_layout.py b/lib/matplotlib/_constrained_layout.py index d360eb66164e..457e0fbf2935 100644 --- a/lib/matplotlib/_constrained_layout.py +++ b/lib/matplotlib/_constrained_layout.py @@ -17,7 +17,7 @@ import numpy as np -from matplotlib import _api +from matplotlib import _api, artist as martist import matplotlib.transforms as mtransforms import matplotlib._layoutgrid as mlayoutgrid @@ -534,17 +534,12 @@ def get_pos_and_bbox(ax, renderer): Position in figure coordinates. bbox : Bbox Tight bounding box in figure coordinates. - """ fig = ax.figure pos = ax.get_position(original=True) # pos is in panel co-ords, but we need in figure for the layout pos = pos.transformed(fig.transSubfigure - fig.transFigure) - try: - tightbbox = ax.get_tightbbox(renderer=renderer, for_layout_only=True) - except TypeError: - tightbbox = ax.get_tightbbox(renderer=renderer) - + tightbbox = martist._get_tightbbox_for_layout_only(ax, renderer) if tightbbox is None: bbox = pos else: diff --git a/lib/matplotlib/_mathtext.py b/lib/matplotlib/_mathtext.py index bbb247ec02fe..73e6163944e1 100644 --- a/lib/matplotlib/_mathtext.py +++ b/lib/matplotlib/_mathtext.py @@ -264,7 +264,7 @@ def _get_info(self, fontname, font_class, sym, fontsize, dpi, math=True): if bunch is not None: return bunch - font, num, symbol_name, fontsize, slanted = \ + font, num, glyph_name, fontsize, slanted = \ self._get_glyph(fontname, font_class, sym, fontsize, math) font.set_size(fontsize, dpi) @@ -292,7 +292,8 @@ def _get_info(self, fontname, font_class, sym, fontsize, dpi, math=True): fontsize = fontsize, postscript_name = font.postscript_name, metrics = metrics, - symbol_name = symbol_name, + glyph_name = glyph_name, + symbol_name = glyph_name, # Backcompat alias. num = num, glyph = glyph, offset = offset @@ -358,7 +359,7 @@ def __init__(self, *args, **kwargs): _slanted_symbols = set(r"\int \oint".split()) def _get_glyph(self, fontname, font_class, sym, fontsize, math=True): - symbol_name = None + glyph_name = None font = None if fontname in self.fontmap and sym in latex_to_bakoma: basename, num = latex_to_bakoma[sym] @@ -373,13 +374,13 @@ def _get_glyph(self, fontname, font_class, sym, fontsize, math=True): if font is not None: gid = font.get_char_index(num) if gid != 0: - symbol_name = font.get_glyph_name(gid) + glyph_name = font.get_glyph_name(gid) - if symbol_name is None: + if glyph_name is None: return self._stix_fallback._get_glyph( fontname, font_class, sym, fontsize, math) - return font, num, symbol_name, fontsize, slanted + return font, num, glyph_name, fontsize, slanted # The Bakoma fonts contain many pre-sized alternatives for the # delimiters. The AutoSizedChar class will use these alternatives @@ -556,8 +557,8 @@ def _get_glyph(self, fontname, font_class, sym, fontsize, math=True): glyphindex = font.get_char_index(uniindex) slanted = False - symbol_name = font.get_glyph_name(glyphindex) - return font, uniindex, symbol_name, fontsize, slanted + glyph_name = font.get_glyph_name(glyphindex) + return font, uniindex, glyph_name, fontsize, slanted def get_sized_alternatives_for_symbol(self, fontname, sym): if self.cm_fallback: @@ -854,7 +855,7 @@ def _get_info(self, fontname, font_class, sym, fontsize, dpi, math=True): if found_symbol: try: - symbol_name = font.get_name_char(glyph) + glyph_name = font.get_name_char(glyph) except KeyError: _log.warning( "No glyph in standard Postscript font {!r} for {!r}" @@ -864,7 +865,7 @@ def _get_info(self, fontname, font_class, sym, fontsize, dpi, math=True): if not found_symbol: glyph = '?' num = ord(glyph) - symbol_name = font.get_name_char(glyph) + glyph_name = font.get_name_char(glyph) offset = 0 @@ -890,7 +891,8 @@ def _get_info(self, fontname, font_class, sym, fontsize, dpi, math=True): fontsize = fontsize, postscript_name = font.get_fontname(), metrics = metrics, - symbol_name = symbol_name, + glyph_name = glyph_name, + symbol_name = glyph_name, # Backcompat alias. num = num, glyph = glyph, offset = offset diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py index 985181a574c6..f93f6f1559d0 100644 --- a/lib/matplotlib/animation.py +++ b/lib/matplotlib/animation.py @@ -888,9 +888,11 @@ def __del__(self): if not getattr(self, '_draw_was_started', True): warnings.warn( 'Animation was deleted without rendering anything. This is ' - 'most likely unintended. To prevent deletion, assign the ' - 'Animation to a variable that exists for as long as you need ' - 'the Animation.') + 'most likely not intended. To prevent deletion, assign the ' + 'Animation to a variable, e.g. `anim`, that exists until you ' + 'have outputted the Animation using `plt.show()` or ' + '`anim.save()`.' + ) def _start(self, *args): """ diff --git a/lib/matplotlib/artist.py b/lib/matplotlib/artist.py index 152c0ea33ff5..b84e3871d7e6 100644 --- a/lib/matplotlib/artist.py +++ b/lib/matplotlib/artist.py @@ -12,6 +12,7 @@ import matplotlib as mpl from . import _api, cbook +from .cm import ScalarMappable from .path import Path from .transforms import (Bbox, IdentityTransform, Transform, TransformedBbox, TransformedPatchPath, TransformedPath) @@ -690,6 +691,9 @@ def set_sketch_params(self, scale=None, length=None, randomness=None): The scale factor by which the length is shrunken or expanded (default 16.0) + The PGF backend uses this argument as an RNG seed and not as + described above. Using the same seed yields the same random shape. + .. ACCEPTS: (scale: float, length: float, randomness: float) """ if scale is None: @@ -1258,17 +1262,18 @@ def format_cursor_data(self, data): -------- get_cursor_data """ - if np.ndim(data) == 0 and getattr(self, "colorbar", None): + if np.ndim(data) == 0 and isinstance(self, ScalarMappable): # This block logically belongs to ScalarMappable, but can't be # implemented in it because most ScalarMappable subclasses inherit # from Artist first and from ScalarMappable second, so # Artist.format_cursor_data would always have precedence over # ScalarMappable.format_cursor_data. - return ( - "[" - + cbook.strip_math( - self.colorbar.formatter.format_data_short(data)).strip() - + "]") + n = self.cmap.N + # Midpoints of neighboring color intervals. + neighbors = self.norm.inverse( + (int(self.norm(data) * n) + np.array([0, 1])) / n) + delta = abs(neighbors - data).max() + return "[{:-#.{}g}]".format(data, cbook._g_sig_digits(data, delta)) else: try: data[0] @@ -1301,6 +1306,18 @@ def mouseover(self, val): ax._mouseover_set.discard(self) +def _get_tightbbox_for_layout_only(obj, *args, **kwargs): + """ + Matplotlib's `.Axes.get_tightbbox` and `.Axis.get_tightbbox` support a + *for_layout_only* kwarg; this helper tries to uses the kwarg but skips it + when encountering third-party subclasses that do not support it. + """ + try: + return obj.get_tightbbox(*args, **{**kwargs, "for_layout_only": True}) + except TypeError: + return obj.get_tightbbox(*args, **kwargs) + + class ArtistInspector: """ A helper class to inspect an `~matplotlib.artist.Artist` and return diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 257ae2fe4839..cef0f8c3c88d 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -3317,8 +3317,7 @@ def errorbar(self, x, y, yerr=None, xerr=None, %(Line2D:kwdoc)s """ kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D) - # anything that comes in as 'None', drop so the default thing - # happens down stream + # Drop anything that comes in as None to use the default instead. kwargs = {k: v for k, v in kwargs.items() if v is not None} kwargs.setdefault('zorder', 2) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 802fd3c9971c..a46613aabeb2 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -96,7 +96,7 @@ def wrapper(self, *args, **kwargs): class _TransformedBoundsLocator: """ - Axes locator for `.Axes.inset_axes` and similarly positioned axes. + Axes locator for `.Axes.inset_axes` and similarly positioned Axes. The locator is a callable object used in `.Axes.set_aspect` to compute the axes location depending on the renderer. @@ -105,7 +105,7 @@ class _TransformedBoundsLocator: def __init__(self, bounds, transform): """ *bounds* (a ``[l, b, w, h]`` rectangle) and *transform* together - specify the position of the inset axes. + specify the position of the inset Axes. """ self._bounds = bounds self._transform = transform @@ -563,15 +563,15 @@ def __init__(self, fig, rect, **kwargs ): """ - Build an axes in a figure. + Build an Axes in a figure. Parameters ---------- fig : `~matplotlib.figure.Figure` - The axes is build in the `.Figure` *fig*. + The Axes is built in the `.Figure` *fig*. rect : [left, bottom, width, height] - The axes is build in the rectangle *rect*. *rect* is in + The Axes is built in the rectangle *rect*. *rect* is in `.Figure` coordinates. sharex, sharey : `~.axes.Axes`, optional @@ -579,10 +579,10 @@ def __init__(self, fig, rect, y axis in the input `~.axes.Axes`. frameon : bool, default: True - Whether the axes frame is visible. + Whether the Axes frame is visible. box_aspect : float, optional - Set a fixed aspect for the axes box, i.e. the ratio of height to + Set a fixed aspect for the Axes box, i.e. the ratio of height to width. See `~.axes.Axes.set_box_aspect` for details. **kwargs @@ -615,7 +615,7 @@ def __init__(self, fig, rect, self.set_figure(fig) self.set_box_aspect(box_aspect) self._axes_locator = None # Optionally set via update(kwargs). - # placeholder for any colorbars added that use this axes. + # placeholder for any colorbars added that use this Axes. # (see colorbar.py): self._colorbars = [] self.spines = mspines.Spines.from_dict(self._gen_axes_spines()) @@ -723,7 +723,7 @@ def __repr__(self): def get_window_extent(self, *args, **kwargs): """ - Return the axes bounding box in display space; *args* and *kwargs* + Return the Axes bounding box in display space; *args* and *kwargs* are empty. This bounding box does not include the spines, ticks, ticklables, @@ -809,7 +809,7 @@ def _set_lim_and_transforms(self): This method is primarily used by rectilinear projections of the `~matplotlib.axes.Axes` class, and is meant to be overridden by - new kinds of projection axes that need different transformations + new kinds of projection Axes that need different transformations and limits. (See `~matplotlib.projections.polar.PolarAxes` for an example.) """ @@ -866,7 +866,7 @@ def get_xaxis_text1_transform(self, pad_points): ------- transform : Transform The transform used for drawing x-axis labels, which will add - *pad_points* of padding (in points) between the axes and the label. + *pad_points* of padding (in points) between the axis and the label. The x-direction is in data coordinates and the y-direction is in axis coordinates valign : {'center', 'top', 'bottom', 'baseline', 'center_baseline'} @@ -892,7 +892,7 @@ def get_xaxis_text2_transform(self, pad_points): ------- transform : Transform The transform used for drawing secondary x-axis labels, which will - add *pad_points* of padding (in points) between the axes and the + add *pad_points* of padding (in points) between the axis and the label. The x-direction is in data coordinates and the y-direction is in axis coordinates valign : {'center', 'top', 'bottom', 'baseline', 'center_baseline'} @@ -942,7 +942,7 @@ def get_yaxis_text1_transform(self, pad_points): ------- transform : Transform The transform used for drawing y-axis labels, which will add - *pad_points* of padding (in points) between the axes and the label. + *pad_points* of padding (in points) between the axis and the label. The x-direction is in axis coordinates and the y-direction is in data coordinates valign : {'center', 'top', 'bottom', 'baseline', 'center_baseline'} @@ -968,7 +968,7 @@ def get_yaxis_text2_transform(self, pad_points): ------- transform : Transform The transform used for drawing secondart y-axis labels, which will - add *pad_points* of padding (in points) between the axes and the + add *pad_points* of padding (in points) between the axis and the label. The x-direction is in axis coordinates and the y-direction is in data coordinates valign : {'center', 'top', 'bottom', 'baseline', 'center_baseline'} @@ -1002,7 +1002,7 @@ def _update_transScale(self): def get_position(self, original=False): """ - Get a copy of the axes rectangle as a `.Bbox`. + Return the position of the Axes within the figure as a `.Bbox`. Parameters ---------- @@ -1026,7 +1026,7 @@ def get_position(self, original=False): def set_position(self, pos, which='both'): """ - Set the axes position. + Set the Axes position. Axes have two position attributes. The 'original' position is the position allocated for the Axes. The 'active' position is the @@ -1081,7 +1081,7 @@ def reset_position(self): def set_axes_locator(self, locator): """ - Set the axes locator. + Set the Axes locator. Parameters ---------- @@ -1097,7 +1097,7 @@ def get_axes_locator(self): return self._axes_locator def _set_artist_props(self, a): - """Set the boilerplate props for artists added to axes.""" + """Set the boilerplate props for artists added to Axes.""" a.set_figure(self.figure) if not a.is_transform_set(): a.set_transform(self.transData) @@ -1111,8 +1111,8 @@ def _gen_axes_patch(self): Returns ------- Patch - The patch used to draw the background of the axes. It is also used - as the clipping path for any data elements on the axes. + The patch used to draw the background of the Axes. It is also used + as the clipping path for any data elements on the Axes. In the standard axes, this is a rectangle, but in other projections it may not be. @@ -1129,9 +1129,9 @@ def _gen_axes_spines(self, locations=None, offset=0.0, units='inches'): ------- dict Mapping of spine names to `.Line2D` or `.Patch` instances that are - used to draw axes spines. + used to draw Axes spines. - In the standard axes, spines are single line segments, but in other + In the standard Axes, spines are single line segments, but in other projections they may not be. Notes @@ -1147,7 +1147,7 @@ def sharex(self, other): This is equivalent to passing ``sharex=other`` when constructing the axes, and cannot be used if the x-axis is already being shared with - another axes. + another Axes. """ _api.check_isinstance(_AxesBase, other=other) if self._sharex is not None and other is not self._sharex: @@ -1166,7 +1166,7 @@ def sharey(self, other): This is equivalent to passing ``sharey=other`` when constructing the axes, and cannot be used if the y-axis is already being shared with - another axes. + another Axes. """ _api.check_isinstance(_AxesBase, other=other) if self._sharey is not None and other is not self._sharey: @@ -1180,7 +1180,7 @@ def sharey(self, other): self.yaxis._scale = other.yaxis._scale def cla(self): - """Clear the axes.""" + """Clear the Axes.""" # Note: this is called by Axes.__init__() # stash the current visibility state @@ -1285,13 +1285,13 @@ def cla(self): for _title in (self.title, self._left_title, self._right_title): self._set_artist_props(_title) - # The patch draws the background of the axes. We want this to be below + # The patch draws the background of the Axes. We want this to be below # the other artists. We use the frame to draw the edges so we are # setting the edgecolor to None. self.patch = self._gen_axes_patch() self.patch.set_figure(self.figure) self.patch.set_facecolor(self._facecolor) - self.patch.set_edgecolor('None') + self.patch.set_edgecolor('none') self.patch.set_linewidth(0) self.patch.set_transform(self.transAxes) @@ -1471,7 +1471,7 @@ def texts(self): valid_types=mtext.Text) def clear(self): - """Clear the axes.""" + """Clear the Axes.""" self.cla() def get_facecolor(self): @@ -1520,13 +1520,13 @@ def set_prop_cycle(self, *args, **kwargs): Form 2 creates a `~cycler.Cycler` which cycles over one or more properties simultaneously and set it as the property cycle of the - axes. If multiple properties are given, their value lists must have + Axes. If multiple properties are given, their value lists must have the same length. This is just a shortcut for explicitly creating a cycler and passing it to the function, i.e. it's short for ``set_prop_cycle(cycler(label=values label2=values2, ...))``. Form 3 creates a `~cycler.Cycler` for a single property and set it - as the property cycle of the axes. This form exists for compatibility + as the property cycle of the Axes. This form exists for compatibility with the original `cycler.cycler` interface. Its use is discouraged in favor of the kwarg form, i.e. ``set_prop_cycle(label=values)``. @@ -1710,7 +1710,7 @@ def set_adjustable(self, adjustable, share=False): for ax in axs)): # Limits adjustment by apply_aspect assumes that the axes' aspect # ratio can be computed from the data limits and scales. - raise ValueError("Cannot set axes adjustable to 'datalim' for " + raise ValueError("Cannot set Axes adjustable to 'datalim' for " "Axes which override 'get_data_ratio'") for ax in axs: ax._adjustable = adjustable @@ -1718,7 +1718,7 @@ def set_adjustable(self, adjustable, share=False): def get_box_aspect(self): """ - Return the axes box aspect, i.e. the ratio of height to width. + Return the Axes box aspect, i.e. the ratio of height to width. The box aspect is ``None`` (i.e. chosen depending on the available figure space) unless explicitly specified. @@ -1734,21 +1734,21 @@ def get_box_aspect(self): def set_box_aspect(self, aspect=None): """ - Set the axes box aspect, i.e. the ratio of height to width. + Set the Axes box aspect, i.e. the ratio of height to width. - This defines the aspect of the axes in figure space and is not to be + This defines the aspect of the Axes in figure space and is not to be confused with the data aspect (see `~.Axes.set_aspect`). Parameters ---------- aspect : float or None Changes the physical dimensions of the Axes, such that the ratio - of the axes height to the axes width in physical units is equal to + of the Axes height to the Axes width in physical units is equal to *aspect*. Defining a box aspect will change the *adjustable* property to 'datalim' (see `~.Axes.set_adjustable`). *None* will disable a fixed box aspect so that height and width - of the axes are chosen independently. + of the Axes are chosen independently. See Also -------- @@ -2138,7 +2138,7 @@ def _sci(self, im): This image will be the target of colormap functions like `~.pyplot.viridis`, and other functions such as `~.pyplot.clim`. The - current image is an attribute of the current axes. + current image is an attribute of the current Axes. """ _api.check_isinstance( (mpl.contour.ContourSet, mcoll.Collection, mimage.AxesImage), @@ -2157,7 +2157,7 @@ def _gci(self): def has_data(self): """ - Return whether any artists have been added to the axes. + Return whether any artists have been added to the Axes. This should not be used to determine whether the *dataLim* need to be updated, and may not actually be useful for @@ -2204,12 +2204,12 @@ def add_artist(self, a): def add_child_axes(self, ax): """ - Add an `.AxesBase` to the axes' children; return the child axes. + Add an `.AxesBase` to the Axes' children; return the child Axes. This is the lowlevel version. See `.axes.Axes.inset_axes`. """ - # normally axes have themselves as the axes, but these need to have + # normally Axes have themselves as the Axes, but these need to have # their parent... # Need to bypass the getter... ax._axes = self @@ -2612,7 +2612,7 @@ def use_sticky_edges(self): @use_sticky_edges.setter def use_sticky_edges(self, b): self._use_sticky_edges = bool(b) - # No effect until next autoscaling, which will mark the axes as stale. + # No effect until next autoscaling, which will mark the Axes as stale. def set_xmargin(self, m): """ @@ -2664,7 +2664,7 @@ def margins(self, *margins, x=None, y=None, tight=True): """ Set or retrieve autoscaling margins. - The padding added to each limit of the axes is the *margin* + The padding added to each limit of the Axes is the *margin* times the data interval. All input parameters must be floats within the range [0, 1]. Passing both positional and keyword arguments is invalid and will raise a TypeError. If no @@ -2766,7 +2766,7 @@ def autoscale(self, enable=True, axis='both', tight=None): Convenience method for simple axis view autoscaling. It turns autoscaling on or off, and then, if autoscaling for either axis is on, it performs - the autoscaling on the specified axis or axes. + the autoscaling on the specified axis or Axes. Parameters ---------- @@ -2833,7 +2833,7 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): case, use :meth:`matplotlib.axes.Axes.relim` prior to calling autoscale_view. - If the views of the axes are fixed, e.g. via `set_xlim`, they will + If the views of the Axes are fixed, e.g. via `set_xlim`, they will not be changed by autoscale_view(). See :meth:`matplotlib.axes.Axes.autoscale` for an alternative. """ @@ -2842,9 +2842,9 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): x_stickies = y_stickies = np.array([]) if self.use_sticky_edges: - # Only iterate over axes and artists if needed. The check for + # Only iterate over Axes and artists if needed. The check for # ``hasattr(ax, "_children")`` is necessary because this can be - # called very early in the axes init process (e.g., for twin axes) + # called very early in the Axes init process (e.g., for twin axes) # when these attributes don't even exist yet, in which case # `get_children` would raise an AttributeError. if self._xmargin and scalex and self._autoscaleXon: @@ -2948,7 +2948,7 @@ def _get_axis_map(self): and the r-axis is still named "y" (for back-compatibility). In practice, this means that the entries are typically "x" and "y", and - additionally "z" for 3D axes. + additionally "z" for 3D Axes. """ return dict(zip(self._axis_names, self._get_axis_list())) @@ -2989,9 +2989,9 @@ def _update_title_position(self, renderer): if bb is not None: top = max(top, bb.ymax) if top < 0: - # the top of axes is not even on the figure, so don't try and + # the top of Axes is not even on the figure, so don't try and # automatically place it. - _log.debug('top of axes not in the figure, so title not moved') + _log.debug('top of Axes not in the figure, so title not moved') return if title.get_window_extent(renderer).ymin < top: _, y = self.transAxes.inverted().transform((0, top)) @@ -3024,7 +3024,7 @@ def draw(self, renderer): # prevent triggering call backs during the draw process self._stale = True - # loop over self and child axes... + # loop over self and child Axes... locator = self.get_axes_locator() if locator: pos = locator(self, renderer) @@ -3035,7 +3035,7 @@ def draw(self, renderer): artists = self.get_children() artists.remove(self.patch) - # the frame draws the edges around the axes patch -- we + # the frame draws the edges around the Axes patch -- we # decouple these so the patch can be in the background and the # frame in the foreground. Do this before drawing the axis # objects so that the spine has the opportunity to update them. @@ -3119,12 +3119,12 @@ def get_renderer_cache(self): # Axes rectangle characteristics def get_frame_on(self): - """Get whether the axes rectangle patch is drawn.""" + """Get whether the Axes rectangle patch is drawn.""" return self._frameon def set_frame_on(self, b): """ - Set whether the axes rectangle patch is drawn. + Set whether the Axes rectangle patch is drawn. Parameters ---------- @@ -3238,7 +3238,7 @@ def ticklabel_format(self, *, axis='both', style='', scilimits=None, Parameters ---------- axis : {'x', 'y', 'both'}, default: 'both' - The axes to configure. Only major ticks are affected. + The axis to configure. Only major ticks are affected. style : {'sci', 'scientific', 'plain'} Whether to use scientific notation. @@ -3463,7 +3463,7 @@ def set_xlabel(self, xlabel, fontdict=None, labelpad=None, *, The label text. labelpad : float, default: :rc:`axes.labelpad` - Spacing in points from the axes bounding box including ticks + Spacing in points from the Axes bounding box including ticks and tick labels. If None, the previous value is left as is. loc : {'left', 'center', 'right'}, default: :rc:`xaxis.labellocation` @@ -3533,7 +3533,7 @@ def set_xbound(self, lower=None, upper=None): """ Set the lower and upper numerical bounds of the x-axis. - This method will honor axes inversion regardless of parameter order. + This method will honor axis inversion regardless of parameter order. It will not change the autoscaling setting (`.get_autoscalex_on()`). Parameters @@ -3807,7 +3807,7 @@ def set_ylabel(self, ylabel, fontdict=None, labelpad=None, *, The label text. labelpad : float, default: :rc:`axes.labelpad` - Spacing in points from the axes bounding box including ticks + Spacing in points from the Axes bounding box including ticks and tick labels. If None, the previous value is left as is. loc : {'bottom', 'center', 'top'}, default: :rc:`yaxis.labellocation` @@ -3877,7 +3877,7 @@ def set_ybound(self, lower=None, upper=None): """ Set the lower and upper numerical bounds of the y-axis. - This method will honor axes inversion regardless of parameter order. + This method will honor axis inversion regardless of parameter order. It will not change the autoscaling setting (`.get_autoscaley_on()`). Parameters @@ -4153,7 +4153,7 @@ def format_coord(self, x, y): def minorticks_on(self): """ - Display minor ticks on the axes. + Display minor ticks on the Axes. Displaying minor ticks may reduce performance; you may turn them off using `minorticks_off()` if drawing speed is a problem. @@ -4171,7 +4171,7 @@ def minorticks_on(self): ax.set_minor_locator(mticker.AutoMinorLocator()) def minorticks_off(self): - """Remove minor ticks from the axes.""" + """Remove minor ticks from the Axes.""" self.xaxis.set_minor_locator(mticker.NullLocator()) self.yaxis.set_minor_locator(mticker.NullLocator()) @@ -4179,25 +4179,25 @@ def minorticks_off(self): def can_zoom(self): """ - Return whether this axes supports the zoom box button functionality. + Return whether this Axes supports the zoom box button functionality. """ return True def can_pan(self): """ - Return whether this axes supports any pan/zoom button functionality. + Return whether this Axes supports any pan/zoom button functionality. """ return True def get_navigate(self): """ - Get whether the axes responds to navigation commands + Get whether the Axes responds to navigation commands. """ return self._navigate def set_navigate(self, b): """ - Set whether the axes responds to navigation toolbar commands + Set whether the Axes responds to navigation toolbar commands. Parameters ---------- @@ -4207,13 +4207,13 @@ def set_navigate(self, b): def get_navigate_mode(self): """ - Get the navigation toolbar button status: 'PAN', 'ZOOM', or None + Get the navigation toolbar button status: 'PAN', 'ZOOM', or None. """ return self._navigate_mode def set_navigate_mode(self, b): """ - Set the navigation toolbar button status; + Set the navigation toolbar button status. .. warning :: this is not a user-API function. @@ -4346,7 +4346,7 @@ def _set_view_from_bbox(self, bbox, direction='in', [xmin0, xmax0, xmin, xmax]) # To screen space. factor = (sxmax0 - sxmin0) / (sxmax - sxmin) # Unzoom factor. # Move original bounds away by - # (factor) x (distance between unzoom box and axes bbox). + # (factor) x (distance between unzoom box and Axes bbox). sxmin1 = sxmin0 - factor * (sxmin - sxmin0) sxmax1 = sxmax0 + factor * (sxmax0 - sxmax) # And back to data space. @@ -4542,7 +4542,7 @@ def get_tightbbox(self, renderer, call_axes_locator=True, bbox_extra_artists : list of `.Artist` or ``None`` List of artists to include in the tight bounding box. If - ``None`` (default), then all artist children of the axes are + ``None`` (default), then all artist children of the Axes are included in the tight bounding box. call_axes_locator : bool, default: True @@ -4550,7 +4550,7 @@ def get_tightbbox(self, renderer, call_axes_locator=True, ``_axes_locator`` attribute, which is necessary to get the correct bounding box. ``call_axes_locator=False`` can be used if the caller is only interested in the relative size of the tightbbox - compared to the axes bbox. + compared to the Axes bbox. for_layout_only : default: False The bounding box will *not* include the x-extent of the title and @@ -4582,21 +4582,13 @@ def get_tightbbox(self, renderer, call_axes_locator=True, if self.axison: if self.xaxis.get_visible(): - try: - bb_xaxis = self.xaxis.get_tightbbox( - renderer, for_layout_only=for_layout_only) - except TypeError: - # in case downstream library has redefined axis: - bb_xaxis = self.xaxis.get_tightbbox(renderer) + bb_xaxis = martist._get_tightbbox_for_layout_only( + self.xaxis, renderer) if bb_xaxis: bb.append(bb_xaxis) if self.yaxis.get_visible(): - try: - bb_yaxis = self.yaxis.get_tightbbox( - renderer, for_layout_only=for_layout_only) - except TypeError: - # in case downstream library has redefined axis: - bb_yaxis = self.yaxis.get_tightbbox(renderer) + bb_yaxis = martist._get_tightbbox_for_layout_only( + self.yaxis, renderer) if bb_yaxis: bb.append(bb_yaxis) self._update_title_position(renderer) @@ -4620,14 +4612,14 @@ def get_tightbbox(self, renderer, call_axes_locator=True, for a in bbox_artists: # Extra check here to quickly see if clipping is on and - # contained in the axes. If it is, don't get the tightbbox for + # contained in the Axes. If it is, don't get the tightbbox for # this artist because this can be expensive: clip_extent = a._get_clipping_extent_bbox() if clip_extent is not None: clip_extent = mtransforms.Bbox.intersection( clip_extent, axbbox) if np.all(clip_extent.extents == axbbox.extents): - # clip extent is inside the axes bbox so don't check + # clip extent is inside the Axes bbox so don't check # this artist continue bbox = a.get_tightbbox(renderer) @@ -4639,7 +4631,7 @@ def get_tightbbox(self, renderer, call_axes_locator=True, [b for b in bb if b.width != 0 or b.height != 0]) def _make_twin_axes(self, *args, **kwargs): - """Make a twinx axes of self. This is used for twinx and twiny.""" + """Make a twinx Axes of self. This is used for twinx and twiny.""" # Typically, SubplotBase._make_twin_axes is called instead of this. if 'sharex' in kwargs and 'sharey' in kwargs: raise ValueError("Twinned Axes may share only one axis") @@ -4670,7 +4662,7 @@ def twinx(self): Notes ----- For those who are 'picking' artists while using twinx, pick - events are only called for the artists in the top-most axes. + events are only called for the artists in the top-most Axes. """ ax2 = self._make_twin_axes(sharex=self) ax2.yaxis.tick_right() @@ -4700,7 +4692,7 @@ def twiny(self): Notes ----- For those who are 'picking' artists while using twiny, pick - events are only called for the artists in the top-most axes. + events are only called for the artists in the top-most Axes. """ ax2 = self._make_twin_axes(sharey=self) ax2.xaxis.tick_top() diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index 21ff162062d0..cf352af563da 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -101,6 +101,7 @@ def _safe_pyplot_import(): backend_mapping = { 'qt': 'qtagg', 'gtk3': 'gtk3agg', + 'gtk4': 'gtk4agg', 'wx': 'wxagg', 'tk': 'tkagg', 'macosx': 'macosx', @@ -913,15 +914,13 @@ def set_dashes(self, dash_offset, dash_list): Parameters ---------- - dash_offset : float or None + dash_offset : float The offset (usually 0). dash_list : array-like or None - The on-off sequence as points. + The on-off sequence as points. None specifies a solid line. Notes ----- - ``(None, None)`` specifies a solid line. - See p. 107 of to PostScript `blue book`_ for more info. .. _blue book: https://www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF @@ -1211,9 +1210,10 @@ def _on_timer(self): class Event: """ - A Matplotlib event. Attach additional attributes as defined in - :meth:`FigureCanvasBase.mpl_connect`. The following attributes - are defined and shown with their default values + A Matplotlib event. + + The following attributes are defined and shown with their default values. + Subclasses may define additional attributes. Attributes ---------- @@ -1232,20 +1232,20 @@ def __init__(self, name, canvas, guiEvent=None): class DrawEvent(Event): """ - An event triggered by a draw operation on the canvas + An event triggered by a draw operation on the canvas. - In most backends callbacks subscribed to this callback will be - fired after the rendering is complete but before the screen is - updated. Any extra artists drawn to the canvas's renderer will - be reflected without an explicit call to ``blit``. + In most backends, callbacks subscribed to this event will be fired after + the rendering is complete but before the screen is updated. Any extra + artists drawn to the canvas's renderer will be reflected without an + explicit call to ``blit``. .. warning:: Calling ``canvas.draw`` and ``canvas.blit`` in these callbacks may not be safe with all backends and may cause infinite recursion. - In addition to the `Event` attributes, the following event - attributes are defined: + A DrawEvent has a number of special attributes in addition to those defined + by the parent `Event` class. Attributes ---------- @@ -1259,10 +1259,10 @@ def __init__(self, name, canvas, renderer): class ResizeEvent(Event): """ - An event triggered by a canvas resize + An event triggered by a canvas resize. - In addition to the `Event` attributes, the following event - attributes are defined: + A ResizeEvent has a number of special attributes in addition to those + defined by the parent `Event` class. Attributes ---------- @@ -1284,32 +1284,23 @@ class LocationEvent(Event): """ An event that has a screen location. - The following additional attributes are defined and shown with - their default values. - - In addition to the `Event` attributes, the following - event attributes are defined: + A LocationEvent has a number of special attributes in addition to those + defined by the parent `Event` class. Attributes ---------- - x : int - x position - pixels from left of canvas. - y : int - y position - pixels from bottom of canvas. + x, y : int or None + Event location in pixels from bottom left of canvas. inaxes : `~.axes.Axes` or None The `~.axes.Axes` instance over which the mouse is, if any. - xdata : float or None - x data coordinate of the mouse. - ydata : float or None - y data coordinate of the mouse. + xdata, ydata : float or None + Data coordinates of the mouse within *inaxes*, or *None* if the mouse + is not over an Axes. """ lastevent = None # the last event that was triggered before this one def __init__(self, name, canvas, x, y, guiEvent=None): - """ - (*x*, *y*) in figure coords ((0, 0) = bottom left). - """ super().__init__(name, canvas, guiEvent=guiEvent) # x position - pixels from left of canvas self.x = int(x) if x is not None else x @@ -1378,13 +1369,11 @@ class MouseButton(IntEnum): class MouseEvent(LocationEvent): """ - A mouse event ('button_press_event', - 'button_release_event', - 'scroll_event', - 'motion_notify_event'). + A mouse event ('button_press_event', 'button_release_event', \ +'scroll_event', 'motion_notify_event'). - In addition to the `Event` and `LocationEvent` - attributes, the following attributes are defined: + A MouseEvent has a number of special attributes in addition to those + defined by the parent `Event` and `LocationEvent` classes. Attributes ---------- @@ -1426,10 +1415,6 @@ def on_press(event): def __init__(self, name, canvas, x, y, button=None, key=None, step=0, dblclick=False, guiEvent=None): - """ - (*x*, *y*) in figure coords ((0, 0) = bottom left) - button pressed None, 1, 2, 3, 'up', 'down' - """ if button in MouseButton.__members__.values(): button = MouseButton(button) self.button = button @@ -1450,11 +1435,14 @@ def __str__(self): class PickEvent(Event): """ - A pick event, fired when the user picks a location on the canvas + A pick event. + + This event is fired when the user picks a location on the canvas sufficiently close to an artist that has been made pickable with `.Artist.set_picker`. - Attrs: all the `Event` attributes plus + A PickEvent has a number of special attributes in addition to those defined + by the parent `Event` class. Attributes ---------- @@ -1495,19 +1483,16 @@ class KeyEvent(LocationEvent): """ A key event (key press, key release). - Attach additional attributes as defined in - :meth:`FigureCanvasBase.mpl_connect`. - - In addition to the `Event` and `LocationEvent` - attributes, the following attributes are defined: + A KeyEvent has a number of special attributes in addition to those defined + by the parent `Event` and `LocationEvent` classes. Attributes ---------- key : None or str - the key(s) pressed. Could be **None**, a single case sensitive ascii - character ("g", "G", "#", etc.), a special key - ("control", "shift", "f1", "up", etc.) or a - combination of the above (e.g., "ctrl+alt+g", "ctrl+alt+G"). + The key(s) pressed. Could be *None*, a single case sensitive Unicode + character ("g", "G", "#", etc.), a special key ("control", "shift", + "f1", "up", etc.) or a combination of the above (e.g., "ctrl+alt+g", + "ctrl+alt+G"). Notes ----- @@ -1570,7 +1555,7 @@ def _draw(renderer): raise Done(renderer) def _no_output_draw(figure): # _no_output_draw was promoted to the figure level, but # keep this here in case someone was calling it... - figure.draw_no_output() + figure.draw_without_rendering() def _is_non_interactive_terminal_ipython(ip): @@ -1670,7 +1655,7 @@ class FigureCanvasBase: A high-level figure instance. """ - # Set to one of {"qt", "gtk3", "wx", "tk", "macosx"} if an + # Set to one of {"qt", "gtk3", "gtk4", "wx", "tk", "macosx"} if an # interactive framework is required, or None otherwise. required_interactive_framework = None @@ -1746,7 +1731,7 @@ def _fix_ipython_backend2gui(cls): # don't break on our side. return rif = getattr(cls, "required_interactive_framework", None) - backend2gui_rif = {"qt": "qt", "gtk3": "gtk3", + backend2gui_rif = {"qt": "qt", "gtk3": "gtk3", "gtk4": "gtk4", "wx": "wx", "macosx": "osx"}.get(rif) if backend2gui_rif: if _is_non_interactive_terminal_ipython(ip): @@ -2272,6 +2257,7 @@ def print_figure( # Remove the figure manager, if any, to avoid resizing the GUI widget. with cbook._setattr_cm(self, manager=None), \ cbook._setattr_cm(self.figure, dpi=dpi), \ + cbook._setattr_cm(canvas, _device_pixel_ratio=1), \ cbook._setattr_cm(canvas, _is_saving=True), \ ExitStack() as stack: diff --git a/lib/matplotlib/backend_managers.py b/lib/matplotlib/backend_managers.py index 6d2d9595545d..24f5eb83c4d3 100644 --- a/lib/matplotlib/backend_managers.py +++ b/lib/matplotlib/backend_managers.py @@ -1,5 +1,4 @@ -from matplotlib import _api, cbook, widgets -import matplotlib.backend_tools as tools +from matplotlib import _api, backend_tools, cbook, widgets class ToolEvent: @@ -233,8 +232,9 @@ def add_tool(self, name, tool, *args, **kwargs): ---------- name : str Name of the tool, treated as the ID, has to be unique. - tool : class_like, i.e. str or type - Reference to find the class of the Tool to added. + tool : type + Class of the tool to be added. A subclass will be used + instead if one was registered for the current canvas class. Notes ----- @@ -245,7 +245,7 @@ def add_tool(self, name, tool, *args, **kwargs): matplotlib.backend_tools.ToolBase : The base class for tools. """ - tool_cls = self._get_cls_to_instantiate(tool) + tool_cls = backend_tools._find_tool_class(type(self.canvas), tool) if not tool_cls: raise ValueError('Impossible to find class for %s' % str(tool)) @@ -254,7 +254,7 @@ def add_tool(self, name, tool, *args, **kwargs): 'exists, not added') return self._tools[name] - if name == 'cursor' and tool_cls != tools.SetCursorBase: + if name == 'cursor' and tool_cls != backend_tools.SetCursorBase: _api.warn_deprecated("3.5", message="Overriding ToolSetCursor with " f"{tool_cls.__qualname__} was only " @@ -271,7 +271,7 @@ def add_tool(self, name, tool, *args, **kwargs): self.update_keymap(name, tool_cls.default_keymap) # For toggle tools init the radio_group in self._toggled - if isinstance(tool_obj, tools.ToolToggleBase): + if isinstance(tool_obj, backend_tools.ToolToggleBase): # None group is not mutually exclusive, a set is used to keep track # of all toggled tools in this group if tool_obj.radio_group is None: @@ -337,23 +337,6 @@ def _handle_toggle(self, tool, sender, canvasevent, data): # Keep track of the toggled tool in the radio_group self._toggled[radio_group] = toggled - def _get_cls_to_instantiate(self, callback_class): - # Find the class that corresponds to the tool - if isinstance(callback_class, str): - # FIXME: make more complete searching structure - if callback_class in globals(): - callback_class = globals()[callback_class] - else: - mod = 'backend_tools' - current_module = __import__(mod, - globals(), locals(), [mod], 1) - - callback_class = getattr(current_module, callback_class, False) - if callable(callback_class): - return callback_class - else: - return None - def trigger_tool(self, name, sender=None, canvasevent=None, data=None): """ Trigger a tool and emit the ``tool_trigger_{name}`` event. @@ -376,23 +359,15 @@ def trigger_tool(self, name, sender=None, canvasevent=None, data=None): if sender is None: sender = self - self._trigger_tool(name, sender, canvasevent, data) + if isinstance(tool, backend_tools.ToolToggleBase): + self._handle_toggle(tool, sender, canvasevent, data) + + tool.trigger(sender, canvasevent, data) # Actually trigger Tool. s = 'tool_trigger_%s' % name event = ToolTriggerEvent(s, sender, tool, canvasevent, data) self._callbacks.process(s, event) - def _trigger_tool(self, name, sender=None, canvasevent=None, data=None): - """Actually trigger a tool.""" - tool = self.get_tool(name) - - if isinstance(tool, tools.ToolToggleBase): - self._handle_toggle(tool, sender, canvasevent, data) - - # Important!!! - # This is where the Tool object gets triggered - tool.trigger(sender, canvasevent, data) - def _key_press(self, event): if event.key is None or self.keypresslock.locked(): return @@ -426,7 +401,8 @@ def get_tool(self, name, warn=True): `.ToolBase` or None The tool or None if no tool with the given name exists. """ - if isinstance(name, tools.ToolBase) and name.name in self._tools: + if (isinstance(name, backend_tools.ToolBase) + and name.name in self._tools): return name if name not in self._tools: if warn: diff --git a/lib/matplotlib/backend_tools.py b/lib/matplotlib/backend_tools.py index cc81b1f9269b..0c25ad554b26 100644 --- a/lib/matplotlib/backend_tools.py +++ b/lib/matplotlib/backend_tools.py @@ -12,6 +12,7 @@ """ import enum +import functools import re import time from types import SimpleNamespace @@ -36,6 +37,35 @@ class Cursors(enum.IntEnum): # Must subclass int for the macOS backend. RESIZE_VERTICAL = enum.auto() cursors = Cursors # Backcompat. + +# _tool_registry, _register_tool_class, and _find_tool_class implement a +# mechanism through which ToolManager.add_tool can determine whether a subclass +# of the requested tool class has been registered (either for the current +# canvas class or for a parent class), in which case that tool subclass will be +# instantiated instead. This is the mechanism used e.g. to allow different +# GUI backends to implement different specializations for ConfigureSubplots. + + +_tool_registry = set() + + +def _register_tool_class(canvas_cls, tool_cls=None): + """Decorator registering *tool_cls* as a tool class for *canvas_cls*.""" + if tool_cls is None: + return functools.partial(_register_tool_class, canvas_cls) + _tool_registry.add((canvas_cls, tool_cls)) + return tool_cls + + +def _find_tool_class(canvas_cls, tool_cls): + """Find a subclass of *tool_cls* registered for *canvas_cls*.""" + for canvas_parent in canvas_cls.__mro__: + for tool_child in _api.recursive_subclasses(tool_cls): + if (canvas_parent, tool_child) in _tool_registry: + return tool_child + return tool_cls + + # Views positions tool _views_positions = 'viewpos' @@ -900,7 +930,7 @@ class ToolHelpBase(ToolBase): @staticmethod def format_shortcut(key_sequence): """ - Converts a shortcut string from the notation used in rc config to the + Convert a shortcut string from the notation used in rc config to the standard notation for displaying shortcuts, e.g. 'ctrl+a' -> 'Ctrl+A'. """ return (key_sequence if len(key_sequence) == 1 else @@ -943,8 +973,8 @@ def trigger(self, *args, **kwargs): default_tools = {'home': ToolHome, 'back': ToolBack, 'forward': ToolForward, 'zoom': ToolZoom, 'pan': ToolPan, - 'subplots': 'ToolConfigureSubplots', - 'save': 'ToolSaveFigure', + 'subplots': ConfigureSubplotsBase, + 'save': SaveFigureBase, 'grid': ToolGrid, 'grid_minor': ToolMinorGrid, 'fullscreen': ToolFullScreen, @@ -954,10 +984,10 @@ def trigger(self, *args, **kwargs): 'yscale': ToolYScale, 'position': ToolCursorPosition, _views_positions: ToolViewsPositions, - 'cursor': 'ToolSetCursor', - 'rubberband': 'ToolRubberband', - 'help': 'ToolHelp', - 'copy': 'ToolCopyToClipboard', + 'cursor': SetCursorBase, + 'rubberband': RubberbandBase, + 'help': ToolHelpBase, + 'copy': ToolCopyToClipboardBase, } """Default tools""" diff --git a/lib/matplotlib/backends/_backend_gtk.py b/lib/matplotlib/backends/_backend_gtk.py new file mode 100644 index 000000000000..f652815f5120 --- /dev/null +++ b/lib/matplotlib/backends/_backend_gtk.py @@ -0,0 +1,174 @@ +""" +Common code for GTK3 and GTK4 backends. +""" + +import logging + +import matplotlib as mpl +from matplotlib import backend_tools, cbook +from matplotlib.backend_bases import ( + _Backend, NavigationToolbar2, TimerBase, +) + +# The GTK3/GTK4 backends will have already called `gi.require_version` to set +# the desired GTK. +from gi.repository import Gio, GLib, Gtk + + +_log = logging.getLogger(__name__) + +backend_version = "%s.%s.%s" % ( + Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version()) + +# Placeholder +_application = None + + +def _shutdown_application(app): + # The application might prematurely shut down if Ctrl-C'd out of IPython, + # so close all windows. + for win in app.get_windows(): + win.close() + # The PyGObject wrapper incorrectly thinks that None is not allowed, or we + # would call this: + # Gio.Application.set_default(None) + # Instead, we set this property and ignore default applications with it: + app._created_by_matplotlib = True + global _application + _application = None + + +def _create_application(): + global _application + + if _application is None: + app = Gio.Application.get_default() + if app is None or getattr(app, '_created_by_matplotlib'): + # display_is_valid returns False only if on Linux and neither X11 + # nor Wayland display can be opened. + if not mpl._c_internal_utils.display_is_valid(): + raise RuntimeError('Invalid DISPLAY variable') + _application = Gtk.Application.new('org.matplotlib.Matplotlib3', + Gio.ApplicationFlags.NON_UNIQUE) + # The activate signal must be connected, but we don't care for + # handling it, since we don't do any remote processing. + _application.connect('activate', lambda *args, **kwargs: None) + _application.connect('shutdown', _shutdown_application) + _application.register() + cbook._setup_new_guiapp() + else: + _application = app + + return _application + + +class TimerGTK(TimerBase): + """Subclass of `.TimerBase` using GTK timer events.""" + + def __init__(self, *args, **kwargs): + self._timer = None + super().__init__(*args, **kwargs) + + def _timer_start(self): + # Need to stop it, otherwise we potentially leak a timer id that will + # never be stopped. + self._timer_stop() + self._timer = GLib.timeout_add(self._interval, self._on_timer) + + def _timer_stop(self): + if self._timer is not None: + GLib.source_remove(self._timer) + self._timer = None + + def _timer_set_interval(self): + # Only stop and restart it if the timer has already been started. + if self._timer is not None: + self._timer_stop() + self._timer_start() + + def _on_timer(self): + super()._on_timer() + + # Gtk timeout_add() requires that the callback returns True if it + # is to be called again. + if self.callbacks and not self._single: + return True + else: + self._timer = None + return False + + +class _NavigationToolbar2GTK(NavigationToolbar2): + # Must be implemented in GTK3/GTK4 backends: + # * __init__ + # * save_figure + + def set_message(self, s): + escaped = GLib.markup_escape_text(s) + self.message.set_markup(f'{escaped}') + + def draw_rubberband(self, event, x0, y0, x1, y1): + height = self.canvas.figure.bbox.height + y1 = height - y1 + y0 = height - y0 + rect = [int(val) for val in (x0, y0, x1 - x0, y1 - y0)] + self.canvas._draw_rubberband(rect) + + def remove_rubberband(self): + self.canvas._draw_rubberband(None) + + def _update_buttons_checked(self): + for name, active in [("Pan", "PAN"), ("Zoom", "ZOOM")]: + button = self._gtk_ids.get(name) + if button: + with button.handler_block(button._signal_handler): + button.set_active(self.mode.name == active) + + def pan(self, *args): + super().pan(*args) + self._update_buttons_checked() + + def zoom(self, *args): + super().zoom(*args) + self._update_buttons_checked() + + def set_history_buttons(self): + can_backward = self._nav_stack._pos > 0 + can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1 + if 'Back' in self._gtk_ids: + self._gtk_ids['Back'].set_sensitive(can_backward) + if 'Forward' in self._gtk_ids: + self._gtk_ids['Forward'].set_sensitive(can_forward) + + +class RubberbandGTK(backend_tools.RubberbandBase): + def draw_rubberband(self, x0, y0, x1, y1): + _NavigationToolbar2GTK.draw_rubberband( + self._make_classic_style_pseudo_toolbar(), None, x0, y0, x1, y1) + + def remove_rubberband(self): + _NavigationToolbar2GTK.remove_rubberband( + self._make_classic_style_pseudo_toolbar()) + + +class ConfigureSubplotsGTK(backend_tools.ConfigureSubplotsBase, Gtk.Window): + def _get_canvas(self, fig): + return self.canvas.__class__(fig) + + def trigger(self, *args): + _NavigationToolbar2GTK.configure_subplots( + self._make_classic_style_pseudo_toolbar(), None) + + +class _BackendGTK(_Backend): + @staticmethod + def mainloop(): + global _application + if _application is None: + return + + try: + _application.run() # Quits when all added windows close. + finally: + # Running after quit is undefined, so create a new one next time. + _application = None diff --git a/lib/matplotlib/backends/_backend_tk.py b/lib/matplotlib/backends/_backend_tk.py index e07c089676b4..eb34c6b569e9 100644 --- a/lib/matplotlib/backends/_backend_tk.py +++ b/lib/matplotlib/backends/_backend_tk.py @@ -774,6 +774,7 @@ def hidetip(self): tw.destroy() +@backend_tools._register_tool_class(FigureCanvasTk) class RubberbandTk(backend_tools.RubberbandBase): def draw_rubberband(self, x0, y0, x1, y1): self.remove_rubberband() @@ -859,12 +860,14 @@ def set_message(self, s): self._message.set(s) +@backend_tools._register_tool_class(FigureCanvasTk) class SaveFigureTk(backend_tools.SaveFigureBase): def trigger(self, *args): NavigationToolbar2Tk.save_figure( self._make_classic_style_pseudo_toolbar()) +@backend_tools._register_tool_class(FigureCanvasTk) class ConfigureSubplotsTk(backend_tools.ConfigureSubplotsBase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -894,6 +897,7 @@ def destroy(self, *args, **kwargs): self.window = None +@backend_tools._register_tool_class(FigureCanvasTk) class HelpTk(backend_tools.ToolHelpBase): def trigger(self, *args): dialog = SimpleDialog( @@ -901,11 +905,6 @@ def trigger(self, *args): dialog.done = lambda num: dialog.frame.master.withdraw() -backend_tools.ToolSaveFigure = SaveFigureTk -backend_tools.ToolConfigureSubplots = ConfigureSubplotsTk -backend_tools.ToolRubberband = RubberbandTk -backend_tools.ToolHelp = HelpTk -backend_tools.ToolCopyToClipboard = backend_tools.ToolCopyToClipboardBase Toolbar = ToolbarTk diff --git a/lib/matplotlib/backends/backend_cairo.py b/lib/matplotlib/backends/backend_cairo.py index 61cd66ce2e31..05a760542f4f 100644 --- a/lib/matplotlib/backends/backend_cairo.py +++ b/lib/matplotlib/backends/backend_cairo.py @@ -245,7 +245,7 @@ def draw_text(self, gc, x, y, s, prop, angle, ismath=False, mtext=None): ctx.save() ctx.select_font_face(*_cairo_font_args_from_font_prop(prop)) - ctx.set_font_size(prop.get_size_in_points() * self.dpi / 72) + ctx.set_font_size(self.points_to_pixels(prop.get_size_in_points())) opts = cairo.FontOptions() opts.set_antialias( cairo.ANTIALIAS_DEFAULT if mpl.rcParams["text.antialiased"] @@ -271,7 +271,7 @@ def _draw_mathtext(self, gc, x, y, s, prop, angle): ctx.move_to(ox, -oy) ctx.select_font_face( *_cairo_font_args_from_font_prop(ttfFontProperty(font))) - ctx.set_font_size(fontsize * self.dpi / 72) + ctx.set_font_size(self.points_to_pixels(fontsize)) ctx.show_text(chr(idx)) for ox, oy, w, h in rects: @@ -303,9 +303,7 @@ def get_text_width_height_descent(self, s, prop, ismath): # save/restore prevents the problem ctx.save() ctx.select_font_face(*_cairo_font_args_from_font_prop(prop)) - # Cairo (says it) uses 1/96 inch user space units, ref: cairo_gstate.c - # but if /96.0 is used the font is too small - ctx.set_font_size(prop.get_size_in_points() * self.dpi / 72) + ctx.set_font_size(self.points_to_pixels(prop.get_size_in_points())) y_bearing, w, h = ctx.text_extents(s)[1:4] ctx.restore() diff --git a/lib/matplotlib/backends/backend_gtk3.py b/lib/matplotlib/backends/backend_gtk3.py index 46b48c2200aa..a0efcc934ea5 100644 --- a/lib/matplotlib/backends/backend_gtk3.py +++ b/lib/matplotlib/backends/backend_gtk3.py @@ -29,13 +29,16 @@ raise ImportError from e from gi.repository import Gio, GLib, GObject, Gtk, Gdk +from . import _backend_gtk +from ._backend_gtk import ( + _create_application, _shutdown_application, + backend_version, _BackendGTK, _NavigationToolbar2GTK, + TimerGTK as TimerGTK3, +) _log = logging.getLogger(__name__) -backend_version = "%s.%s.%s" % ( - Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version()) - @_api.caching_module_getattr # module-level deprecations class __getattr__: @@ -55,45 +58,12 @@ def cursord(self): except TypeError as exc: return {} - -# Placeholder -_application = None - - -def _shutdown_application(app): - # The application might prematurely shut down if Ctrl-C'd out of IPython, - # so close all windows. - for win in app.get_windows(): - win.destroy() - # The PyGObject wrapper incorrectly thinks that None is not allowed, or we - # would call this: - # Gio.Application.set_default(None) - # Instead, we set this property and ignore default applications with it: - app._created_by_matplotlib = True - global _application - _application = None - - -def _create_application(): - global _application - - if _application is None: - app = Gio.Application.get_default() - if app is None or getattr(app, '_created_by_matplotlib'): - # display_is_valid returns False only if on Linux and neither X11 - # nor Wayland display can be opened. - if not mpl._c_internal_utils.display_is_valid(): - raise RuntimeError('Invalid DISPLAY variable') - _application = Gtk.Application.new('org.matplotlib.Matplotlib3', - Gio.ApplicationFlags.NON_UNIQUE) - # The activate signal must be connected, but we don't care for - # handling it, since we don't do any remote processing. - _application.connect('activate', lambda *args, **kwargs: None) - _application.connect('shutdown', _shutdown_application) - _application.register() - cbook._setup_new_guiapp() - else: - _application = app + icon_filename = _api.deprecated("3.6", obj_type="")(property( + lambda self: + "matplotlib.png" if sys.platform == "win32" else "matplotlib.svg")) + window_icon = _api.deprecated("3.6", obj_type="")(property( + lambda self: + str(cbook._get_data_path("images", __getattr__("icon_filename"))))) @functools.lru_cache() @@ -110,42 +80,6 @@ def _mpl_to_gtk_cursor(mpl_cursor): return Gdk.Cursor.new_from_name(Gdk.Display.get_default(), name) -class TimerGTK3(TimerBase): - """Subclass of `.TimerBase` using GTK3 timer events.""" - - def __init__(self, *args, **kwargs): - self._timer = None - super().__init__(*args, **kwargs) - - def _timer_start(self): - # Need to stop it, otherwise we potentially leak a timer id that will - # never be stopped. - self._timer_stop() - self._timer = GLib.timeout_add(self._interval, self._on_timer) - - def _timer_stop(self): - if self._timer is not None: - GLib.source_remove(self._timer) - self._timer = None - - def _timer_set_interval(self): - # Only stop and restart it if the timer has already been started - if self._timer is not None: - self._timer_stop() - self._timer_start() - - def _on_timer(self): - super()._on_timer() - - # Gtk timeout_add() requires that the callback returns True if it - # is to be called again. - if self.callbacks and not self._single: - return True - else: - self._timer = None - return False - - class FigureCanvasGTK3(Gtk.DrawingArea, FigureCanvasBase): required_interactive_framework = "gtk3" _timer_cls = TimerGTK3 @@ -365,7 +299,7 @@ class FigureManagerGTK3(FigureManagerBase): num : int or str The Figure number toolbar : Gtk.Toolbar - The Gtk.Toolbar + The toolbar vbox : Gtk.VBox The Gtk.VBox containing the canvas and toolbar window : Gtk.Window @@ -373,19 +307,15 @@ class FigureManagerGTK3(FigureManagerBase): """ def __init__(self, canvas, num): - _create_application() + app = _create_application() self.window = Gtk.Window() - _application.add_window(self.window) + app.add_window(self.window) super().__init__(canvas, num) self.window.set_wmclass("matplotlib", "Matplotlib") - try: - self.window.set_icon_from_file(window_icon) - except Exception: - # Some versions of gtk throw a glib.GError but not all, so I am not - # sure how to catch it. I am unhappy doing a blanket catch here, - # but am not sure what a better way is - JDH - _log.info('Could not load matplotlib icon: %s', sys.exc_info()[1]) + icon_ext = "png" if sys.platform == "win32" else "svg" + self.window.set_icon_from_file( + str(cbook._get_data_path(f"images/matplotlib.{icon_ext}"))) self.vbox = Gtk.Box() self.vbox.set_property("orientation", Gtk.Orientation.VERTICAL) @@ -492,7 +422,7 @@ def resize(self, width, height): self.window.resize(width, height) -class NavigationToolbar2GTK3(NavigationToolbar2, Gtk.Toolbar): +class NavigationToolbar2GTK3(_NavigationToolbar2GTK, Gtk.Toolbar): def __init__(self, canvas, window): self.win = window GObject.GObject.__init__(self) @@ -509,21 +439,16 @@ def __init__(self, canvas, window): str(cbook._get_data_path('images', f'{image_file}-symbolic.svg'))), Gtk.IconSize.LARGE_TOOLBAR) - self._gtk_ids[text] = tbutton = ( + self._gtk_ids[text] = button = ( Gtk.ToggleToolButton() if callback in ['zoom', 'pan'] else Gtk.ToolButton()) - tbutton.set_label(text) - tbutton.set_icon_widget(image) - self.insert(tbutton, -1) + button.set_label(text) + button.set_icon_widget(image) # Save the handler id, so that we can block it as needed. - tbutton._signal_handler = tbutton.connect( + button._signal_handler = button.connect( 'clicked', getattr(self, callback)) - tbutton.set_tooltip_text(tooltip_text) - - toolitem = Gtk.SeparatorToolItem() - self.insert(toolitem, -1) - toolitem.set_draw(False) - toolitem.set_expand(True) + button.set_tooltip_text(tooltip_text) + self.insert(button, -1) # This filler item ensures the toolbar is always at least two text # lines high. Otherwise the canvas gets redrawn as the mouse hovers @@ -534,6 +459,7 @@ def __init__(self, canvas, window): label = Gtk.Label() label.set_markup( '\N{NO-BREAK SPACE}\n\N{NO-BREAK SPACE}') + toolitem.set_expand(True) # Push real message to the right. toolitem.add(label) toolitem = Gtk.ToolItem() @@ -545,35 +471,6 @@ def __init__(self, canvas, window): NavigationToolbar2.__init__(self, canvas) - def set_message(self, s): - escaped = GLib.markup_escape_text(s) - self.message.set_markup(f'{escaped}') - - def draw_rubberband(self, event, x0, y0, x1, y1): - height = self.canvas.figure.bbox.height - y1 = height - y1 - y0 = height - y0 - rect = [int(val) for val in (x0, y0, x1 - x0, y1 - y0)] - self.canvas._draw_rubberband(rect) - - def remove_rubberband(self): - self.canvas._draw_rubberband(None) - - def _update_buttons_checked(self): - for name, active in [("Pan", "PAN"), ("Zoom", "ZOOM")]: - button = self._gtk_ids.get(name) - if button: - with button.handler_block(button._signal_handler): - button.set_active(self.mode.name == active) - - def pan(self, *args): - super().pan(*args) - self._update_buttons_checked() - - def zoom(self, *args): - super().zoom(*args) - self._update_buttons_checked() - def save_figure(self, *args): dialog = Gtk.FileChooserDialog( title="Save the figure", @@ -618,14 +515,6 @@ def on_notify_filter(*args): except Exception as e: error_msg_gtk(str(e), parent=self) - def set_history_buttons(self): - can_backward = self._nav_stack._pos > 0 - can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1 - if 'Back' in self._gtk_ids: - self._gtk_ids['Back'].set_sensitive(can_backward) - if 'Forward' in self._gtk_ids: - self._gtk_ids['Forward'].set_sensitive(can_forward) - class ToolbarGTK3(ToolContainerBase, Gtk.Box): _icon_extension = '-symbolic.svg' @@ -643,26 +532,26 @@ def __init__(self, toolmanager): def add_toolitem(self, name, group, position, image_file, description, toggle): if toggle: - tbutton = Gtk.ToggleToolButton() + button = Gtk.ToggleToolButton() else: - tbutton = Gtk.ToolButton() - tbutton.set_label(name) + button = Gtk.ToolButton() + button.set_label(name) if image_file is not None: image = Gtk.Image.new_from_gicon( Gio.Icon.new_for_string(image_file), Gtk.IconSize.LARGE_TOOLBAR) - tbutton.set_icon_widget(image) + button.set_icon_widget(image) if position is None: position = -1 - self._add_button(tbutton, group, position) - signal = tbutton.connect('clicked', self._call_tool, name) - tbutton.set_tooltip_text(description) - tbutton.show_all() + self._add_button(button, group, position) + signal = button.connect('clicked', self._call_tool, name) + button.set_tooltip_text(description) + button.show_all() self._toolitems.setdefault(name, []) - self._toolitems[name].append((tbutton, signal)) + self._toolitems[name].append((button, signal)) def _add_button(self, button, group, position): if group not in self._groups: @@ -707,16 +596,7 @@ def set_message(self, s): self._message.set_label(s) -class RubberbandGTK3(backend_tools.RubberbandBase): - def draw_rubberband(self, x0, y0, x1, y1): - NavigationToolbar2GTK3.draw_rubberband( - self._make_classic_style_pseudo_toolbar(), None, x0, y0, x1, y1) - - def remove_rubberband(self): - NavigationToolbar2GTK3.remove_rubberband( - self._make_classic_style_pseudo_toolbar()) - - +@backend_tools._register_tool_class(FigureCanvasGTK3) class SaveFigureGTK3(backend_tools.SaveFigureBase): def trigger(self, *args, **kwargs): @@ -733,15 +613,7 @@ def set_cursor(self, cursor): self._make_classic_style_pseudo_toolbar(), cursor) -class ConfigureSubplotsGTK3(backend_tools.ConfigureSubplotsBase, Gtk.Window): - def _get_canvas(self, fig): - return self.canvas.__class__(fig) - - def trigger(self, *args): - NavigationToolbar2GTK3.configure_subplots( - self._make_classic_style_pseudo_toolbar(), None) - - +@backend_tools._register_tool_class(FigureCanvasGTK3) class HelpGTK3(backend_tools.ToolHelpBase): def _normalize_shortcut(self, key): """ @@ -827,6 +699,7 @@ def trigger(self, *args): self._show_shortcuts_dialog() +@backend_tools._register_tool_class(FigureCanvasGTK3) class ToolCopyToClipboardGTK3(backend_tools.ToolCopyToClipboardBase): def trigger(self, *args, **kwargs): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) @@ -836,14 +709,6 @@ def trigger(self, *args, **kwargs): clipboard.set_image(pb) -# Define the file to use as the GTk icon -if sys.platform == 'win32': - icon_filename = 'matplotlib.png' -else: - icon_filename = 'matplotlib.svg' -window_icon = str(cbook._get_data_path('images', icon_filename)) - - def error_msg_gtk(msg, parent=None): if parent is not None: # find the toplevel Gtk.Window parent = parent.get_toplevel() @@ -858,28 +723,14 @@ def error_msg_gtk(msg, parent=None): dialog.destroy() -backend_tools.ToolSaveFigure = SaveFigureGTK3 -backend_tools.ToolConfigureSubplots = ConfigureSubplotsGTK3 -backend_tools.ToolRubberband = RubberbandGTK3 -backend_tools.ToolHelp = HelpGTK3 -backend_tools.ToolCopyToClipboard = ToolCopyToClipboardGTK3 - Toolbar = ToolbarGTK3 +backend_tools._register_tool_class( + FigureCanvasGTK3, _backend_gtk.ConfigureSubplotsGTK) +backend_tools._register_tool_class( + FigureCanvasGTK3, _backend_gtk.RubberbandGTK) @_Backend.export -class _BackendGTK3(_Backend): +class _BackendGTK3(_BackendGTK): FigureCanvas = FigureCanvasGTK3 FigureManager = FigureManagerGTK3 - - @staticmethod - def mainloop(): - global _application - if _application is None: - return - - try: - _application.run() # Quits when all added windows close. - finally: - # Running after quit is undefined, so create a new one next time. - _application = None diff --git a/lib/matplotlib/backends/backend_gtk3cairo.py b/lib/matplotlib/backends/backend_gtk3cairo.py index af290902d8a6..9759e15adac8 100644 --- a/lib/matplotlib/backends/backend_gtk3cairo.py +++ b/lib/matplotlib/backends/backend_gtk3cairo.py @@ -28,6 +28,7 @@ def on_draw_event(self, widget, ctx): allocation.width, allocation.height) self._renderer.set_width_height( allocation.width, allocation.height) + self._renderer.dpi = self.figure.dpi self.figure.draw(self._renderer) diff --git a/lib/matplotlib/backends/backend_gtk4.py b/lib/matplotlib/backends/backend_gtk4.py new file mode 100644 index 000000000000..4dde8f627444 --- /dev/null +++ b/lib/matplotlib/backends/backend_gtk4.py @@ -0,0 +1,673 @@ +import functools +import io +import os +from pathlib import Path +import sys + +import matplotlib as mpl +from matplotlib import _api, backend_tools, cbook +from matplotlib._pylab_helpers import Gcf +from matplotlib.backend_bases import ( + _Backend, FigureCanvasBase, FigureManagerBase, NavigationToolbar2, + TimerBase, ToolContainerBase) +from matplotlib.backend_tools import Cursors +from matplotlib.figure import Figure +from matplotlib.widgets import SubplotTool + +try: + import gi +except ImportError as err: + raise ImportError("The GTK4 backends require PyGObject") from err + +try: + # :raises ValueError: If module/version is already loaded, already + # required, or unavailable. + gi.require_version("Gtk", "4.0") +except ValueError as e: + # in this case we want to re-raise as ImportError so the + # auto-backend selection logic correctly skips. + raise ImportError from e + +from gi.repository import Gio, GLib, GObject, Gtk, Gdk, GdkPixbuf +from . import _backend_gtk +from ._backend_gtk import ( + _create_application, _shutdown_application, + backend_version, _BackendGTK, _NavigationToolbar2GTK, + TimerGTK as TimerGTK4, +) + + +def _mpl_to_gtk_cursor(mpl_cursor): + return _api.check_getitem({ + Cursors.MOVE: "move", + Cursors.HAND: "pointer", + Cursors.POINTER: "default", + Cursors.SELECT_REGION: "crosshair", + Cursors.WAIT: "wait", + Cursors.RESIZE_HORIZONTAL: "ew-resize", + Cursors.RESIZE_VERTICAL: "ns-resize", + }, cursor=mpl_cursor) + + +class FigureCanvasGTK4(Gtk.DrawingArea, FigureCanvasBase): + required_interactive_framework = "gtk4" + _timer_cls = TimerGTK4 + + def __init__(self, figure=None): + FigureCanvasBase.__init__(self, figure) + GObject.GObject.__init__(self) + self.set_hexpand(True) + self.set_vexpand(True) + + self._idle_draw_id = 0 + self._lastCursor = None + self._rubberband_rect = None + + self.set_draw_func(self._draw_func) + self.connect('resize', self.resize_event) + + click = Gtk.GestureClick() + click.set_button(0) # All buttons. + click.connect('pressed', self.button_press_event) + click.connect('released', self.button_release_event) + self.add_controller(click) + + key = Gtk.EventControllerKey() + key.connect('key-pressed', self.key_press_event) + key.connect('key-released', self.key_release_event) + self.add_controller(key) + + motion = Gtk.EventControllerMotion() + motion.connect('motion', self.motion_notify_event) + motion.connect('enter', self.enter_notify_event) + motion.connect('leave', self.leave_notify_event) + self.add_controller(motion) + + scroll = Gtk.EventControllerScroll.new( + Gtk.EventControllerScrollFlags.VERTICAL) + scroll.connect('scroll', self.scroll_event) + self.add_controller(scroll) + + self.set_focusable(True) + + css = Gtk.CssProvider() + css.load_from_data(b".matplotlib-canvas { background-color: white; }") + style_ctx = self.get_style_context() + style_ctx.add_provider(css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + style_ctx.add_class("matplotlib-canvas") + + def pick(self, mouseevent): + # GtkWidget defines pick in GTK4, so we need to override here to work + # with the base implementation we want. + FigureCanvasBase.pick(self, mouseevent) + + def destroy(self): + self.close_event() + + def set_cursor(self, cursor): + # docstring inherited + self.set_cursor_from_name(_mpl_to_gtk_cursor(cursor)) + + def scroll_event(self, controller, dx, dy): + FigureCanvasBase.scroll_event(self, 0, 0, dy) + return True + + def button_press_event(self, controller, n_press, x, y): + # flipy so y=0 is bottom of canvas + y = self.get_allocation().height - y + FigureCanvasBase.button_press_event(self, x, y, + controller.get_current_button()) + self.grab_focus() + + def button_release_event(self, controller, n_press, x, y): + # flipy so y=0 is bottom of canvas + y = self.get_allocation().height - y + FigureCanvasBase.button_release_event(self, x, y, + controller.get_current_button()) + + def key_press_event(self, controller, keyval, keycode, state): + key = self._get_key(keyval, keycode, state) + FigureCanvasBase.key_press_event(self, key) + return True + + def key_release_event(self, controller, keyval, keycode, state): + key = self._get_key(keyval, keycode, state) + FigureCanvasBase.key_release_event(self, key) + return True + + def motion_notify_event(self, controller, x, y): + # flipy so y=0 is bottom of canvas + y = self.get_allocation().height - y + FigureCanvasBase.motion_notify_event(self, x, y) + + def leave_notify_event(self, controller): + FigureCanvasBase.leave_notify_event(self) + + def enter_notify_event(self, controller, x, y): + # flipy so y=0 is bottom of canvas + y = self.get_allocation().height - y + FigureCanvasBase.enter_notify_event(self, xy=(x, y)) + + def resize_event(self, area, width, height): + dpi = self.figure.dpi + self.figure.set_size_inches(width / dpi, height / dpi, forward=False) + FigureCanvasBase.resize_event(self) + self.draw_idle() + + def _get_key(self, keyval, keycode, state): + unikey = chr(Gdk.keyval_to_unicode(keyval)) + key = cbook._unikey_or_keysym_to_mplkey( + unikey, + Gdk.keyval_name(keyval)) + modifiers = [ + (Gdk.ModifierType.CONTROL_MASK, 'ctrl'), + (Gdk.ModifierType.ALT_MASK, 'alt'), + (Gdk.ModifierType.SHIFT_MASK, 'shift'), + (Gdk.ModifierType.SUPER_MASK, 'super'), + ] + for key_mask, prefix in modifiers: + if state & key_mask: + if not (prefix == 'shift' and unikey.isprintable()): + key = f'{prefix}+{key}' + return key + + def _draw_rubberband(self, rect): + self._rubberband_rect = rect + # TODO: Only update the rubberband area. + self.queue_draw() + + def _draw_func(self, drawing_area, ctx, width, height): + self.on_draw_event(self, ctx) + self._post_draw(self, ctx) + + def _post_draw(self, widget, ctx): + if self._rubberband_rect is None: + return + + x0, y0, w, h = self._rubberband_rect + x1 = x0 + w + y1 = y0 + h + + # Draw the lines from x0, y0 towards x1, y1 so that the + # dashes don't "jump" when moving the zoom box. + ctx.move_to(x0, y0) + ctx.line_to(x0, y1) + ctx.move_to(x0, y0) + ctx.line_to(x1, y0) + ctx.move_to(x0, y1) + ctx.line_to(x1, y1) + ctx.move_to(x1, y0) + ctx.line_to(x1, y1) + + ctx.set_antialias(1) + ctx.set_line_width(1) + ctx.set_dash((3, 3), 0) + ctx.set_source_rgb(0, 0, 0) + ctx.stroke_preserve() + + ctx.set_dash((3, 3), 3) + ctx.set_source_rgb(1, 1, 1) + ctx.stroke() + + def on_draw_event(self, widget, ctx): + # to be overwritten by GTK4Agg or GTK4Cairo + pass + + def draw(self): + # docstring inherited + if self.is_drawable(): + self.queue_draw() + + def draw_idle(self): + # docstring inherited + if self._idle_draw_id != 0: + return + def idle_draw(*args): + try: + self.draw() + finally: + self._idle_draw_id = 0 + return False + self._idle_draw_id = GLib.idle_add(idle_draw) + + def flush_events(self): + # docstring inherited + context = GLib.MainContext.default() + while context.pending(): + context.iteration(True) + + +class FigureManagerGTK4(FigureManagerBase): + """ + Attributes + ---------- + canvas : `FigureCanvas` + The FigureCanvas instance + num : int or str + The Figure number + toolbar : Gtk.Box + The toolbar + vbox : Gtk.VBox + The Gtk.VBox containing the canvas and toolbar + window : Gtk.Window + The Gtk.Window + + """ + def __init__(self, canvas, num): + app = _create_application() + self.window = Gtk.Window() + app.add_window(self.window) + super().__init__(canvas, num) + + self.vbox = Gtk.Box() + self.vbox.set_property("orientation", Gtk.Orientation.VERTICAL) + self.window.set_child(self.vbox) + + self.vbox.prepend(self.canvas) + # calculate size for window + w = int(self.canvas.figure.bbox.width) + h = int(self.canvas.figure.bbox.height) + + self.toolbar = self._get_toolbar() + + if self.toolmanager: + backend_tools.add_tools_to_manager(self.toolmanager) + if self.toolbar: + backend_tools.add_tools_to_container(self.toolbar) + + if self.toolbar is not None: + sw = Gtk.ScrolledWindow(vscrollbar_policy=Gtk.PolicyType.NEVER) + sw.set_child(self.toolbar) + self.vbox.append(sw) + min_size, nat_size = self.toolbar.get_preferred_size() + h += nat_size.height + + self.window.set_default_size(w, h) + + self._destroying = False + self.window.connect("destroy", lambda *args: Gcf.destroy(self)) + self.window.connect("close-request", lambda *args: Gcf.destroy(self)) + if mpl.is_interactive(): + self.window.show() + self.canvas.draw_idle() + + self.canvas.grab_focus() + + def destroy(self, *args): + if self._destroying: + # Otherwise, this can be called twice when the user presses 'q', + # which calls Gcf.destroy(self), then this destroy(), then triggers + # Gcf.destroy(self) once again via + # `connect("destroy", lambda *args: Gcf.destroy(self))`. + return + self._destroying = True + self.window.destroy() + self.canvas.destroy() + + def show(self): + # show the figure window + self.window.show() + self.canvas.draw() + if mpl.rcParams['figure.raise_window']: + if self.window.get_surface(): + self.window.present() + else: + # If this is called by a callback early during init, + # self.window (a GtkWindow) may not have an associated + # low-level GdkSurface (self.window.get_surface()) yet, and + # present() would crash. + _api.warn_external("Cannot raise window yet to be setup") + + def full_screen_toggle(self): + if not self.window.is_fullscreen(): + self.window.fullscreen() + else: + self.window.unfullscreen() + + def _get_toolbar(self): + # must be inited after the window, drawingArea and figure + # attrs are set + if mpl.rcParams['toolbar'] == 'toolbar2': + toolbar = NavigationToolbar2GTK4(self.canvas, self.window) + elif mpl.rcParams['toolbar'] == 'toolmanager': + toolbar = ToolbarGTK4(self.toolmanager) + else: + toolbar = None + return toolbar + + def get_window_title(self): + return self.window.get_title() + + def set_window_title(self, title): + self.window.set_title(title) + + def resize(self, width, height): + """Set the canvas size in pixels.""" + if self.toolbar: + toolbar_size = self.toolbar.size_request() + height += toolbar_size.height + canvas_size = self.canvas.get_allocation() + if canvas_size.width == canvas_size.height == 1: + # A canvas size of (1, 1) cannot exist in most cases, because + # window decorations would prevent such a small window. This call + # must be before the window has been mapped and widgets have been + # sized, so just change the window's starting size. + self.window.set_default_size(width, height) + else: + self.window.resize(width, height) + + +class NavigationToolbar2GTK4(_NavigationToolbar2GTK, Gtk.Box): + def __init__(self, canvas, window): + self.win = window + Gtk.Box.__init__(self) + + self.add_css_class('toolbar') + + self._gtk_ids = {} + for text, tooltip_text, image_file, callback in self.toolitems: + if text is None: + self.append(Gtk.Separator()) + continue + image = Gtk.Image.new_from_gicon( + Gio.Icon.new_for_string( + str(cbook._get_data_path('images', + f'{image_file}-symbolic.svg')))) + self._gtk_ids[text] = button = ( + Gtk.ToggleButton() if callback in ['zoom', 'pan'] else + Gtk.Button()) + button.set_child(image) + button.add_css_class('flat') + button.add_css_class('image-button') + # Save the handler id, so that we can block it as needed. + button._signal_handler = button.connect( + 'clicked', getattr(self, callback)) + button.set_tooltip_text(tooltip_text) + self.append(button) + + # This filler item ensures the toolbar is always at least two text + # lines high. Otherwise the canvas gets redrawn as the mouse hovers + # over images because those use two-line messages which resize the + # toolbar. + label = Gtk.Label() + label.set_markup( + '\N{NO-BREAK SPACE}\n\N{NO-BREAK SPACE}') + label.set_hexpand(True) # Push real message to the right. + self.append(label) + + self.message = Gtk.Label() + self.append(self.message) + + NavigationToolbar2.__init__(self, canvas) + + def save_figure(self, *args): + dialog = Gtk.FileChooserNative( + title='Save the figure', + transient_for=self.canvas.get_root(), + action=Gtk.FileChooserAction.SAVE, + modal=True) + self._save_dialog = dialog # Must keep a reference. + + ff = Gtk.FileFilter() + ff.set_name('All files') + ff.add_pattern('*') + dialog.add_filter(ff) + dialog.set_filter(ff) + + formats = [] + default_format = None + for i, (name, fmts) in enumerate( + self.canvas.get_supported_filetypes_grouped().items()): + ff = Gtk.FileFilter() + ff.set_name(name) + for fmt in fmts: + ff.add_pattern(f'*.{fmt}') + dialog.add_filter(ff) + formats.append(name) + if self.canvas.get_default_filetype() in fmts: + default_format = i + # Setting the choice doesn't always work, so make sure the default + # format is first. + formats = [formats[default_format], *formats[:default_format], + *formats[default_format+1:]] + dialog.add_choice('format', 'File format', formats, formats) + dialog.set_choice('format', formats[default_format]) + + dialog.set_current_folder(Gio.File.new_for_path( + os.path.expanduser(mpl.rcParams['savefig.directory']))) + dialog.set_current_name(self.canvas.get_default_filename()) + + @functools.partial(dialog.connect, 'response') + def on_response(dialog, response): + file = dialog.get_file() + fmt = dialog.get_choice('format') + fmt = self.canvas.get_supported_filetypes_grouped()[fmt][0] + dialog.destroy() + self._save_dialog = None + if response != Gtk.ResponseType.ACCEPT: + return + # Save dir for next time, unless empty str (which means use cwd). + if mpl.rcParams['savefig.directory']: + parent = file.get_parent() + mpl.rcParams['savefig.directory'] = parent.get_path() + try: + self.canvas.figure.savefig(file.get_path(), format=fmt) + except Exception as e: + msg = Gtk.MessageDialog( + transient_for=self.canvas.get_root(), + message_type=Gtk.MessageType.ERROR, + buttons=Gtk.ButtonsType.OK, modal=True, + text=str(e)) + msg.show() + + dialog.show() + + +class ToolbarGTK4(ToolContainerBase, Gtk.Box): + _icon_extension = '-symbolic.svg' + + def __init__(self, toolmanager): + ToolContainerBase.__init__(self, toolmanager) + Gtk.Box.__init__(self) + self.set_property('orientation', Gtk.Orientation.HORIZONTAL) + + # Tool items are created later, but must appear before the message. + self._tool_box = Gtk.Box() + self.append(self._tool_box) + self._groups = {} + self._toolitems = {} + + # This filler item ensures the toolbar is always at least two text + # lines high. Otherwise the canvas gets redrawn as the mouse hovers + # over images because those use two-line messages which resize the + # toolbar. + label = Gtk.Label() + label.set_markup( + '\N{NO-BREAK SPACE}\n\N{NO-BREAK SPACE}') + label.set_hexpand(True) # Push real message to the right. + self.append(label) + + self._message = Gtk.Label() + self.append(self._message) + + def add_toolitem(self, name, group, position, image_file, description, + toggle): + if toggle: + button = Gtk.ToggleButton() + else: + button = Gtk.Button() + button.set_label(name) + button.add_css_class('flat') + + if image_file is not None: + image = Gtk.Image.new_from_gicon( + Gio.Icon.new_for_string(image_file)) + button.set_child(image) + button.add_css_class('image-button') + + if position is None: + position = -1 + + self._add_button(button, group, position) + signal = button.connect('clicked', self._call_tool, name) + button.set_tooltip_text(description) + self._toolitems.setdefault(name, []) + self._toolitems[name].append((button, signal)) + + def _find_child_at_position(self, group, position): + children = [None] + child = self._groups[group].get_first_child() + while child is not None: + children.append(child) + child = child.get_next_sibling() + return children[position] + + def _add_button(self, button, group, position): + if group not in self._groups: + if self._groups: + self._add_separator() + group_box = Gtk.Box() + self._tool_box.append(group_box) + self._groups[group] = group_box + self._groups[group].insert_child_after( + button, self._find_child_at_position(group, position)) + + def _call_tool(self, btn, name): + self.trigger_tool(name) + + def toggle_toolitem(self, name, toggled): + if name not in self._toolitems: + return + for toolitem, signal in self._toolitems[name]: + toolitem.handler_block(signal) + toolitem.set_active(toggled) + toolitem.handler_unblock(signal) + + def remove_toolitem(self, name): + if name not in self._toolitems: + self.toolmanager.message_event(f'{name} not in toolbar', self) + return + + for group in self._groups: + for toolitem, _signal in self._toolitems[name]: + if toolitem in self._groups[group]: + self._groups[group].remove(toolitem) + del self._toolitems[name] + + def _add_separator(self): + sep = Gtk.Separator() + sep.set_property("orientation", Gtk.Orientation.VERTICAL) + self._tool_box.append(sep) + + def set_message(self, s): + self._message.set_label(s) + + +@backend_tools._register_tool_class(FigureCanvasGTK4) +class SaveFigureGTK4(backend_tools.SaveFigureBase): + def trigger(self, *args, **kwargs): + + class PseudoToolbar: + canvas = self.figure.canvas + + return NavigationToolbar2GTK4.save_figure(PseudoToolbar()) + + +@backend_tools._register_tool_class(FigureCanvasGTK4) +class HelpGTK4(backend_tools.ToolHelpBase): + def _normalize_shortcut(self, key): + """ + Convert Matplotlib key presses to GTK+ accelerator identifiers. + + Related to `FigureCanvasGTK4._get_key`. + """ + special = { + 'backspace': 'BackSpace', + 'pagedown': 'Page_Down', + 'pageup': 'Page_Up', + 'scroll_lock': 'Scroll_Lock', + } + + parts = key.split('+') + mods = ['<' + mod + '>' for mod in parts[:-1]] + key = parts[-1] + + if key in special: + key = special[key] + elif len(key) > 1: + key = key.capitalize() + elif key.isupper(): + mods += [''] + + return ''.join(mods) + key + + def _is_valid_shortcut(self, key): + """ + Check for a valid shortcut to be displayed. + + - GTK will never send 'cmd+' (see `FigureCanvasGTK4._get_key`). + - The shortcut window only shows keyboard shortcuts, not mouse buttons. + """ + return 'cmd+' not in key and not key.startswith('MouseButton.') + + def trigger(self, *args): + section = Gtk.ShortcutsSection() + + for name, tool in sorted(self.toolmanager.tools.items()): + if not tool.description: + continue + + # Putting everything in a separate group allows GTK to + # automatically split them into separate columns/pages, which is + # useful because we have lots of shortcuts, some with many keys + # that are very wide. + group = Gtk.ShortcutsGroup() + section.append(group) + # A hack to remove the title since we have no group naming. + child = group.get_first_child() + while child is not None: + child.set_visible(False) + child = child.get_next_sibling() + + shortcut = Gtk.ShortcutsShortcut( + accelerator=' '.join( + self._normalize_shortcut(key) + for key in self.toolmanager.get_tool_keymap(name) + if self._is_valid_shortcut(key)), + title=tool.name, + subtitle=tool.description) + group.append(shortcut) + + window = Gtk.ShortcutsWindow( + title='Help', + modal=True, + transient_for=self._figure.canvas.get_root()) + window.set_child(section) + + window.show() + + +@backend_tools._register_tool_class(FigureCanvasGTK4) +class ToolCopyToClipboardGTK4(backend_tools.ToolCopyToClipboardBase): + def trigger(self, *args, **kwargs): + with io.BytesIO() as f: + self.canvas.print_rgba(f) + w, h = self.canvas.get_width_height() + pb = GdkPixbuf.Pixbuf.new_from_data(f.getbuffer(), + GdkPixbuf.Colorspace.RGB, True, + 8, w, h, w*4) + clipboard = self.canvas.get_clipboard() + clipboard.set(pb) + + +backend_tools._register_tool_class( + FigureCanvasGTK4, _backend_gtk.ConfigureSubplotsGTK) +backend_tools._register_tool_class( + FigureCanvasGTK4, _backend_gtk.RubberbandGTK) +Toolbar = ToolbarGTK4 + + +@_Backend.export +class _BackendGTK4(_BackendGTK): + FigureCanvas = FigureCanvasGTK4 + FigureManager = FigureManagerGTK4 diff --git a/lib/matplotlib/backends/backend_gtk4agg.py b/lib/matplotlib/backends/backend_gtk4agg.py new file mode 100644 index 000000000000..b3439dc109cd --- /dev/null +++ b/lib/matplotlib/backends/backend_gtk4agg.py @@ -0,0 +1,80 @@ +import numpy as np + +from .. import cbook +try: + from . import backend_cairo +except ImportError as e: + raise ImportError('backend Gtk4Agg requires cairo') from e +from . import backend_agg, backend_gtk4 +from .backend_cairo import cairo +from .backend_gtk4 import Gtk, _BackendGTK4 +from matplotlib import transforms + + +class FigureCanvasGTK4Agg(backend_gtk4.FigureCanvasGTK4, + backend_agg.FigureCanvasAgg): + def __init__(self, figure): + backend_gtk4.FigureCanvasGTK4.__init__(self, figure) + self._bbox_queue = [] + + def on_draw_event(self, widget, ctx): + allocation = self.get_allocation() + w, h = allocation.width, allocation.height + + if not len(self._bbox_queue): + Gtk.render_background( + self.get_style_context(), ctx, + allocation.x, allocation.y, + allocation.width, allocation.height) + bbox_queue = [transforms.Bbox([[0, 0], [w, h]])] + else: + bbox_queue = self._bbox_queue + + ctx = backend_cairo._to_context(ctx) + + for bbox in bbox_queue: + x = int(bbox.x0) + y = h - int(bbox.y1) + width = int(bbox.x1) - int(bbox.x0) + height = int(bbox.y1) - int(bbox.y0) + + buf = cbook._unmultiplied_rgba8888_to_premultiplied_argb32( + np.asarray(self.copy_from_bbox(bbox))) + image = cairo.ImageSurface.create_for_data( + buf.ravel().data, cairo.FORMAT_ARGB32, width, height) + ctx.set_source_surface(image, x, y) + ctx.paint() + + if len(self._bbox_queue): + self._bbox_queue = [] + + return False + + def blit(self, bbox=None): + # If bbox is None, blit the entire canvas to gtk. Otherwise + # blit only the area defined by the bbox. + if bbox is None: + bbox = self.figure.bbox + + allocation = self.get_allocation() + x = int(bbox.x0) + y = allocation.height - int(bbox.y1) + width = int(bbox.x1) - int(bbox.x0) + height = int(bbox.y1) - int(bbox.y0) + + self._bbox_queue.append(bbox) + self.queue_draw_area(x, y, width, height) + + def draw(self): + backend_agg.FigureCanvasAgg.draw(self) + super().draw() + + +class FigureManagerGTK4Agg(backend_gtk4.FigureManagerGTK4): + pass + + +@_BackendGTK4.export +class _BackendGTK4Agg(_BackendGTK4): + FigureCanvas = FigureCanvasGTK4Agg + FigureManager = FigureManagerGTK4Agg diff --git a/lib/matplotlib/backends/backend_gtk4cairo.py b/lib/matplotlib/backends/backend_gtk4cairo.py new file mode 100644 index 000000000000..53d319392727 --- /dev/null +++ b/lib/matplotlib/backends/backend_gtk4cairo.py @@ -0,0 +1,36 @@ +from contextlib import nullcontext + +from . import backend_cairo, backend_gtk4 +from .backend_gtk4 import Gtk, _BackendGTK4 + + +class RendererGTK4Cairo(backend_cairo.RendererCairo): + def set_context(self, ctx): + self.gc.ctx = backend_cairo._to_context(ctx) + + +class FigureCanvasGTK4Cairo(backend_gtk4.FigureCanvasGTK4, + backend_cairo.FigureCanvasCairo): + + def __init__(self, figure): + super().__init__(figure) + self._renderer = RendererGTK4Cairo(self.figure.dpi) + + def on_draw_event(self, widget, ctx): + with (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar + else nullcontext()): + self._renderer.set_context(ctx) + allocation = self.get_allocation() + Gtk.render_background( + self.get_style_context(), ctx, + allocation.x, allocation.y, + allocation.width, allocation.height) + self._renderer.set_width_height( + allocation.width, allocation.height) + self._renderer.dpi = self.figure.dpi + self.figure.draw(self._renderer) + + +@_BackendGTK4.export +class _BackendGTK4Cairo(_BackendGTK4): + FigureCanvas = FigureCanvasGTK4Cairo diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 9980d49af85b..bd0c370f1cba 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -1063,12 +1063,12 @@ def createType1Descriptor(self, t1font, fontfile): return fontdescObject - def _get_xobject_symbol_name(self, filename, symbol_name): + def _get_xobject_glyph_name(self, filename, glyph_name): Fx = self.fontName(filename) return "-".join([ Fx.name.decode(), os.path.splitext(os.path.basename(filename))[0], - symbol_name]) + glyph_name]) _identityToUnicodeCMap = b"""/CIDInit /ProcSet findresource begin 12 dict begin @@ -1204,7 +1204,7 @@ def get_char_width(charcode): # Send the glyphs with ccode > 255 to the XObject dictionary, # and the others to the font itself if charname in multi_byte_chars: - name = self._get_xobject_symbol_name(filename, charname) + name = self._get_xobject_glyph_name(filename, charname) self.multi_byte_charprocs[name] = charprocObject else: charprocs[charname] = charprocObject @@ -1347,7 +1347,7 @@ def embedTTFType42(font, characters, descriptor): self.currentstream.write(stream) self.endStream() - name = self._get_xobject_symbol_name(filename, charname) + name = self._get_xobject_glyph_name(filename, charname) self.multi_byte_charprocs[name] = charprocObject # CIDToGIDMap stream @@ -2417,8 +2417,8 @@ def draw_text(self, gc, x, y, s, prop, angle, ismath=False, mtext=None): def _draw_xobject_glyph(self, font, fontsize, glyph_idx, x, y): """Draw a multibyte character from a Type 3 font as an XObject.""" - symbol_name = font.get_glyph_name(glyph_idx) - name = self.file._get_xobject_symbol_name(font.fname, symbol_name) + glyph_name = font.get_glyph_name(glyph_idx) + name = self.file._get_xobject_glyph_name(font.fname, glyph_name) self.file.output( Op.gsave, 0.001 * fontsize, 0, 0, 0.001 * fontsize, x, y, Op.concat_matrix, @@ -2793,7 +2793,7 @@ def print_pdf(self, filename, *, file.close() def draw(self): - self.figure.draw_no_output() + self.figure.draw_without_rendering() return super().draw() diff --git a/lib/matplotlib/backends/backend_pgf.py b/lib/matplotlib/backends/backend_pgf.py index 3f1cb7b172eb..2fa8c3251b12 100644 --- a/lib/matplotlib/backends/backend_pgf.py +++ b/lib/matplotlib/backends/backend_pgf.py @@ -600,6 +600,30 @@ def _print_pgf_path(self, gc, path, transform, rgbFace=None): r"{\pgfqpoint{%fin}{%fin}}" % coords) + # apply pgf decorators + sketch_params = gc.get_sketch_params() if gc else None + if sketch_params is not None: + # Only "length" directly maps to "segment length" in PGF's API. + # PGF uses "amplitude" to pass the combined deviation in both x- + # and y-direction, while matplotlib only varies the length of the + # wiggle along the line ("randomness" and "length" parameters) + # and has a separate "scale" argument for the amplitude. + # -> Use "randomness" as PRNG seed to allow the user to force the + # same shape on multiple sketched lines + scale, length, randomness = sketch_params + if scale is not None: + # make matplotlib and PGF rendering visually similar + length *= 0.5 + scale *= 2 + # PGF guarantees that repeated loading is a no-op + writeln(self.fh, r"\usepgfmodule{decorations}") + writeln(self.fh, r"\usepgflibrary{decorations.pathmorphing}") + writeln(self.fh, r"\pgfkeys{/pgf/decoration/.cd, " + f"segment length = {(length * f):f}in, " + f"amplitude = {(scale * f):f}in}}") + writeln(self.fh, f"\\pgfmathsetseed{{{int(randomness)}}}") + writeln(self.fh, r"\pgfdecoratecurrentpath{random steps}") + def _pgf_path_draw(self, stroke=True, fill=False): actions = [] if stroke: @@ -883,7 +907,7 @@ def get_renderer(self): return RendererPgf(self.figure, None) def draw(self): - self.figure.draw_no_output() + self.figure.draw_without_rendering() return super().draw() diff --git a/lib/matplotlib/backends/backend_ps.py b/lib/matplotlib/backends/backend_ps.py index f13e114a815b..c44f89c638d9 100644 --- a/lib/matplotlib/backends/backend_ps.py +++ b/lib/matplotlib/backends/backend_ps.py @@ -701,12 +701,12 @@ def draw_mathtext(self, gc, x, y, s, prop, angle): lastfont = font.postscript_name, fontsize self._pswriter.write( f"/{font.postscript_name} {fontsize} selectfont\n") - symbol_name = ( + glyph_name = ( font.get_name_char(chr(num)) if isinstance(font, AFM) else font.get_glyph_name(font.get_char_index(num))) self._pswriter.write( f"{ox:f} {oy:f} moveto\n" - f"/{symbol_name} glyphshow\n") + f"/{glyph_name} glyphshow\n") for ox, oy, w, h in rects: self._pswriter.write(f"{ox} {oy} {w} {h} rectfill\n") self._pswriter.write("grestore\n") @@ -1119,7 +1119,7 @@ def _print_figure_tex( _move_path_to_path_or_stream(tmpfile, outfile) def draw(self): - self.figure.draw_no_output() + self.figure.draw_without_rendering() return super().draw() diff --git a/lib/matplotlib/backends/backend_qt.py b/lib/matplotlib/backends/backend_qt.py index 5b74176befff..ba8eb02becf8 100644 --- a/lib/matplotlib/backends/backend_qt.py +++ b/lib/matplotlib/backends/backend_qt.py @@ -333,7 +333,8 @@ def keyReleaseEvent(self, event): def resizeEvent(self, event): frame = sys._getframe() - if frame.f_code is frame.f_back.f_code: # Prevent PyQt6 recursion. + # Prevent PyQt6 recursion, but sometimes frame.f_back is None + if frame.f_code is getattr(frame.f_back, 'f_code', None): return w = event.size().width() * self.device_pixel_ratio h = event.size().height() * self.device_pixel_ratio @@ -951,12 +952,14 @@ def set_message(self, s): self.widgetForAction(self._message_action).setText(s) +@backend_tools._register_tool_class(FigureCanvasQT) class ConfigureSubplotsQt(backend_tools.ConfigureSubplotsBase): def trigger(self, *args): NavigationToolbar2QT.configure_subplots( self._make_classic_style_pseudo_toolbar()) +@backend_tools._register_tool_class(FigureCanvasQT) class SaveFigureQt(backend_tools.SaveFigureBase): def trigger(self, *args): NavigationToolbar2QT.save_figure( @@ -970,6 +973,7 @@ def set_cursor(self, cursor): self._make_classic_style_pseudo_toolbar(), cursor) +@backend_tools._register_tool_class(FigureCanvasQT) class RubberbandQt(backend_tools.RubberbandBase): def draw_rubberband(self, x0, y0, x1, y1): NavigationToolbar2QT.draw_rubberband( @@ -980,24 +984,19 @@ def remove_rubberband(self): self._make_classic_style_pseudo_toolbar()) +@backend_tools._register_tool_class(FigureCanvasQT) class HelpQt(backend_tools.ToolHelpBase): def trigger(self, *args): QtWidgets.QMessageBox.information(None, "Help", self._get_help_html()) +@backend_tools._register_tool_class(FigureCanvasQT) class ToolCopyToClipboardQT(backend_tools.ToolCopyToClipboardBase): def trigger(self, *args, **kwargs): pixmap = self.canvas.grab() qApp.clipboard().setPixmap(pixmap) -backend_tools.ToolSaveFigure = SaveFigureQt -backend_tools.ToolConfigureSubplots = ConfigureSubplotsQt -backend_tools.ToolRubberband = RubberbandQt -backend_tools.ToolHelp = HelpQt -backend_tools.ToolCopyToClipboard = ToolCopyToClipboardQT - - @_Backend.export class _BackendQT(_Backend): FigureCanvas = FigureCanvasQT diff --git a/lib/matplotlib/backends/backend_qtcairo.py b/lib/matplotlib/backends/backend_qtcairo.py index 6d0a90b985b4..9619f4fdb686 100644 --- a/lib/matplotlib/backends/backend_qtcairo.py +++ b/lib/matplotlib/backends/backend_qtcairo.py @@ -13,6 +13,7 @@ def __init__(self, figure=None): def draw(self): if hasattr(self._renderer.gc, "ctx"): + self._renderer.dpi = self.figure.dpi self.figure.draw(self._renderer) super().draw() @@ -23,6 +24,7 @@ def paintEvent(self, event): surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) self._renderer.set_ctx_from_surface(surface) self._renderer.set_width_height(width, height) + self._renderer.dpi = self.figure.dpi self.figure.draw(self._renderer) buf = self._renderer.gc.ctx.get_target().get_data() if QT_API == "PyQt6": diff --git a/lib/matplotlib/backends/backend_svg.py b/lib/matplotlib/backends/backend_svg.py index 904cca7bf313..e4de85905ca7 100644 --- a/lib/matplotlib/backends/backend_svg.py +++ b/lib/matplotlib/backends/backend_svg.py @@ -1343,7 +1343,7 @@ def get_default_filetype(self): return 'svg' def draw(self): - self.figure.draw_no_output() + self.figure.draw_without_rendering() return super().draw() diff --git a/lib/matplotlib/backends/backend_tkcairo.py b/lib/matplotlib/backends/backend_tkcairo.py index a81fd0d92bb8..b4099db24828 100644 --- a/lib/matplotlib/backends/backend_tkcairo.py +++ b/lib/matplotlib/backends/backend_tkcairo.py @@ -18,6 +18,7 @@ def draw(self): surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) self._renderer.set_ctx_from_surface(surface) self._renderer.set_width_height(width, height) + self._renderer.dpi = self.figure.dpi self.figure.draw(self._renderer) buf = np.reshape(surface.get_data(), (height, width, 4)) _backend_tk.blit( diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index 16b152a51689..8b4ffd26e84e 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -515,6 +515,12 @@ def __init__(self, parent, id, figure=None): self.Bind(wx.EVT_RIGHT_DOWN, self._onMouseButton) self.Bind(wx.EVT_RIGHT_DCLICK, self._onMouseButton) self.Bind(wx.EVT_RIGHT_UP, self._onMouseButton) + self.Bind(wx.EVT_MOUSE_AUX1_DOWN, self._onMouseButton) + self.Bind(wx.EVT_MOUSE_AUX1_UP, self._onMouseButton) + self.Bind(wx.EVT_MOUSE_AUX2_DOWN, self._onMouseButton) + self.Bind(wx.EVT_MOUSE_AUX2_UP, self._onMouseButton) + self.Bind(wx.EVT_MOUSE_AUX1_DCLICK, self._onMouseButton) + self.Bind(wx.EVT_MOUSE_AUX2_DCLICK, self._onMouseButton) self.Bind(wx.EVT_MOUSEWHEEL, self._onMouseWheel) self.Bind(wx.EVT_MOTION, self._onMotion) self.Bind(wx.EVT_LEAVE_WINDOW, self._onLeave) @@ -592,8 +598,8 @@ def _get_imagesave_wildcards(self): @_api.delete_parameter("3.4", "origin") def gui_repaint(self, drawDC=None, origin='WX'): """ - Performs update of the displayed image on the GUI canvas, using the - supplied wx.PaintDC device context. + Update the displayed image on the GUI canvas, using the supplied + wx.PaintDC device context. The 'WXAgg' backend sets origin accordingly. """ @@ -766,6 +772,8 @@ def _onMouseButton(self, event): wx.MOUSE_BTN_LEFT: MouseButton.LEFT, wx.MOUSE_BTN_MIDDLE: MouseButton.MIDDLE, wx.MOUSE_BTN_RIGHT: MouseButton.RIGHT, + wx.MOUSE_BTN_AUX1: MouseButton.BACK, + wx.MOUSE_BTN_AUX2: MouseButton.FORWARD, } button = event.GetButton() button = button_map.get(button, button) @@ -1279,12 +1287,14 @@ def set_message(self, s): self._label_text.SetLabel(s) +@backend_tools._register_tool_class(_FigureCanvasWxBase) class ConfigureSubplotsWx(backend_tools.ConfigureSubplotsBase): def trigger(self, *args): NavigationToolbar2Wx.configure_subplots( self._make_classic_style_pseudo_toolbar()) +@backend_tools._register_tool_class(_FigureCanvasWxBase) class SaveFigureWx(backend_tools.SaveFigureBase): def trigger(self, *args): NavigationToolbar2Wx.save_figure( @@ -1298,6 +1308,7 @@ def set_cursor(self, cursor): self._make_classic_style_pseudo_toolbar(), cursor) +@backend_tools._register_tool_class(_FigureCanvasWxBase) class RubberbandWx(backend_tools.RubberbandBase): def draw_rubberband(self, x0, y0, x1, y1): NavigationToolbar2Wx.draw_rubberband( @@ -1353,12 +1364,14 @@ def show(cls, parent, help_entries): cls._instance.Show() +@backend_tools._register_tool_class(_FigureCanvasWxBase) class HelpWx(backend_tools.ToolHelpBase): def trigger(self, *args): _HelpDialog.show(self.figure.canvas.GetTopLevelParent(), self._get_help_entries()) +@backend_tools._register_tool_class(_FigureCanvasWxBase) class ToolCopyToClipboardWx(backend_tools.ToolCopyToClipboardBase): def trigger(self, *args, **kwargs): if not self.canvas._isDrawn: @@ -1371,13 +1384,6 @@ def trigger(self, *args, **kwargs): wx.TheClipboard.Close() -backend_tools.ToolSaveFigure = SaveFigureWx -backend_tools.ToolConfigureSubplots = ConfigureSubplotsWx -backend_tools.ToolRubberband = RubberbandWx -backend_tools.ToolHelp = HelpWx -backend_tools.ToolCopyToClipboard = ToolCopyToClipboardWx - - @_Backend.export class _BackendWx(_Backend): FigureCanvas = FigureCanvasWx diff --git a/lib/matplotlib/backends/backend_wxcairo.py b/lib/matplotlib/backends/backend_wxcairo.py index 6cb0b9d68414..230ebcf527d1 100644 --- a/lib/matplotlib/backends/backend_wxcairo.py +++ b/lib/matplotlib/backends/backend_wxcairo.py @@ -35,6 +35,7 @@ def draw(self, drawDC=None): surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) self._renderer.set_ctx_from_surface(surface) self._renderer.set_width_height(width, height) + self._renderer.dpi = self.figure.dpi self.figure.draw(self._renderer) self.bitmap = wxcairo.BitmapFromImageSurface(surface) self._isDrawn = True diff --git a/lib/matplotlib/cbook/__init__.py b/lib/matplotlib/cbook/__init__.py index 109b9ea69cc9..9d0fcadc431c 100644 --- a/lib/matplotlib/cbook/__init__.py +++ b/lib/matplotlib/cbook/__init__.py @@ -12,6 +12,7 @@ import functools import gzip import itertools +import math import operator import os from pathlib import Path @@ -50,8 +51,8 @@ def _get_running_interactive_framework(): Returns ------- Optional[str] - One of the following values: "qt", "gtk3", "wx", "tk", "macosx", - "headless", ``None``. + One of the following values: "qt", "gtk3", "gtk4", "wx", "tk", + "macosx", "headless", ``None``. """ # Use ``sys.modules.get(name)`` rather than ``name in sys.modules`` as # entries can also have been explicitly set to None. @@ -64,8 +65,13 @@ def _get_running_interactive_framework(): if QtWidgets and QtWidgets.QApplication.instance(): return "qt" Gtk = sys.modules.get("gi.repository.Gtk") - if Gtk and Gtk.main_level(): - return "gtk3" + if Gtk: + if Gtk.MAJOR_VERSION == 4: + from gi.repository import GLib + if GLib.main_depth(): + return "gtk4" + if Gtk.MAJOR_VERSION == 3 and Gtk.main_level(): + return "gtk3" wx = sys.modules.get("wx") if wx and wx.GetApp(): return "wx" @@ -2201,6 +2207,23 @@ def _format_approx(number, precision): return f'{number:.{precision}f}'.rstrip('0').rstrip('.') or '0' +def _g_sig_digits(value, delta): + """ + Return the number of significant digits to %g-format *value*, assuming that + it is known with an error of *delta*. + """ + # If e.g. value = 45.67 and delta = 0.02, then we want to round to 2 digits + # after the decimal point (floor(log10(0.02)) = -2); 45.67 contributes 2 + # digits before the decimal point (floor(log10(45.67)) + 1 = 2): the total + # is 4 significant digits. A value of 0 contributes 1 "digit" before the + # decimal point. + # For inf or nan, the precision doesn't matter. + return max( + 0, + (math.floor(math.log10(abs(value))) + 1 if value else 1) + - math.floor(math.log10(delta))) if math.isfinite(value) else 0 + + def _unikey_or_keysym_to_mplkey(unikey, keysym): """ Convert a Unicode key or X keysym to a Matplotlib key name. diff --git a/lib/matplotlib/cm.py b/lib/matplotlib/cm.py index 0af2f0f327d9..76c1c5d4f7f2 100644 --- a/lib/matplotlib/cm.py +++ b/lib/matplotlib/cm.py @@ -337,7 +337,7 @@ def __init__(self, norm=None, cmap=None): The colormap used to map normalized data values to RGBA colors. """ self._A = None - self.norm = None # So that the setter knows we're initializing. + self._norm = None # So that the setter knows we're initializing. self.set_norm(norm) # The Normalize instance of this ScalarMappable. self.cmap = None # So that the setter knows we're initializing. self.set_cmap(cmap) # The Colormap instance of this ScalarMappable. @@ -496,6 +496,8 @@ def set_clim(self, vmin=None, vmax=None): .. ACCEPTS: (vmin: float, vmax: float) """ + # If the norm's limits are updated self.changed() will be called + # through the callbacks attached to the norm if vmax is None: try: vmin, vmax = vmin @@ -505,7 +507,6 @@ def set_clim(self, vmin=None, vmax=None): self.norm.vmin = colors._sanitize_extrema(vmin) if vmax is not None: self.norm.vmax = colors._sanitize_extrema(vmax) - self.changed() def get_alpha(self): """ @@ -531,6 +532,30 @@ def set_cmap(self, cmap): if not in_init: self.changed() # Things are not set up properly yet. + @property + def norm(self): + return self._norm + + @norm.setter + def norm(self, norm): + _api.check_isinstance((colors.Normalize, None), norm=norm) + if norm is None: + norm = colors.Normalize() + + if norm is self.norm: + # We aren't updating anything + return + + in_init = self.norm is None + # Remove the current callback and connect to the new one + if not in_init: + self.norm.callbacks.disconnect(self._id_norm) + self._norm = norm + self._id_norm = self.norm.callbacks.connect('changed', + self.changed) + if not in_init: + self.changed() + def set_norm(self, norm): """ Set the normalization instance. @@ -545,13 +570,7 @@ def set_norm(self, norm): the norm of the mappable will reset the norm, locator, and formatters on the colorbar to default. """ - _api.check_isinstance((colors.Normalize, None), norm=norm) - in_init = self.norm is None - if norm is None: - norm = colors.Normalize() self.norm = norm - if not in_init: - self.changed() # Things are not set up properly yet. def autoscale(self): """ @@ -560,8 +579,9 @@ def autoscale(self): """ if self._A is None: raise TypeError('You must first set_array for mappable') + # If the norm's limits are updated self.changed() will be called + # through the callbacks attached to the norm self.norm.autoscale(self._A) - self.changed() def autoscale_None(self): """ @@ -570,8 +590,9 @@ def autoscale_None(self): """ if self._A is None: raise TypeError('You must first set_array for mappable') + # If the norm's limits are updated self.changed() will be called + # through the callbacks attached to the norm self.norm.autoscale_None(self._A) - self.changed() def changed(self): """ diff --git a/lib/matplotlib/colorbar.py b/lib/matplotlib/colorbar.py index 459b14f6c5a7..a5439bf8ea75 100644 --- a/lib/matplotlib/colorbar.py +++ b/lib/matplotlib/colorbar.py @@ -471,6 +471,7 @@ def __init__(self, ax, mappable=None, *, cmap=None, self.ax.add_collection(self.dividers) self.locator = None + self.minorlocator = None self.formatter = None self.__scale = None # linear, log10 for now. Hopefully more? @@ -991,6 +992,12 @@ def remove(self): If the colorbar was created with ``use_gridspec=True`` the previous gridspec is restored. """ + if hasattr(self.ax, '_colorbar_info'): + parents = self.ax._colorbar_info['parents'] + for a in parents: + if self.ax in a._colorbars: + a._colorbars.remove(self.ax) + self.ax.remove() self.mappable.callbacks.disconnect(self.mappable.colorbar_cid) @@ -1096,7 +1103,7 @@ def _mesh(self): # vmax of the colorbar, not the norm. This allows the situation # where the colormap has a narrower range than the colorbar, to # accommodate extra contours: - norm = copy.copy(self.norm) + norm = copy.deepcopy(self.norm) norm.vmin = self.vmin norm.vmax = self.vmax x = np.array([0.0, 1.0]) @@ -1197,8 +1204,9 @@ def _proportional_y(self): a proportional colorbar, plus extension lengths if required: """ if isinstance(self.norm, colors.BoundaryNorm): - y = (self._boundaries - self._boundaries[0]) - y = y / (self._boundaries[-1] - self._boundaries[0]) + y = (self._boundaries - self._boundaries[self._inside][0]) + y = y / (self._boundaries[self._inside][-1] - + self._boundaries[self._inside][0]) # need yscaled the same as the axes scale to get # the extend lengths. if self.spacing == 'uniform': diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index f75e069d3083..0843bd5f592c 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -390,8 +390,17 @@ def to_hex(c, keep_alpha=False): """ Convert *c* to a hex color. - Uses the ``#rrggbb`` format if *keep_alpha* is False (the default), - ``#rrggbbaa`` otherwise. + Parameters + ---------- + c : :doc:`color ` or `numpy.ma.masked` + + keep_alpha: bool, default: False + If False, use the ``#rrggbb`` format, otherwise use ``#rrggbbaa``. + + Returns + ------- + str + ``#rrggbb`` or ``#rrggbbaa`` hex color string """ c = to_rgba(c) if not keep_alpha: @@ -1123,10 +1132,50 @@ def __init__(self, vmin=None, vmax=None, clip=False): ----- Returns 0 if ``vmin == vmax``. """ - self.vmin = _sanitize_extrema(vmin) - self.vmax = _sanitize_extrema(vmax) - self.clip = clip - self._scale = None # will default to LinearScale for colorbar + self._vmin = _sanitize_extrema(vmin) + self._vmax = _sanitize_extrema(vmax) + self._clip = clip + self._scale = None + self.callbacks = cbook.CallbackRegistry() + + @property + def vmin(self): + return self._vmin + + @vmin.setter + def vmin(self, value): + value = _sanitize_extrema(value) + if value != self._vmin: + self._vmin = value + self._changed() + + @property + def vmax(self): + return self._vmax + + @vmax.setter + def vmax(self, value): + value = _sanitize_extrema(value) + if value != self._vmax: + self._vmax = value + self._changed() + + @property + def clip(self): + return self._clip + + @clip.setter + def clip(self, value): + if value != self._clip: + self._clip = value + self._changed() + + def _changed(self): + """ + Call this whenever the norm is changed to notify all the + callback listeners to the 'changed' signal. + """ + self.callbacks.process('changed') @staticmethod def process_value(value): @@ -1273,7 +1322,7 @@ def __init__(self, vcenter, vmin=None, vmax=None): """ super().__init__(vmin=vmin, vmax=vmax) - self.vcenter = vcenter + self._vcenter = vcenter if vcenter is not None and vmax is not None and vcenter >= vmax: raise ValueError('vmin, vcenter, and vmax must be in ' 'ascending order') @@ -1281,6 +1330,16 @@ def __init__(self, vcenter, vmin=None, vmax=None): raise ValueError('vmin, vcenter, and vmax must be in ' 'ascending order') + @property + def vcenter(self): + return self._vcenter + + @vcenter.setter + def vcenter(self, value): + if value != self._vcenter: + self._vcenter = value + self._changed() + def autoscale_None(self, A): """ Get vmin and vmax, and then clip at vcenter @@ -1387,7 +1446,9 @@ def vcenter(self): @vcenter.setter def vcenter(self, vcenter): - self._vcenter = vcenter + if vcenter != self._vcenter: + self._vcenter = vcenter + self._changed() if self.vmax is not None: # recompute halfrange assuming vmin and vmax represent # min and max of data @@ -2324,7 +2385,7 @@ def blend_soft_light(self, rgb, intensity): def blend_overlay(self, rgb, intensity): """ - Combines an rgb image with an intensity map using "overlay" blending. + Combine an rgb image with an intensity map using "overlay" blending. Parameters ---------- diff --git a/lib/matplotlib/contour.py b/lib/matplotlib/contour.py index 7dec80943993..4d124ce8c57c 100644 --- a/lib/matplotlib/contour.py +++ b/lib/matplotlib/contour.py @@ -1090,6 +1090,15 @@ def _make_paths(self, segs, kinds): in zip(segs, kinds)] def changed(self): + if not hasattr(self, "cvalues"): + # Just return after calling the super() changed function + cm.ScalarMappable.changed(self) + return + # Force an autoscale immediately because self.to_rgba() calls + # autoscale_None() internally with the data passed to it, + # so if vmin/vmax are not set yet, this would override them with + # content from *cvalues* rather than levels like we want + self.norm.autoscale_None(self.levels) tcolors = [(tuple(rgba),) for rgba in self.to_rgba(self.cvalues, alpha=self.alpha)] self.tcolors = tcolors diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index 67aff6270815..0766156d64ab 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -21,8 +21,8 @@ .. seealso:: - :doc:`/gallery/text_labels_and_annotations/date` - - :doc:`/gallery/ticks_and_spines/date_concise_formatter` - - :doc:`/gallery/ticks_and_spines/date_demo_convert` + - :doc:`/gallery/ticks/date_concise_formatter` + - :doc:`/gallery/ticks/date_demo_convert` .. _date-format: @@ -38,7 +38,7 @@ 20 microseconds for the rest of the allowable range of dates (year 0001 to 9999). The epoch can be changed at import time via `.dates.set_epoch` or :rc:`dates.epoch` to other dates if necessary; see -:doc:`/gallery/ticks_and_spines/date_precision_and_epochs` for a discussion. +:doc:`/gallery/ticks/date_precision_and_epochs` for a discussion. .. note:: @@ -144,7 +144,7 @@ * `RRuleLocator`: Locate using a `matplotlib.dates.rrulewrapper`. `.rrulewrapper` is a simple wrapper around dateutil_'s `dateutil.rrule` which allow almost arbitrary date tick specifications. See :doc:`rrule example - `. + `. * `AutoDateLocator`: On autoscale, this class picks the best `DateLocator` (e.g., `RRuleLocator`) to set the view limits and the tick locations. If @@ -271,7 +271,7 @@ def set_epoch(epoch): `~.dates.set_epoch` must be called before any dates are converted (i.e. near the import section) or a RuntimeError will be raised. - See also :doc:`/gallery/ticks_and_spines/date_precision_and_epochs`. + See also :doc:`/gallery/ticks/date_precision_and_epochs`. Parameters ---------- @@ -683,7 +683,7 @@ class ConciseDateFormatter(ticker.Formatter): Examples -------- - See :doc:`/gallery/ticks_and_spines/date_concise_formatter` + See :doc:`/gallery/ticks/date_concise_formatter` .. plot:: @@ -1659,7 +1659,7 @@ class MicrosecondLocator(DateLocator): If you really must use datetime.datetime() or similar and still need microsecond precision, change the time origin via `.dates.set_epoch` to something closer to the dates being plotted. - See :doc:`/gallery/ticks_and_spines/date_precision_and_epochs`. + See :doc:`/gallery/ticks/date_precision_and_epochs`. """ def __init__(self, interval=1, tz=None): @@ -1890,44 +1890,32 @@ def axisinfo(self, unit, axis): default_limits=(datemin, datemax)) -class _rcParam_helper: +class _SwitchableDateConverter: """ - This helper class is so that we can set the converter for dates - via the validator for the rcParams `date.converter` and - `date.interval_multiples`. Never instatiated. + Helper converter-like object that generates and dispatches to + temporary ConciseDateConverter or DateConverter instances based on + :rc:`date.converter` and :rc:`date.interval_multiples`. """ - conv_st = 'auto' - int_mult = True - - @classmethod - def set_converter(cls, s): - """Called by validator for rcParams date.converter""" - if s not in ['concise', 'auto']: - raise ValueError('Converter must be one of "concise" or "auto"') - cls.conv_st = s - cls.register_converters() - - @classmethod - def set_int_mult(cls, b): - """Called by validator for rcParams date.interval_multiples""" - cls.int_mult = b - cls.register_converters() - - @classmethod - def register_converters(cls): - """ - Helper to register the date converters when rcParams `date.converter` - and `date.interval_multiples` are changed. Called by the helpers - above. - """ - if cls.conv_st == 'concise': - converter = ConciseDateConverter - else: - converter = DateConverter + @staticmethod + def _get_converter(): + converter_cls = { + "concise": ConciseDateConverter, "auto": DateConverter}[ + mpl.rcParams["date.converter"]] + interval_multiples = mpl.rcParams["date.interval_multiples"] + return converter_cls(interval_multiples=interval_multiples) + + def axisinfo(self, *args, **kwargs): + return self._get_converter().axisinfo(*args, **kwargs) + + def default_units(self, *args, **kwargs): + return self._get_converter().default_units(*args, **kwargs) + + def convert(self, *args, **kwargs): + return self._get_converter().convert(*args, **kwargs) + - interval_multiples = cls.int_mult - convert = converter(interval_multiples=interval_multiples) - units.registry[np.datetime64] = convert - units.registry[datetime.date] = convert - units.registry[datetime.datetime] = convert +units.registry[np.datetime64] = \ + units.registry[datetime.date] = \ + units.registry[datetime.datetime] = \ + _SwitchableDateConverter() diff --git a/lib/matplotlib/docstring.py b/lib/matplotlib/docstring.py index e1eaca32349e..1beb6a17eb2a 100644 --- a/lib/matplotlib/docstring.py +++ b/lib/matplotlib/docstring.py @@ -1,5 +1,7 @@ import inspect +from . import _api + class Substitution: """ @@ -45,12 +47,6 @@ def update(self, *args, **kwargs): self.params.update(*args, **kwargs) -def _recursive_subclasses(cls): - yield cls - for subcls in cls.__subclasses__(): - yield from _recursive_subclasses(subcls) - - class _ArtistKwdocLoader(dict): def __missing__(self, key): if not key.endswith(":kwdoc"): @@ -58,7 +54,7 @@ def __missing__(self, key): name = key[:-len(":kwdoc")] from matplotlib.artist import Artist, kwdoc try: - cls, = [cls for cls in _recursive_subclasses(Artist) + cls, = [cls for cls in _api.recursive_subclasses(Artist) if cls.__name__ == name] except ValueError as e: raise KeyError(key) from e diff --git a/lib/matplotlib/dviread.py b/lib/matplotlib/dviread.py index 117c60aa786d..3207a01de8be 100644 --- a/lib/matplotlib/dviread.py +++ b/lib/matplotlib/dviread.py @@ -84,8 +84,6 @@ def _arg(nbytes, signed, dvi, _): def _arg_slen(dvi, delta): """ - Signed, length *delta* - Read *delta* bytes, returning None if *delta* is zero, and the bytes interpreted as a signed integer otherwise. """ @@ -96,26 +94,20 @@ def _arg_slen(dvi, delta): def _arg_slen1(dvi, delta): """ - Signed, length *delta*+1 - Read *delta*+1 bytes, returning the bytes interpreted as signed. """ - return dvi._arg(delta+1, True) + return dvi._arg(delta + 1, True) def _arg_ulen1(dvi, delta): """ - Unsigned length *delta*+1 - Read *delta*+1 bytes, returning the bytes interpreted as unsigned. """ - return dvi._arg(delta+1, False) + return dvi._arg(delta + 1, False) def _arg_olen1(dvi, delta): """ - Optionally signed, length *delta*+1 - Read *delta*+1 bytes, returning the bytes interpreted as unsigned integer for 0<=*delta*<3 and signed if *delta*==3. """ @@ -139,30 +131,30 @@ def _dispatch(table, min, max=None, state=None, args=('raw',)): matches *state* if not None, reads arguments from the file according to *args*. - *table* - the dispatch table to be filled in - - *min* - minimum opcode for calling this function - - *max* - maximum opcode for calling this function, None if only *min* is allowed - - *state* - state of the Dvi object in which these opcodes are allowed - - *args* - sequence of argument specifications: - - ``'raw'``: opcode minus minimum - ``'u1'``: read one unsigned byte - ``'u4'``: read four bytes, treat as an unsigned number - ``'s4'``: read four bytes, treat as a signed number - ``'slen'``: read (opcode - minimum) bytes, treat as signed - ``'slen1'``: read (opcode - minimum + 1) bytes, treat as signed - ``'ulen1'``: read (opcode - minimum + 1) bytes, treat as unsigned - ``'olen1'``: read (opcode - minimum + 1) bytes, treat as unsigned - if under four bytes, signed if four bytes + Parameters + ---------- + table : dict[int, callable] + The dispatch table to be filled in. + + min, max : int + Range of opcodes that calls the registered function; *max* defaults to + *min*. + + state : _dvistate, optional + State of the Dvi object in which these opcodes are allowed. + + args : list[str], default: ['raw'] + Sequence of argument specifications: + + - 'raw': opcode minus minimum + - 'u1': read one unsigned byte + - 'u4': read four bytes, treat as an unsigned number + - 's4': read four bytes, treat as a signed number + - 'slen': read (opcode - minimum) bytes, treat as signed + - 'slen1': read (opcode - minimum + 1) bytes, treat as signed + - 'ulen1': read (opcode - minimum + 1) bytes, treat as unsigned + - 'olen1': read (opcode - minimum + 1) bytes, treat as unsigned + if under four bytes, signed if four bytes """ def decorate(method): get_args = [_arg_mapping[x] for x in args] @@ -185,6 +177,7 @@ def wrapper(self, byte): class Dvi: """ A reader for a dvi ("device-independent") file, as produced by TeX. + The current implementation can only iterate through pages in order, and does not even attempt to verify the postamble. @@ -956,8 +949,9 @@ def _parse_and_cache_line(self, line): def _parse_enc(path): r""" - Parses a \*.enc file referenced from a psfonts.map style file. - The format this class understands is a very limited subset of PostScript. + Parse a \*.enc file referenced from a psfonts.map style file. + + The format supported by this function is a tiny subset of PostScript. Parameters ---------- diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index abe8ec694922..b70dda7e3d7a 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -928,11 +928,15 @@ def _break_share_link(ax, grouper): self.stale = True self._localaxes.remove(ax) + # Break link between any shared axes for name in ax._axis_names: last_ax = _break_share_link(ax, ax._shared_axes[name]) if last_ax is not None: _reset_locators_and_formatters(getattr(last_ax, f"{name}axis")) + # Break link between any twinned axes + _break_share_link(ax, ax._twinned_axes) + # Note: in the docstring below, the newlines in the examples after the # calls to legend() allow replacing it with figlegend() to generate the # docstring of pyplot.figlegend. @@ -2282,6 +2286,7 @@ def __init__(self, facecolor=facecolor, edgecolor=edgecolor, linewidth=linewidth, # Don't let the figure patch influence bbox calculation. in_layout=False) + self._linewidth = linewidth self._set_artist_props(self.patch) self.patch.set_antialiased(False) @@ -2736,13 +2741,20 @@ def set_figheight(self, val, forward=True): """ self.set_size_inches(self.get_figwidth(), val, forward=forward) - def clf(self, keep_observers=False): + def clf(self, keep_observers=False, refetch_rcparams=False): """ Clear the figure. - Set *keep_observers* to True if, for example, - a gui widget is tracking the Axes in the figure. + Parameters + ---------- + keep_observers: bool, optional + Set to True if, for example, a GUI widget is tracking the Axes in + the figure. + refetch_rcparams: bool, optional + Set to True to refetch rcParams and update existing Figure + parameters to match. """ + self.suppressComposite = None self.callbacks = cbook.CallbackRegistry() @@ -2766,11 +2778,62 @@ def clf(self, keep_observers=False): self._supxlabel = None self._supylabel = None + if refetch_rcparams: + # if refetching rcparams, store their vals in local vars + figsize = mpl.rcParams['figure.figsize'] + dpi = mpl.rcParams['figure.dpi'] + facecolor = mpl.rcParams['figure.facecolor'] + edgecolor = mpl.rcParams['figure.edgecolor'] + frameon = mpl.rcParams['figure.frameon'] + tight = mpl.rcParams['figure.autolayout'] + constrained = mpl.rcParams['figure.constrained_layout.use'] + # then utilize local vars to update Figure attributes... + # figsize adjustments + if not ( + np.isfinite(figsize).all() + or (np.array(figsize) < 0).any() + ): + raise ValueError( + f"figure size must be positive finite not {figsize}" + ) + self.bbox_inches = Bbox.from_bounds(0, 0, *figsize) + # dpi adjustments + self.dpi_scale_trans = Affine2D().scale(dpi) + self._dpi = dpi + self.bbox = TransformedBbox(self.bbox_inches, self.dpi_scale_trans) + self.figbbox = self.bbox + self.transFigure = BboxTransformTo(self.bbox) + self.transSubfigure = self.transFigure + # facecolor and edgecolor adjustments + self.set_facecolor(facecolor) + self.set_edgecolor(edgecolor) + # frameon adjustments, keeping linewidth + self.patch = Rectangle( + xy=(0, 0), width=1, height=1, visible=frameon, + facecolor=facecolor, edgecolor=edgecolor, + linewidth=self._linewidth, + # Don't let the figure patch influence bbox calculation. + in_layout=False) + self._set_artist_props(self.patch) + self.patch.set_antialiased(False) + # tight layout call using tight rcparam + self._tight = bool(tight) + self._tight_parameters = tight if isinstance(tight, dict) else {} + # constrained layout call using rcparam + self._constrained = bool(constrained) + if isinstance(constrained, dict): + self.set_constrained_layout_pads(**constrained) + else: + self.set_constrained_layout_pads() + self.stale = True - def clear(self, keep_observers=False): + def clear(self, keep_observers=False, refetch_rcparams=False): """Clear the figure -- synonym for `clf`.""" - self.clf(keep_observers=keep_observers) + self.clf( + keep_observers=keep_observers, + refetch_rcparams=refetch_rcparams + ) @_finalize_rasterization @allow_rasterization @@ -2808,7 +2871,7 @@ def draw(self, renderer): self.canvas.draw_event(renderer) - def draw_no_output(self): + def draw_without_rendering(self): """ Draw the figure with no output. Useful to get the final size of artists that require a draw before their size is known (e.g. text). diff --git a/lib/matplotlib/gridspec.py b/lib/matplotlib/gridspec.py index 752048d64a59..74b35d41797d 100644 --- a/lib/matplotlib/gridspec.py +++ b/lib/matplotlib/gridspec.py @@ -490,11 +490,19 @@ def __init__(self, nrows, ncols, wspace=None, hspace=None, height_ratios=None, width_ratios=None): """ - The number of rows and number of columns of the grid need to - be set. An instance of SubplotSpec is also needed to be set - from which the layout parameters will be inherited. The wspace - and hspace of the layout can be optionally specified or the - default values (from the figure or rcParams) will be used. + Parameters + ---------- + nrows, ncols : int + Number of rows and number of columns of the grid. + subplot_spec : SubplotSpec + Spec from which the layout parameters are inherited. + wspace, hspace : float, optional + See `GridSpec` for more details. If not specified default values + (from the figure or rcParams) are used. + height_ratios : array-like of length *nrows*, optional + See `GridSpecBase` for details. + width_ratios : array-like of length *ncols*, optional + See `GridSpecBase` for details. """ self._wspace = wspace self._hspace = hspace diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index ca5b7da5f808..2036bf7e17c9 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -537,11 +537,14 @@ def _make_image(self, A, in_bbox, out_bbox, clip_bbox, magnification=1.0, if isinstance(self.norm, mcolors.LogNorm) and s_vmin <= 0: # Don't give 0 or negative values to LogNorm s_vmin = np.finfo(scaled_dtype).eps - with cbook._setattr_cm(self.norm, - vmin=s_vmin, - vmax=s_vmax, - ): - output = self.norm(resampled_masked) + # Block the norm from sending an update signal during the + # temporary vmin/vmax change + with self.norm.callbacks.blocked(): + with cbook._setattr_cm(self.norm, + vmin=s_vmin, + vmax=s_vmax, + ): + output = self.norm(resampled_masked) else: if A.ndim == 2: # _interpolation_stage == 'rgba' self.norm.autoscale_None(A) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index 09218431b0cb..c03030abf7f3 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -388,17 +388,20 @@ def __init__( #: instance. self._custom_handler_map = handler_map - locals_view = locals() - for name in ["numpoints", "markerscale", "shadow", "columnspacing", - "scatterpoints", "handleheight", 'borderpad', - 'labelspacing', 'handlelength', 'handletextpad', - 'borderaxespad']: - if locals_view[name] is None: - value = mpl.rcParams["legend." + name] - else: - value = locals_view[name] - setattr(self, name, value) - del locals_view + def val_or_rc(val, rc_name): + return val if val is not None else mpl.rcParams[rc_name] + + self.numpoints = val_or_rc(numpoints, 'legend.numpoints') + self.markerscale = val_or_rc(markerscale, 'legend.markerscale') + self.scatterpoints = val_or_rc(scatterpoints, 'legend.scatterpoints') + self.borderpad = val_or_rc(borderpad, 'legend.borderpad') + self.labelspacing = val_or_rc(labelspacing, 'legend.labelspacing') + self.handlelength = val_or_rc(handlelength, 'legend.handlelength') + self.handleheight = val_or_rc(handleheight, 'legend.handleheight') + self.handletextpad = val_or_rc(handletextpad, 'legend.handletextpad') + self.borderaxespad = val_or_rc(borderaxespad, 'legend.borderaxespad') + self.columnspacing = val_or_rc(columnspacing, 'legend.columnspacing') + self.shadow = val_or_rc(shadow, 'legend.shadow') # trim handles and labels if illegal label... _lab, _hand = [], [] for label, handle in zip(labels, handles): @@ -654,38 +657,24 @@ def draw(self, renderer): @classmethod def get_default_handler_map(cls): - """ - A class method that returns the default handler map. - """ + """Return the global default handler map, shared by all legends.""" return cls._default_handler_map @classmethod def set_default_handler_map(cls, handler_map): - """ - A class method to set the default handler map. - """ + """Set the global default handler map, shared by all legends.""" cls._default_handler_map = handler_map @classmethod def update_default_handler_map(cls, handler_map): - """ - A class method to update the default handler map. - """ + """Update the global default handler map, shared by all legends.""" cls._default_handler_map.update(handler_map) def get_legend_handler_map(self): - """ - Return the handler map. - """ - + """Return this legend instance's handler map.""" default_handler_map = self.get_default_handler_map() - - if self._custom_handler_map: - hm = default_handler_map.copy() - hm.update(self._custom_handler_map) - return hm - else: - return default_handler_map + return ({**default_handler_map, **self._custom_handler_map} + if self._custom_handler_map else default_handler_map) @staticmethod def get_legend_handler(legend_handler_map, orig_handle): @@ -1108,11 +1097,7 @@ def get_draggable(self): # Helper functions to parse legend arguments for both `figure.legend` and # `axes.legend`: def _get_legend_handles(axs, legend_handler_map=None): - """ - Return a generator of artists that can be used as handles in - a legend. - - """ + """Yield artists that can be used as handles in a legend.""" handles_original = [] for ax in axs: handles_original += [ @@ -1127,14 +1112,9 @@ def _get_legend_handles(axs, legend_handler_map=None): if isinstance(a, (Line2D, Patch, Collection))), *axx.containers] - handler_map = Legend.get_default_handler_map() - - if legend_handler_map is not None: - handler_map = handler_map.copy() - handler_map.update(legend_handler_map) - + handler_map = {**Legend.get_default_handler_map(), + **(legend_handler_map or {})} has_handler = Legend.get_legend_handler - for handle in handles_original: label = handle.get_label() if label != '_nolegend_' and has_handler(handler_map, handle): @@ -1142,13 +1122,9 @@ def _get_legend_handles(axs, legend_handler_map=None): def _get_legend_handles_labels(axs, legend_handler_map=None): - """ - Return handles and labels for legend, internal method. - - """ + """Return handles and labels for legend.""" handles = [] labels = [] - for handle in _get_legend_handles(axs, legend_handler_map): label = handle.get_label() if label and not label.startswith('_'): @@ -1204,7 +1180,7 @@ def _parse_legend_args(axs, *args, handles=None, labels=None, **kwargs): """ log = logging.getLogger(__name__) - handlers = kwargs.get('handler_map', {}) or {} + handlers = kwargs.get('handler_map') extra_args = () if (handles is not None or labels is not None) and args: @@ -1227,7 +1203,10 @@ def _parse_legend_args(axs, *args, handles=None, labels=None, **kwargs): elif len(args) == 0: handles, labels = _get_legend_handles_labels(axs, handlers) if not handles: - log.warning('No handles with labels found to put in legend.') + log.warning( + "No artists with labels found to put in legend. Note that " + "artists whose label start with an underscore are ignored " + "when legend() is called with no argument.") # One argument. User defined labels - automatic handle detection. elif len(args) == 1: diff --git a/lib/matplotlib/legend_handler.py b/lib/matplotlib/legend_handler.py index b289e26cc1f5..6cf6b8ec31c7 100644 --- a/lib/matplotlib/legend_handler.py +++ b/lib/matplotlib/legend_handler.py @@ -214,19 +214,6 @@ class HandlerLine2DCompound(HandlerNpoints): a line-only with a marker-only artist. May be deprecated in the future. """ - def __init__(self, marker_pad=0.3, numpoints=None, **kwargs): - """ - Parameters - ---------- - marker_pad : float - Padding between points in legend entry. - numpoints : int - Number of points to show in legend entry. - **kwargs - Keyword arguments forwarded to `.HandlerNpoints`. - """ - super().__init__(marker_pad=marker_pad, numpoints=numpoints, **kwargs) - def create_artists(self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans): @@ -286,20 +273,6 @@ class HandlerLine2D(HandlerNpoints): artist for the line and another for the marker(s). """ - def __init__(self, marker_pad=0.3, numpoints=None, **kw): - """ - Parameters - ---------- - marker_pad : float - Padding between points in legend entry. - numpoints : int - Number of points to show in legend entry. - **kwargs - Keyword arguments forwarded to `.HandlerNpoints`. - """ - HandlerNpoints.__init__(self, marker_pad=marker_pad, - numpoints=numpoints, **kw) - def create_artists(self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans): @@ -593,7 +566,7 @@ def create_artists(self, legend, orig_handle, self.update_prop(legline, plotlines, legend) legline.set_drawstyle('default') - legline.set_marker('None') + legline.set_marker('none') self.update_prop(legline_marker, plotlines, legend) legline_marker.set_linestyle('None') diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index 8f4ddaa5c6ea..b4614868b784 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -601,7 +601,7 @@ def get_markevery(self): def set_picker(self, p): """ - Sets the event picker details for the line. + Set the event picker details for the line. Parameters ---------- @@ -664,7 +664,8 @@ def recache(self, always=False): self.axes.name == 'rectilinear' and self.axes.get_xscale() == 'linear' and self._markevery is None and - self.get_clip_on()): + self.get_clip_on() and + self.get_transform() == self.axes.transData): self._subslice = True nanmask = np.isnan(x) if nanmask.any(): @@ -688,7 +689,7 @@ def recache(self, always=False): def _transform_path(self, subslice=None): """ - Puts a TransformedPath instance at self._transformed_path; + Put a TransformedPath instance at self._transformed_path; all invalidation of the transform is then handled by the TransformedPath instance. """ @@ -1092,15 +1093,15 @@ def set_linestyle(self, ls): - A string: - =============================== ================= - Linestyle Description - =============================== ================= - ``'-'`` or ``'solid'`` solid line - ``'--'`` or ``'dashed'`` dashed line - ``'-.'`` or ``'dashdot'`` dash-dotted line - ``':'`` or ``'dotted'`` dotted line - ``'None'`` or ``' '`` or ``''`` draw nothing - =============================== ================= + ========================================== ================= + linestyle description + ========================================== ================= + ``'-'`` or ``'solid'`` solid line + ``'--'`` or ``'dashed'`` dashed line + ``'-.'`` or ``'dashdot'`` dash-dotted line + ``':'`` or ``'dotted'`` dotted line + ``'none'``, ``'None'``, ``' '``, or ``''`` draw nothing + ========================================== ================= - Alternatively a dash tuple of the following form can be provided:: diff --git a/lib/matplotlib/markers.py b/lib/matplotlib/markers.py index be1f81ca3b1e..656d225567fb 100644 --- a/lib/matplotlib/markers.py +++ b/lib/matplotlib/markers.py @@ -45,7 +45,8 @@ ``9`` (``CARETRIGHTBASE``) |m34| caretright (centered at base) ``10`` (``CARETUPBASE``) |m35| caretup (centered at base) ``11`` (``CARETDOWNBASE``) |m36| caretdown (centered at base) -``"None"``, ``" "`` or ``""`` nothing +``"none"`` or ``"None"`` nothing +``" "`` or ``""`` nothing ``'$...$'`` |m37| Render the string using mathtext. E.g ``"$f$"`` for marker showing the letter ``f``. @@ -63,9 +64,9 @@ rotated by ``angle``. ============================== ====== ========================================= -``None`` is the default which means 'nothing', however this table is -referred to from other docs for the valid inputs from marker inputs and in -those cases ``None`` still means 'default'. +``None`` also means 'nothing' when directly constructing a `.MarkerStyle`, but +note that there are other contexts where ``marker=None`` instead means "the +default marker" (e.g. :rc:`scatter.marker` for `.Axes.scatter`). Note that special symbols can be defined via the :doc:`STIX math font `, @@ -127,6 +128,7 @@ """ from collections.abc import Sized +import inspect import numpy as np @@ -199,6 +201,7 @@ class MarkerStyle: CARETUPBASE: 'caretupbase', CARETDOWNBASE: 'caretdownbase', "None": 'nothing', + "none": 'nothing', None: 'nothing', ' ': 'nothing', '': 'nothing' @@ -216,24 +219,37 @@ class MarkerStyle: # TODO: Is this ever used as a non-constant? _point_size_reduction = 0.5 - def __init__(self, marker=None, fillstyle=None): + _unset = object() # For deprecation of MarkerStyle(). + + def __init__(self, marker=_unset, fillstyle=None): """ Parameters ---------- - marker : str, array-like, Path, MarkerStyle, or None, default: None + marker : str, array-like, Path, MarkerStyle, or None - Another instance of *MarkerStyle* copies the details of that ``marker``. - - *None* means no marker. - - For other possible marker values see the module docstring + - *None* means no marker. This is the deprecated default. + - For other possible marker values, see the module docstring `matplotlib.markers`. - fillstyle : str, default: 'full' + fillstyle : str, default: :rc:`markers.fillstyle` One of 'full', 'left', 'right', 'bottom', 'top', 'none'. """ self._marker_function = None self._set_fillstyle(fillstyle) + # Remove _unset and signature rewriting after deprecation elapses. + if marker is self._unset: + marker = "" + _api.warn_deprecated( + "3.6", message="Calling MarkerStyle() with no parameters is " + "deprecated since %(since)s; support will be removed " + "%(removal)s. Use MarkerStyle('') to construct an empty " + "MarkerStyle.") self._set_marker(marker) + __init__.__signature__ = inspect.signature( # Only for deprecation period. + lambda self, marker, fillstyle=None: None) + def _recache(self): if self._marker_function is None: return diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py index 656aeb64dc0d..0ce21c5ba200 100644 --- a/lib/matplotlib/mathtext.py +++ b/lib/matplotlib/mathtext.py @@ -24,19 +24,27 @@ import numpy as np from PIL import Image -from matplotlib import _api, colors as mcolors, rcParams, _mathtext +from matplotlib import ( + _api, colors as mcolors, rcParams, _mathtext, _mathtext_data) from matplotlib.ft2font import FT2Image, LOAD_NO_HINTING from matplotlib.font_manager import FontProperties -# Backcompat imports, all are deprecated as of 3.4. -from matplotlib._mathtext import ( # noqa: F401 - SHRINK_FACTOR, GROW_FACTOR, NUM_SIZE_LEVELS) -from matplotlib._mathtext_data import ( # noqa: F401 - latex_to_bakoma, latex_to_cmex, latex_to_standard, stix_virtual_fonts, - tex2uni) _log = logging.getLogger(__name__) +@_api.caching_module_getattr +class __getattr__: + locals().update({ + name: _api.deprecated("3.4")( + property(lambda self, _mod=mod, _name=name: getattr(_mod, _name))) + for mod, names in [ + (_mathtext, ["SHRINK_FACTOR", "GROW_FACTOR", "NUM_SIZE_LEVELS"]), + (_mathtext_data, [ + "latex_to_bakoma", "latex_to_cmex", "latex_to_standard", + "stix_virtual_fonts", "tex2uni"])] + for name in names}) + + get_unicode_index = _mathtext.get_unicode_index get_unicode_index.__module__ = __name__ @@ -580,18 +588,12 @@ def math_to_image(s, filename_or_obj, prop=None, dpi=None, format=None): format is determined as for `.Figure.savefig`. """ from matplotlib import figure - # backend_agg supports all of the core output formats - from matplotlib.backends import backend_agg - - if prop is None: - prop = FontProperties() parser = MathTextParser('path') width, height, depth, _, _ = parser.parse(s, dpi=72, prop=prop) fig = figure.Figure(figsize=(width / 72.0, height / 72.0)) fig.text(0, depth/height, s, fontproperties=prop) - backend_agg.FigureCanvasAgg(fig) fig.savefig(filename_or_obj, dpi=dpi, format=format) return depth diff --git a/lib/matplotlib/mpl-data/matplotlibrc b/lib/matplotlib/mpl-data/matplotlibrc index 19e89e3cdd5e..106d881ce88c 100644 --- a/lib/matplotlib/mpl-data/matplotlibrc +++ b/lib/matplotlib/mpl-data/matplotlibrc @@ -71,9 +71,9 @@ ## *************************************************************************** ## The default backend. If you omit this parameter, the first working ## backend from the following list is used: -## MacOSX QtAgg Gtk3Agg TkAgg WxAgg Agg +## MacOSX QtAgg Gtk4Agg Gtk3Agg TkAgg WxAgg Agg ## Other choices include: -## QtCairo GTK3Cairo TkCairo WxCairo Cairo +## QtCairo GTK4Cairo GTK3Cairo TkCairo WxCairo Cairo ## Qt5Agg Qt5Cairo Wx # deprecated. ## PS PDF SVG Template ## You can also deploy your own backend outside of Matplotlib by referring to diff --git a/lib/matplotlib/patches.py b/lib/matplotlib/patches.py index 5e053cb364a3..253e8abe2ef7 100644 --- a/lib/matplotlib/patches.py +++ b/lib/matplotlib/patches.py @@ -349,7 +349,7 @@ def set_edgecolor(self, color): Parameters ---------- - color : color or None or 'auto' + color : color or None """ self._original_edgecolor = color self._set_edgecolor(color) @@ -419,18 +419,15 @@ def set_linestyle(self, ls): """ Set the patch linestyle. - =========================== ================= - linestyle description - =========================== ================= - ``'-'`` or ``'solid'`` solid line - ``'--'`` or ``'dashed'`` dashed line - ``'-.'`` or ``'dashdot'`` dash-dotted line - ``':'`` or ``'dotted'`` dotted line - ``'None'`` draw nothing - ``'none'`` draw nothing - ``' '`` draw nothing - ``''`` draw nothing - =========================== ================= + ========================================== ================= + linestyle description + ========================================== ================= + ``'-'`` or ``'solid'`` solid line + ``'--'`` or ``'dashed'`` dashed line + ``'-.'`` or ``'dashdot'`` dash-dotted line + ``':'`` or ``'dotted'`` dotted line + ``'none'``, ``'None'``, ``' '``, or ``''`` draw nothing + ========================================== ================= Alternatively a dash tuple of the following form can be provided:: diff --git a/lib/matplotlib/path.py b/lib/matplotlib/path.py index c09250123fb9..4280d55eeacd 100644 --- a/lib/matplotlib/path.py +++ b/lib/matplotlib/path.py @@ -162,7 +162,7 @@ def __init__(self, vertices, codes=None, _interpolation_steps=1, @classmethod def _fast_from_codes_and_verts(cls, verts, codes, internals_from=None): """ - Creates a Path instance without the expense of calling the constructor. + Create a Path instance without the expense of calling the constructor. Parameters ---------- diff --git a/lib/matplotlib/projections/polar.py b/lib/matplotlib/projections/polar.py index 322b84c6468d..7ce6292fb897 100644 --- a/lib/matplotlib/projections/polar.py +++ b/lib/matplotlib/projections/polar.py @@ -1399,16 +1399,10 @@ def format_coord(self, theta, r): # (as for linear axes), but for theta, use f-formatting as scientific # notation doesn't make sense and the trailing dot is ugly. def format_sig(value, delta, opt, fmt): - digits_post_decimal = math.floor(math.log10(delta)) - digits_offset = ( - # For "f", only count digits after decimal point. - 0 if fmt == "f" - # For "g", offset by digits before the decimal point. - else math.floor(math.log10(abs(value))) + 1 if value - # For "g", 0 contributes 1 "digit" before the decimal point. - else 1) - fmt_prec = max(0, digits_offset - digits_post_decimal) - return f"{value:-{opt}.{fmt_prec}{fmt}}" + # For "f", only count digits after decimal point. + prec = (max(0, -math.floor(math.log10(delta))) if fmt == "f" else + cbook._g_sig_digits(value, delta)) + return f"{value:-{opt}.{prec}{fmt}}" return ('\N{GREEK SMALL LETTER THETA}={}\N{GREEK SMALL LETTER PI} ' '({}\N{DEGREE SIGN}), r={}').format( diff --git a/lib/matplotlib/pyplot.py b/lib/matplotlib/pyplot.py index 201255da848c..b222466dda45 100644 --- a/lib/matplotlib/pyplot.py +++ b/lib/matplotlib/pyplot.py @@ -212,6 +212,7 @@ def switch_backend(newbackend): current_framework = cbook._get_running_interactive_framework() mapping = {'qt': 'qtagg', 'gtk3': 'gtk3agg', + 'gtk4': 'gtk4agg', 'wx': 'wxagg', 'tk': 'tkagg', 'macosx': 'macosx', @@ -222,7 +223,8 @@ def switch_backend(newbackend): candidates = [best_guess] else: candidates = [] - candidates += ["macosx", "qtagg", "gtk3agg", "tkagg", "wxagg"] + candidates += [ + "macosx", "qtagg", "gtk4agg", "gtk3agg", "tkagg", "wxagg"] # Don't try to fallback on the cairo-based backends as they each have # an additional dependency (pycairo) over the agg-based backend, and diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 2c3c88e2fa66..e582f5cb575a 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -35,7 +35,7 @@ # The capitalized forms are needed for ipython at present; this may # change for later versions. interactive_bk = [ - 'GTK3Agg', 'GTK3Cairo', + 'GTK3Agg', 'GTK3Cairo', 'GTK4Agg', 'GTK4Cairo', 'MacOSX', 'nbAgg', 'QtAgg', 'QtCairo', 'Qt5Agg', 'Qt5Cairo', @@ -149,26 +149,6 @@ def validate_bool(b): raise ValueError('Could not convert "%s" to bool' % b) -def _validate_date_converter(s): - if s is None: - return - s = validate_string(s) - if s not in ['auto', 'concise']: - _api.warn_external(f'date.converter string must be "auto" or ' - f'"concise", not "{s}". Check your matplotlibrc') - return - import matplotlib.dates as mdates - mdates._rcParam_helper.set_converter(s) - - -def _validate_date_int_mult(s): - if s is None: - return - s = validate_bool(s) - import matplotlib.dates as mdates - mdates._rcParam_helper.set_int_mult(s) - - def validate_axisbelow(s): try: return validate_bool(s) @@ -505,14 +485,11 @@ def validate_markevery(s): Parameters ---------- - s : None, int, float, slice, length-2 tuple of ints, - length-2 tuple of floats, list of ints + s : None, int, (int, int), slice, float, (float, float), or list[int] Returns ------- - None, int, float, slice, length-2 tuple of ints, - length-2 tuple of floats, list of ints - + None, int, (int, int), slice, float, (float, float), or list[int] """ # Validate s against type slice float int and None if isinstance(s, (slice, float, int, type(None))): @@ -1036,10 +1013,9 @@ def _convert_validator_spec(key, conv): "date.autoformatter.second": validate_string, "date.autoformatter.microsecond": validate_string, - # 'auto', 'concise', 'auto-noninterval' - 'date.converter': _validate_date_converter, + 'date.converter': ['auto', 'concise'], # for auto date locator, choose interval_multiples - 'date.interval_multiples': _validate_date_int_mult, + 'date.interval_multiples': validate_bool, # legend properties "legend.fancybox": validate_bool, diff --git a/lib/matplotlib/streamplot.py b/lib/matplotlib/streamplot.py index 6de221476490..f076209e5dc9 100644 --- a/lib/matplotlib/streamplot.py +++ b/lib/matplotlib/streamplot.py @@ -26,7 +26,9 @@ def streamplot(axes, x, y, u, v, density=1, linewidth=None, color=None, Parameters ---------- x, y : 1D/2D arrays - Evenly spaced strictly increasing arrays to make a grid. + Evenly spaced strictly increasing arrays to make a grid. If 2D, all + rows of *x* must be equal and all columns of *y* must be equal; i.e., + they must be as if generated by ``np.meshgrid(x_1d, y_1d)``. u, v : 2D arrays *x* and *y*-velocities. The number of rows and columns must match the length of *y* and *x*, respectively. @@ -570,7 +572,7 @@ def _integrate_rk12(x0, y0, dmap, f, maxlength): dx2 = ds * 0.5 * (k1x + k2x) dy2 = ds * 0.5 * (k1y + k2y) - nx, ny = dmap.grid.shape + ny, nx = dmap.grid.shape # Error is normalized to the axes coordinates error = np.hypot((dx2 - dx1) / (nx - 1), (dy2 - dy1) / (ny - 1)) diff --git a/lib/matplotlib/testing/widgets.py b/lib/matplotlib/testing/widgets.py index 49d5cb7175f9..3c3a4b6273bc 100644 --- a/lib/matplotlib/testing/widgets.py +++ b/lib/matplotlib/testing/widgets.py @@ -2,15 +2,16 @@ ======================== Widget testing utilities ======================== -Functions that are useful for testing widgets. -See also matplotlib.tests.test_widgets + +See also :mod:`matplotlib.tests.test_widgets`. """ + import matplotlib.pyplot as plt from unittest import mock def get_ax(): - """Creates plot and returns its axes""" + """Create a plot and return its axes.""" fig, ax = plt.subplots(1, 1) ax.plot([0, 200], [0, 200]) ax.set_aspect(1.0) diff --git a/lib/matplotlib/tests/baseline_images/test_colorbar/proportional_colorbars.png b/lib/matplotlib/tests/baseline_images/test_colorbar/proportional_colorbars.png new file mode 100644 index 000000000000..a1f9745230ba Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_colorbar/proportional_colorbars.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.pdf b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.pdf index 7f29b4a9eabf..f13892ba2bc5 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.pdf and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.png index 99d7e1d44cd8..21f202e5edec 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.svg b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.svg index 869361f76dd0..a95118c95d97 100644 --- a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.svg +++ b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_colormap.svg @@ -1,12 +1,23 @@ - - + + + + + + 2021-08-18T03:11:20.912289 + image/svg+xml + + + Matplotlib v3.4.2.post1692+gb0554f4824.d20210818, https://matplotlib.org/ + + + + + - + @@ -15,7 +26,7 @@ L 460.8 345.6 L 460.8 0 L 0 0 z -" style="fill:#ffffff;"/> +" style="fill: #ffffff"/> @@ -24,60 +35,60 @@ L 343.296 307.584 L 343.296 41.472 L 57.6 41.472 z -" style="fill:#ffffff;"/> +" style="fill: #ffffff"/> - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + @@ -86,2474 +97,2551 @@ L 0 3.5 - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - - - - - - - - + + + + + + + + + - + - - - + + + - + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - + + + + + + + + - + - + - - - + + + - + - + - - - - - - - + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - + + + - + - - - + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - +" clip-path="url(#p3b712018f5)" style="fill: none; stroke: #ffb000; stroke-width: 2"/> + + + + + + + + + + + + + + + + - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffb900; stroke: #ffb900; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff3a00; stroke: #ff3a00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff8a00; stroke: #ff8a00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff7b00; stroke: #ff7b00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffa800; stroke: #ffa800; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffaa00; stroke: #ffaa00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffa200; stroke: #ffa200; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff8c00; stroke: #ff8c00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff7b00; stroke: #ff7b00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff7500; stroke: #ff7500; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff4400; stroke: #ff4400; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffbf00; stroke: #ffbf00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffc100; stroke: #ffc100; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffdf00; stroke: #ffdf00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffeb00; stroke: #ffeb00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #fffb00; stroke: #fffb00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #fff200; stroke: #fff200; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #fff500; stroke: #fff500; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffed00; stroke: #ffed00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffce00; stroke: #ffce00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffc200; stroke: #ffc200; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffb300; stroke: #ffb300; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff9f00; stroke: #ff9f00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff8d00; stroke: #ff8d00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffc700; stroke: #ffc700; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff9700; stroke: #ff9700; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffa300; stroke: #ffa300; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffa700; stroke: #ffa700; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff4e00; stroke: #ff4e00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff4600; stroke: #ff4600; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff1f00; stroke: #ff1f00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffa300; stroke: #ffa300; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff4c00; stroke: #ff4c00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff8600; stroke: #ff8600; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff7400; stroke: #ff7400; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff5e00; stroke: #ff5e00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff8000; stroke: #ff8000; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff8700; stroke: #ff8700; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff4f00; stroke: #ff4f00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff7600; stroke: #ff7600; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ff5e00; stroke: #ff5e00; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffb100; stroke: #ffb100; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffe400; stroke: #ffe400; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffa400; stroke: #ffa400; stroke-width: 2; stroke-linecap: round"/> - - + +" clip-path="url(#p3b712018f5)" style="fill: #ffc300; stroke: #ffc300; stroke-width: 2; stroke-linecap: round"/> + + + + + + + + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - + +" style="fill: #ffffff"/> - - - + + + + + - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + - + + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - + + - - + + diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.pdf b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.pdf index f1644d5b613c..1b14d45c3059 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.pdf and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.png index 51e4e5d859c6..b928223c3206 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.svg b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.svg index ba0baa1da49e..2a2bec622027 100644 --- a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.svg +++ b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_linewidth.svg @@ -1,12 +1,23 @@ - - + + + + + + 2021-08-18T03:24:40.872884 + image/svg+xml + + + Matplotlib v3.4.2.post1692+gb0554f4824.d20210818, https://matplotlib.org/ + + + + + - + @@ -15,7 +26,7 @@ L 460.8 345.6 L 460.8 0 L 0 0 z -" style="fill:#ffffff;"/> +" style="fill: #ffffff"/> @@ -24,60 +35,60 @@ L 414.72 307.584 L 414.72 41.472 L 57.6 41.472 z -" style="fill:#ffffff;"/> +" style="fill: #ffffff"/> - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + @@ -86,2462 +97,3002 @@ L 0 3.5 - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +" clip-path="url(#p122428e17d)" style="fill: none; stroke: #000000; stroke-width: 5"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.646693; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.763217; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.085853; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.024196; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.335626; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.703123; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.140137; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.446783; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 3.39267; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.997896; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.689053; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.412889; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.596691; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.731148; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.826019; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.324419; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.981644; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.611973; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.459108; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.704699; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.433977; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.835914; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.347416; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.312264; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.138664; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.604062; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.274401; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.315827; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.95716; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.721473; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.468045; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 3.216579; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.887734; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.377428; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.158777; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 0.644319; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.44633; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.931274; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.117826; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 3.027536; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.576524; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.682513; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.441104; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.437048; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.108591; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 2.933469; stroke-linecap: round"/> - - + +" clip-path="url(#p122428e17d)" style="stroke: #000000; stroke-width: 1.361439; stroke-linecap: round"/> + + + + + + + + + + + + + + + + + + + + + + + + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - + + diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.pdf b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.pdf index f8f94f0b2a3f..7d6beca0b3ac 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.pdf and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.png index 02800cbde2c4..c3ce699983c4 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.svg b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.svg index 8b40bc4c66f9..17e4c78c2490 100644 --- a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.svg +++ b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_masks_and_nans.svg @@ -1,12 +1,23 @@ - - + + + + + + 2021-08-18T03:08:55.311923 + image/svg+xml + + + Matplotlib v3.4.2.post1692+gb0554f4824, https://matplotlib.org/ + + + + + - + @@ -15,7 +26,7 @@ L 460.8 345.6 L 460.8 0 L 0 0 z -" style="fill:#ffffff;"/> +" style="fill: #ffffff"/> @@ -24,60 +35,60 @@ L 414.72 307.584 L 414.72 41.472 L 57.6 41.472 z -" style="fill:#ffffff;"/> +" style="fill: #ffffff"/> - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + @@ -86,3624 +97,3749 @@ L 0 3.5 - +" style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - + + + + + + + + + - + - - - - - - + + + + + + - + - - - - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + - + - + - + - + - - - - - +" clip-path="url(#p0ebb051c42)" style="fill: none; stroke: #0a549e; stroke-width: 1.5"/> + + + + + + + + + - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2c7cba; stroke: #2c7cba; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #3e8ec4; stroke: #3e8ec4; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #3282be; stroke: #3282be; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #3a8ac2; stroke: #3a8ac2; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #56a0ce; stroke: #56a0ce; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #4292c6; stroke: #4292c6; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #7ab6d9; stroke: #7ab6d9; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #8dc1dd; stroke: #8dc1dd; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #87bddc; stroke: #87bddc; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #c7dbef; stroke: #c7dbef; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #cfe1f2; stroke: #cfe1f2; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #e1edf8; stroke: #e1edf8; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2474b7; stroke: #2474b7; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2070b4; stroke: #2070b4; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #115ca5; stroke: #115ca5; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #09529d; stroke: #09529d; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #084c95; stroke: #084c95; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #084285; stroke: #084285; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #083979; stroke: #083979; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #083776; stroke: #083776; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #083979; stroke: #083979; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #084184; stroke: #084184; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #084387; stroke: #084387; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #125ea6; stroke: #125ea6; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #0f5aa3; stroke: #0f5aa3; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #1c6ab0; stroke: #1c6ab0; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2171b5; stroke: #2171b5; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2d7dbb; stroke: #2d7dbb; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #3888c1; stroke: #3888c1; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #4493c7; stroke: #4493c7; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #519ccc; stroke: #519ccc; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #68acd5; stroke: #68acd5; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #4e9acb; stroke: #4e9acb; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #539ecd; stroke: #539ecd; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #81badb; stroke: #81badb; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #9fcae1; stroke: #9fcae1; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #60a7d2; stroke: #60a7d2; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2979b9; stroke: #2979b9; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #9dcae1; stroke: #9dcae1; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #5ba3d0; stroke: #5ba3d0; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #c2d9ee; stroke: #c2d9ee; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #65aad4; stroke: #65aad4; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #61a7d2; stroke: #61a7d2; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #87bddc; stroke: #87bddc; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #58a1cf; stroke: #58a1cf; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #65aad4; stroke: #65aad4; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #bfd8ed; stroke: #bfd8ed; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #4b98ca; stroke: #4b98ca; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #b7d4ea; stroke: #b7d4ea; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #539ecd; stroke: #539ecd; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #add0e6; stroke: #add0e6; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #5ca4d0; stroke: #5ca4d0; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #89bedc; stroke: #89bedc; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #63a8d3; stroke: #63a8d3; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #95c5df; stroke: #95c5df; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #72b2d8; stroke: #72b2d8; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #8abfdd; stroke: #8abfdd; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #7fb9da; stroke: #7fb9da; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #4896c8; stroke: #4896c8; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #0a539e; stroke: #0a539e; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #4896c8; stroke: #4896c8; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #549fcd; stroke: #549fcd; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #75b4d8; stroke: #75b4d8; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #65aad4; stroke: #65aad4; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2474b7; stroke: #2474b7; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #56a0ce; stroke: #56a0ce; stroke-width: 1.5; stroke-linecap: round"/> - - + +" clip-path="url(#p0ebb051c42)" style="fill: #2b7bba; stroke: #2b7bba; stroke-width: 1.5; stroke-linecap: round"/> + + + + + + + + + + + + + + + + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + +" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - + + diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.pdf b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.pdf index f9bf53975faf..a773da141920 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.pdf and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.pdf differ diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 509910bdeec1..2f43af416f41 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -4117,8 +4117,9 @@ def test_eventplot_orientation(data, orientation): @image_comparison(['marker_styles.png'], remove_text=True) def test_marker_styles(): fig, ax = plt.subplots() - for y, marker in enumerate(sorted(matplotlib.markers.MarkerStyle.markers, - key=lambda x: str(type(x))+str(x))): + for y, marker in enumerate(sorted( + {*matplotlib.markers.MarkerStyle.markers} - {"none"}, + key=lambda x: str(type(x))+str(x))): ax.plot((y % 2)*5 + np.arange(10)*10, np.ones(10)*10*y, linestyle='', marker=marker, markersize=10+y/5, label=marker) @@ -4663,6 +4664,21 @@ def test_spectrum(): ax.set(xlabel="", ylabel="") +@check_figures_equal(extensions=['png']) +def test_twin_remove(fig_test, fig_ref): + ax_test = fig_test.add_subplot() + ax_twinx = ax_test.twinx() + ax_twiny = ax_test.twiny() + ax_twinx.remove() + ax_twiny.remove() + + ax_ref = fig_ref.add_subplot() + # Ideally we also undo tick changes when calling ``remove()``, but for now + # manually set the ticks of the reference image to match the test image + ax_ref.xaxis.tick_bottom() + ax_ref.yaxis.tick_left() + + @image_comparison(['twin_spines.png'], remove_text=True) def test_twin_spines(): @@ -4793,7 +4809,7 @@ def test_reset_ticks(fig_test, fig_ref): labelsize=14, labelcolor='C1', labelrotation=45, grid_color='C2', grid_alpha=0.8, grid_linewidth=3, grid_linestyle='--') - fig.draw_no_output() + fig.draw_without_rendering() # After we've changed any setting on ticks, reset_ticks will mean # re-creating them from scratch. This *should* appear the same as not diff --git a/lib/matplotlib/tests/test_backend_pgf.py b/lib/matplotlib/tests/test_backend_pgf.py index a463c96e61fc..9b5b0b28ee3f 100644 --- a/lib/matplotlib/tests/test_backend_pgf.py +++ b/lib/matplotlib/tests/test_backend_pgf.py @@ -337,3 +337,30 @@ def test_minus_signs_with_tex(fig_test, fig_ref, texsystem): mpl.rcParams["pgf.texsystem"] = texsystem fig_test.text(.5, .5, "$-1$") fig_ref.text(.5, .5, "$\N{MINUS SIGN}1$") + + +@pytest.mark.backend("pgf") +def test_sketch_params(): + fig, ax = plt.subplots(figsize=(3, 3)) + ax.set_xticks([]) + ax.set_yticks([]) + ax.set_frame_on(False) + handle, = ax.plot([0, 1]) + handle.set_sketch_params(scale=5, length=30, randomness=42) + + with BytesIO() as fd: + fig.savefig(fd, format='pgf') + buf = fd.getvalue().decode() + + baseline = r"""\pgfpathmoveto{\pgfqpoint{0.375000in}{0.300000in}}% +\pgfpathlineto{\pgfqpoint{2.700000in}{2.700000in}}% +\usepgfmodule{decorations}% +\usepgflibrary{decorations.pathmorphing}% +\pgfkeys{/pgf/decoration/.cd, """ \ + r"""segment length = 0.150000in, amplitude = 0.100000in}% +\pgfmathsetseed{42}% +\pgfdecoratecurrentpath{random steps}% +\pgfusepath{stroke}%""" + # \pgfdecoratecurrentpath must be after the path definition and before the + # path is used (\pgfusepath) + assert baseline in buf diff --git a/lib/matplotlib/tests/test_backends_interactive.py b/lib/matplotlib/tests/test_backends_interactive.py index a1f27fea577a..bb17e5fdaf82 100644 --- a/lib/matplotlib/tests/test_backends_interactive.py +++ b/lib/matplotlib/tests/test_backends_interactive.py @@ -29,8 +29,8 @@ def _get_testable_interactive_backends(): *[([qt_api, "cairocffi"], {"MPLBACKEND": "qtcairo", "QT_API": qt_api}) for qt_api in ["PyQt6", "PySide6", "PyQt5", "PySide2"]], - (["cairo", "gi"], {"MPLBACKEND": "gtk3agg"}), - (["cairo", "gi"], {"MPLBACKEND": "gtk3cairo"}), + *[(["cairo", "gi"], {"MPLBACKEND": f"gtk{version}{renderer}"}) + for version in [3, 4] for renderer in ["agg", "cairo"]], (["tkinter"], {"MPLBACKEND": "tkagg"}), (["wx"], {"MPLBACKEND": "wx"}), (["wx"], {"MPLBACKEND": "wxagg"}), @@ -45,6 +45,12 @@ def _get_testable_interactive_backends(): reason = "{} cannot be imported".format(", ".join(missing)) elif env["MPLBACKEND"] == 'macosx' and os.environ.get('TF_BUILD'): reason = "macosx backend fails on Azure" + elif env["MPLBACKEND"].startswith('gtk'): + import gi + version = env["MPLBACKEND"][3] + repo = gi.Repository.get_default() + if f'{version}.0' not in repo.enumerate_versions('Gtk'): + reason = "no usable GTK bindings" marks = [] if reason: marks.append(pytest.mark.skip( @@ -87,7 +93,7 @@ def _test_interactive_impl(): assert_equal = TestCase().assertEqual assert_raises = TestCase().assertRaises - if backend.endswith("agg") and not backend.startswith(("gtk3", "web")): + if backend.endswith("agg") and not backend.startswith(("gtk", "web")): # Force interactive framework setup. plt.figure() diff --git a/lib/matplotlib/tests/test_colorbar.py b/lib/matplotlib/tests/test_colorbar.py index 055c4acb7642..6b691713e7e6 100644 --- a/lib/matplotlib/tests/test_colorbar.py +++ b/lib/matplotlib/tests/test_colorbar.py @@ -221,7 +221,7 @@ def test_colorbar_single_scatter(): ids=['no gridspec', 'with gridspec']) def test_remove_from_figure(use_gridspec): """ - Test `remove_from_figure` with the specified ``use_gridspec`` setting + Test `remove` with the specified ``use_gridspec`` setting """ fig, ax = plt.subplots() sc = ax.scatter([1, 2], [3, 4], cmap="spring") @@ -235,6 +235,23 @@ def test_remove_from_figure(use_gridspec): assert (pre_position.get_points() == post_position.get_points()).all() +def test_remove_from_figure_cl(): + """ + Test `remove` with constrained_layout + """ + fig, ax = plt.subplots(constrained_layout=True) + sc = ax.scatter([1, 2], [3, 4], cmap="spring") + sc.set_array(np.array([5, 6])) + fig.draw_without_rendering() + pre_position = ax.get_position() + cb = fig.colorbar(sc) + cb.remove() + fig.draw_without_rendering() + post_position = ax.get_position() + np.testing.assert_allclose(pre_position.get_points(), + post_position.get_points()) + + def test_colorbarbase(): # smoke test from #3805 ax = plt.gca() @@ -613,7 +630,7 @@ def test_mappable_2d_alpha(): # the original alpha array assert cb.alpha is None assert pc.get_alpha() is x - fig.draw_no_output() + fig.draw_without_rendering() def test_colorbar_label(): @@ -766,7 +783,7 @@ def test_inset_colorbar_layout(): cax = ax.inset_axes([1.02, 0.1, 0.03, 0.8]) cb = fig.colorbar(pc, cax=cax) - fig.draw_no_output() + fig.draw_without_rendering() # make sure this is in the figure. In the colorbar swapping # it was being dropped from the list of children... np.testing.assert_allclose(cb.ax.get_position().bounds, @@ -806,7 +823,7 @@ def test_aspects(): pc = ax[mm, nn].pcolormesh(np.arange(100).reshape(10, 10)) cb[nn][mm] = fig.colorbar(pc, ax=ax[mm, nn], orientation=orient, aspect=aspect, extend=extend) - fig.draw_no_output() + fig.draw_without_rendering() # check the extends are right ratio: np.testing.assert_almost_equal(cb[0][1].ax.get_position().height, cb[0][0].ax.get_position().height * 0.9, @@ -827,3 +844,30 @@ def test_aspects(): np.testing.assert_almost_equal( cb[1][0].ax.get_position(original=False).height * 2, cb[1][2].ax.get_position(original=False).height, decimal=2) + + +@image_comparison(['proportional_colorbars.png'], remove_text=True, + style='mpl20') +def test_proportional_colorbars(): + + x = y = np.arange(-3.0, 3.01, 0.025) + X, Y = np.meshgrid(x, y) + Z1 = np.exp(-X**2 - Y**2) + Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) + Z = (Z1 - Z2) * 2 + + levels = [-1.25, -0.5, -0.125, 0.125, 0.5, 1.25] + cmap = mcolors.ListedColormap( + ['0.3', '0.5', 'white', 'lightblue', 'steelblue']) + cmap.set_under('darkred') + cmap.set_over('crimson') + norm = mcolors.BoundaryNorm(levels, cmap.N) + + extends = ['neither', 'both'] + spacings = ['uniform', 'proportional'] + fig, axs = plt.subplots(2, 2) + for i in range(2): + for j in range(2): + CS3 = axs[i, j].contourf(X, Y, Z, levels, cmap=cmap, norm=norm, + extend=extends[i]) + fig.colorbar(CS3, spacing=spacings[j], ax=axs[i, j]) diff --git a/lib/matplotlib/tests/test_colors.py b/lib/matplotlib/tests/test_colors.py index ae004e957591..bf89a3a82364 100644 --- a/lib/matplotlib/tests/test_colors.py +++ b/lib/matplotlib/tests/test_colors.py @@ -1,5 +1,6 @@ import copy import itertools +import unittest.mock from io import BytesIO import numpy as np @@ -17,7 +18,7 @@ import matplotlib.cbook as cbook import matplotlib.pyplot as plt import matplotlib.scale as mscale -from matplotlib.testing.decorators import image_comparison +from matplotlib.testing.decorators import image_comparison, check_figures_equal @pytest.mark.parametrize('N, result', [ @@ -1408,3 +1409,69 @@ def test_norm_deepcopy(): norm2 = copy.deepcopy(norm) assert norm2._scale is None assert norm2.vmin == norm.vmin + + +def test_norm_callback(): + increment = unittest.mock.Mock(return_value=None) + + norm = mcolors.Normalize() + norm.callbacks.connect('changed', increment) + # Haven't updated anything, so call count should be 0 + assert increment.call_count == 0 + + # Now change vmin and vmax to test callbacks + norm.vmin = 1 + assert increment.call_count == 1 + norm.vmax = 5 + assert increment.call_count == 2 + # callback shouldn't be called if setting to the same value + norm.vmin = 1 + assert increment.call_count == 2 + norm.vmax = 5 + assert increment.call_count == 2 + + +def test_scalarmappable_norm_update(): + norm = mcolors.Normalize() + sm = matplotlib.cm.ScalarMappable(norm=norm, cmap='plasma') + # sm doesn't have a stale attribute at first, set it to False + sm.stale = False + # The mappable should be stale after updating vmin/vmax + norm.vmin = 5 + assert sm.stale + sm.stale = False + norm.vmax = 5 + assert sm.stale + sm.stale = False + norm.clip = True + assert sm.stale + # change to the CenteredNorm and TwoSlopeNorm to test those + # Also make sure that updating the norm directly and with + # set_norm both update the Norm callback + norm = mcolors.CenteredNorm() + sm.norm = norm + sm.stale = False + norm.vcenter = 1 + assert sm.stale + norm = mcolors.TwoSlopeNorm(vcenter=0, vmin=-1, vmax=1) + sm.set_norm(norm) + sm.stale = False + norm.vcenter = 1 + assert sm.stale + + +@check_figures_equal() +def test_norm_update_figs(fig_test, fig_ref): + ax_ref = fig_ref.add_subplot() + ax_test = fig_test.add_subplot() + + z = np.arange(100).reshape((10, 10)) + ax_ref.imshow(z, norm=mcolors.Normalize(10, 90)) + + # Create the norm beforehand with different limits and then update + # after adding to the plot + norm = mcolors.Normalize(0, 1) + ax_test.imshow(z, norm=norm) + # Force initial draw to make sure it isn't already stale + fig_test.canvas.draw() + norm.vmin, norm.vmax = 10, 90 diff --git a/lib/matplotlib/tests/test_constrainedlayout.py b/lib/matplotlib/tests/test_constrainedlayout.py index 007fac6ec1f9..a8222a73d5ee 100644 --- a/lib/matplotlib/tests/test_constrainedlayout.py +++ b/lib/matplotlib/tests/test_constrainedlayout.py @@ -128,7 +128,7 @@ def test_constrained_layout7(): for gs in gsl: fig.add_subplot(gs) # need to trigger a draw to get warning - fig.draw_no_output() + fig.draw_without_rendering() @image_comparison(['constrained_layout8.png']) @@ -309,7 +309,7 @@ def test_constrained_layout18(): ax2 = ax.twinx() example_plot(ax) example_plot(ax2, fontsize=24) - fig.draw_no_output() + fig.draw_without_rendering() assert all(ax.get_position().extents == ax2.get_position().extents) @@ -321,7 +321,7 @@ def test_constrained_layout19(): example_plot(ax2, fontsize=24) ax2.set_title('') ax.set_title('') - fig.draw_no_output() + fig.draw_without_rendering() assert all(ax.get_position().extents == ax2.get_position().extents) @@ -341,11 +341,11 @@ def test_constrained_layout21(): fig, ax = plt.subplots(constrained_layout=True) fig.suptitle("Suptitle0") - fig.draw_no_output() + fig.draw_without_rendering() extents0 = np.copy(ax.get_position().extents) fig.suptitle("Suptitle1") - fig.draw_no_output() + fig.draw_without_rendering() extents1 = np.copy(ax.get_position().extents) np.testing.assert_allclose(extents0, extents1) @@ -355,11 +355,11 @@ def test_constrained_layout22(): """#11035: suptitle should not be include in CL if manually positioned""" fig, ax = plt.subplots(constrained_layout=True) - fig.draw_no_output() + fig.draw_without_rendering() extents0 = np.copy(ax.get_position().extents) fig.suptitle("Suptitle", y=0.5) - fig.draw_no_output() + fig.draw_without_rendering() extents1 = np.copy(ax.get_position().extents) np.testing.assert_allclose(extents0, extents1) @@ -407,7 +407,7 @@ def test_hidden_axes(): # (as does a gridspec slot that is empty) fig, axs = plt.subplots(2, 2, constrained_layout=True) axs[0, 1].set_visible(False) - fig.draw_no_output() + fig.draw_without_rendering() extents1 = np.copy(axs[0, 0].get_position().extents) np.testing.assert_allclose( @@ -433,7 +433,7 @@ def test_colorbar_align(): fig.set_constrained_layout_pads(w_pad=4 / 72, h_pad=4 / 72, hspace=0.1, wspace=0.1) - fig.draw_no_output() + fig.draw_without_rendering() if location in ['left', 'right']: np.testing.assert_allclose(cbs[0].ax.get_position().x0, cbs[2].ax.get_position().x0) @@ -475,7 +475,7 @@ def test_colorbars_no_overlapH(): def test_manually_set_position(): fig, axs = plt.subplots(1, 2, constrained_layout=True) axs[0].set_position([0.2, 0.2, 0.3, 0.3]) - fig.draw_no_output() + fig.draw_without_rendering() pp = axs[0].get_position() np.testing.assert_allclose(pp, [[0.2, 0.2], [0.5, 0.5]]) @@ -483,7 +483,7 @@ def test_manually_set_position(): axs[0].set_position([0.2, 0.2, 0.3, 0.3]) pc = axs[0].pcolormesh(np.random.rand(20, 20)) fig.colorbar(pc, ax=axs[0]) - fig.draw_no_output() + fig.draw_without_rendering() pp = axs[0].get_position() np.testing.assert_allclose(pp, [[0.2, 0.2], [0.44, 0.5]]) @@ -528,7 +528,7 @@ def test_align_labels(): fig.align_ylabels(axs=(ax3, ax1, ax2)) - fig.draw_no_output() + fig.draw_without_rendering() after_align = [ax1.yaxis.label.get_window_extent(), ax2.yaxis.label.get_window_extent(), ax3.yaxis.label.get_window_extent()] @@ -541,22 +541,22 @@ def test_align_labels(): def test_suplabels(): fig, ax = plt.subplots(constrained_layout=True) - fig.draw_no_output() + fig.draw_without_rendering() pos0 = ax.get_tightbbox(fig.canvas.get_renderer()) fig.supxlabel('Boo') fig.supylabel('Booy') - fig.draw_no_output() + fig.draw_without_rendering() pos = ax.get_tightbbox(fig.canvas.get_renderer()) assert pos.y0 > pos0.y0 + 10.0 assert pos.x0 > pos0.x0 + 10.0 fig, ax = plt.subplots(constrained_layout=True) - fig.draw_no_output() + fig.draw_without_rendering() pos0 = ax.get_tightbbox(fig.canvas.get_renderer()) # check that specifying x (y) doesn't ruin the layout fig.supxlabel('Boo', x=0.5) fig.supylabel('Boo', y=0.5) - fig.draw_no_output() + fig.draw_without_rendering() pos = ax.get_tightbbox(fig.canvas.get_renderer()) assert pos.y0 > pos0.y0 + 10.0 assert pos.x0 > pos0.x0 + 10.0 diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index c440003f49c9..96a3db173053 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -76,7 +76,7 @@ def test_date_empty(): # http://sourceforge.net/tracker/?func=detail&aid=2850075&group_id=80706&atid=560720 fig, ax = plt.subplots() ax.xaxis_date() - fig.draw_no_output() + fig.draw_without_rendering() np.testing.assert_allclose(ax.get_xlim(), [mdates.date2num(np.datetime64('2000-01-01')), mdates.date2num(np.datetime64('2010-01-01'))]) @@ -85,7 +85,7 @@ def test_date_empty(): mdates.set_epoch('0000-12-31') fig, ax = plt.subplots() ax.xaxis_date() - fig.draw_no_output() + fig.draw_without_rendering() np.testing.assert_allclose(ax.get_xlim(), [mdates.date2num(np.datetime64('2000-01-01')), mdates.date2num(np.datetime64('2010-01-01'))]) @@ -1152,7 +1152,7 @@ def test_change_converter(): fig.canvas.draw() assert ax.get_xticklabels()[0].get_text() == 'Jan 01 2020' assert ax.get_xticklabels()[1].get_text() == 'Jan 15 2020' - with pytest.warns(UserWarning) as rec: + with pytest.raises(ValueError): plt.rcParams['date.converter'] = 'boo' diff --git a/lib/matplotlib/tests/test_figure.py b/lib/matplotlib/tests/test_figure.py index 7a222f20a058..a9d2ac8bde19 100644 --- a/lib/matplotlib/tests/test_figure.py +++ b/lib/matplotlib/tests/test_figure.py @@ -3,9 +3,13 @@ from pathlib import Path import platform from threading import Timer -from types import SimpleNamespace +from types import BuiltinFunctionType, SimpleNamespace import warnings +import numpy as np +import pytest +from PIL import Image + import matplotlib as mpl from matplotlib import cbook, rcParams from matplotlib._api.deprecation import MatplotlibDeprecationWarning @@ -14,10 +18,9 @@ from matplotlib.figure import Figure from matplotlib.ticker import AutoMinorLocator, FixedFormatter, ScalarFormatter import matplotlib.pyplot as plt +import matplotlib.colors as mcolors import matplotlib.dates as mdates import matplotlib.gridspec as gridspec -import numpy as np -import pytest @image_comparison(['figure_align_labels'], extensions=['png', 'svg'], @@ -117,7 +120,63 @@ def test_clf_keyword(): fig2, ax2 = plt.subplots(2, 1, num=1, clear=True) assert fig0 is fig2 - assert [t.get_text() for t in fig2.texts] == [] + + +def test_clf_refetch_rcparams(): + # calling clf() without kwarg shouldn't account for updates to rcParams + # made after a figure is created + fig0 = plt.figure() + mpl.rcParams["figure.figsize"] = [6.4*2, 4.8*2] + mpl.rcParams["figure.dpi"] = 200.0 + mpl.rcParams["figure.facecolor"] = "blue" + mpl.rcParams["figure.edgecolor"] = "red" + mpl.rcParams["figure.frameon"] = False + mpl.rcParams["figure.autolayout"] = True + mpl.rcParams["figure.constrained_layout.use"] = True + fig0.clf() + assert not fig0.get_figwidth() == mpl.rcParams["figure.figsize"][0] + assert not fig0.get_figheight() == mpl.rcParams["figure.figsize"][1] + assert not fig0.get_dpi() == mpl.rcParams["figure.dpi"] + assert not fig0.get_facecolor() == mcolors.to_rgba( + mpl.rcParams["figure.facecolor"] + ) + assert not fig0.get_edgecolor() == mcolors.to_rgba( + mpl.rcParams["figure.edgecolor"] + ) + assert not fig0.get_frameon() == mpl.rcParams["figure.frameon"] + assert not fig0.get_tight_layout() == mpl.rcParams["figure.autolayout"] + assert not fig0.get_constrained_layout() == ( + mpl.rcParams["figure.constrained_layout.use"] + ) + + # reset rcParams + mpl.style.use("default") + + # calling clf() with kwarg should refetch rcParams and account for updates + # made even after a figure is created + fig1 = plt.figure() + mpl.rcParams["figure.figsize"] = [6.4*2, 4.8*2] + mpl.rcParams["figure.dpi"] = 200.0 + mpl.rcParams["figure.facecolor"] = "blue" + mpl.rcParams["figure.edgecolor"] = "red" + mpl.rcParams["figure.frameon"] = False + mpl.rcParams["figure.autolayout"] = True + mpl.rcParams["figure.constrained_layout.use"] = True + fig1.clf(refetch_rcparams=True) + assert fig1.get_figwidth() == mpl.rcParams["figure.figsize"][0] + assert fig1.get_figheight() == mpl.rcParams["figure.figsize"][1] + assert fig1.get_dpi() == mpl.rcParams["figure.dpi"] + assert fig1.get_facecolor() == mcolors.to_rgba( + mpl.rcParams["figure.facecolor"] + ) + assert fig1.get_edgecolor() == mcolors.to_rgba( + mpl.rcParams["figure.edgecolor"] + ) + assert fig1.get_frameon() == mpl.rcParams["figure.frameon"] + assert fig1.get_tight_layout() == mpl.rcParams["figure.autolayout"] + assert fig1.get_constrained_layout() == ( + mpl.rcParams["figure.constrained_layout.use"] + ) @image_comparison(['figure_today']) @@ -412,11 +471,11 @@ def test_autofmt_xdate(which): @mpl.style.context('default') def test_change_dpi(): fig = plt.figure(figsize=(4, 4)) - fig.draw_no_output() + fig.draw_without_rendering() assert fig.canvas.renderer.height == 400 assert fig.canvas.renderer.width == 400 fig.dpi = 50 - fig.draw_no_output() + fig.draw_without_rendering() assert fig.canvas.renderer.height == 200 assert fig.canvas.renderer.width == 200 @@ -496,6 +555,29 @@ def test_savefig_backend(): fig.savefig("test.png", backend="pdf") +@pytest.mark.parametrize('backend', [ + pytest.param('Agg', marks=[pytest.mark.backend('Agg')]), + pytest.param('Cairo', marks=[pytest.mark.backend('Cairo')]), +]) +def test_savefig_pixel_ratio(backend): + fig, ax = plt.subplots() + ax.plot([1, 2, 3]) + with io.BytesIO() as buf: + fig.savefig(buf, format='png') + ratio1 = Image.open(buf) + ratio1.load() + + fig, ax = plt.subplots() + ax.plot([1, 2, 3]) + fig.canvas._set_device_pixel_ratio(2) + with io.BytesIO() as buf: + fig.savefig(buf, format='png') + ratio2 = Image.open(buf) + ratio2.load() + + assert ratio1 == ratio2 + + def test_figure_repr(): fig = plt.figure(figsize=(10, 20), dpi=10) assert repr(fig) == "
" @@ -1082,10 +1164,10 @@ def test_subfigure_ticks(): ax3 = subfig_bl.add_subplot(gs[0, 3:14], sharey=ax1) fig.set_dpi(120) - fig.draw_no_output() + fig.draw_without_rendering() ticks120 = ax2.get_xticks() fig.set_dpi(300) - fig.draw_no_output() + fig.draw_without_rendering() ticks300 = ax2.get_xticks() np.testing.assert_allclose(ticks120, ticks300) diff --git a/lib/matplotlib/tests/test_font_manager.py b/lib/matplotlib/tests/test_font_manager.py index 4cad797b3757..ee62120c1e37 100644 --- a/lib/matplotlib/tests/test_font_manager.py +++ b/lib/matplotlib/tests/test_font_manager.py @@ -101,7 +101,7 @@ def test_utf16m_sfnt(): entry = next(entry for entry in fontManager.ttflist if Path(entry.fname).name == "seguisbi.ttf") except StopIteration: - pytest.skip("Couldn't find font to test against.") + pytest.skip("Couldn't find seguisbi.ttf font to test against.") else: # Check that we successfully read "semibold" from the font's sfnt table # and set its weight accordingly. @@ -111,14 +111,25 @@ def test_utf16m_sfnt(): def test_find_ttc(): fp = FontProperties(family=["WenQuanYi Zen Hei"]) if Path(findfont(fp)).name != "wqy-zenhei.ttc": - pytest.skip("Font may be missing") - + pytest.skip("Font wqy-zenhei.ttc may be missing") fig, ax = plt.subplots() ax.text(.5, .5, "\N{KANGXI RADICAL DRAGON}", fontproperties=fp) for fmt in ["raw", "svg", "pdf", "ps"]: fig.savefig(BytesIO(), format=fmt) +def test_find_noto(): + fp = FontProperties(family=["Noto Sans CJK SC", "Noto Sans CJK JP"]) + name = Path(findfont(fp)).name + if name not in ("NotoSansCJKsc-Regular.otf", "NotoSansCJK-Regular.ttc"): + pytest.skip(f"Noto Sans CJK SC font may be missing (found {name})") + + fig, ax = plt.subplots() + ax.text(0.5, 0.5, 'Hello, 你好', fontproperties=fp) + for fmt in ["raw", "svg", "pdf", "ps"]: + fig.savefig(BytesIO(), format=fmt) + + def test_find_invalid(tmpdir): tmp_path = Path(tmpdir) diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py index 37dddd4e4706..9aab4e60a7a2 100644 --- a/lib/matplotlib/tests/test_image.py +++ b/lib/matplotlib/tests/test_image.py @@ -337,11 +337,11 @@ def test_cursor_data(): @pytest.mark.parametrize( - "data, text_without_colorbar, text_with_colorbar", [ - ([[10001, 10000]], "[1e+04]", "[10001]"), - ([[.123, .987]], "[0.123]", "[0.123]"), + "data, text", [ + ([[10001, 10000]], "[10001.000]"), + ([[.123, .987]], "[0.123]"), ]) -def test_format_cursor_data(data, text_without_colorbar, text_with_colorbar): +def test_format_cursor_data(data, text): from matplotlib.backend_bases import MouseEvent fig, ax = plt.subplots() @@ -350,15 +350,7 @@ def test_format_cursor_data(data, text_without_colorbar, text_with_colorbar): xdisp, ydisp = ax.transData.transform([0, 0]) event = MouseEvent('motion_notify_event', fig.canvas, xdisp, ydisp) assert im.get_cursor_data(event) == data[0][0] - assert im.format_cursor_data(im.get_cursor_data(event)) \ - == text_without_colorbar - - fig.colorbar(im) - fig.canvas.draw() # This is necessary to set up the colorbar formatter. - - assert im.get_cursor_data(event) == data[0][0] - assert im.format_cursor_data(im.get_cursor_data(event)) \ - == text_with_colorbar + assert im.format_cursor_data(im.get_cursor_data(event)) == text @image_comparison(['image_clip'], style='mpl20') @@ -1017,8 +1009,8 @@ def test_imshow_bool(): def test_full_invalid(): fig, ax = plt.subplots() ax.imshow(np.full((10, 10), np.nan)) - with pytest.warns(UserWarning): - fig.canvas.draw() + + fig.canvas.draw() @pytest.mark.parametrize("fmt,counted", diff --git a/lib/matplotlib/tests/test_lines.py b/lib/matplotlib/tests/test_lines.py index 21cb2214051a..f6917a134bb4 100644 --- a/lib/matplotlib/tests/test_lines.py +++ b/lib/matplotlib/tests/test_lines.py @@ -16,6 +16,7 @@ from matplotlib.markers import MarkerStyle from matplotlib.path import Path import matplotlib.pyplot as plt +import matplotlib.transforms as mtransforms from matplotlib.testing.decorators import image_comparison, check_figures_equal @@ -131,6 +132,17 @@ def test_drawstyle_variants(): ax.set(xlim=(0, 2), ylim=(0, 2)) +@check_figures_equal(extensions=('png',)) +def test_no_subslice_with_transform(fig_ref, fig_test): + ax = fig_ref.add_subplot() + x = np.arange(2000) + ax.plot(x + 2000, x) + + ax = fig_test.add_subplot() + t = mtransforms.Affine2D().translate(2000.0, 0.0) + ax.plot(x, x, transform=t+ax.transData) + + def test_valid_drawstyles(): line = mlines.Line2D([], []) with pytest.raises(ValueError): diff --git a/lib/matplotlib/tests/test_marker.py b/lib/matplotlib/tests/test_marker.py index f85d4ff467ef..5576faddd2cc 100644 --- a/lib/matplotlib/tests/test_marker.py +++ b/lib/matplotlib/tests/test_marker.py @@ -1,6 +1,7 @@ import numpy as np import matplotlib.pyplot as plt from matplotlib import markers +from matplotlib._api.deprecation import MatplotlibDeprecationWarning from matplotlib.path import Path from matplotlib.testing.decorators import check_figures_equal @@ -32,7 +33,6 @@ def test_marker_fillstyle(): (5, 0, 10), # a pentagon, rotated by 10 degrees (7, 1, 10), # a 7-pointed star, rotated by 10 degrees (5, 2, 10), # asterisk, rotated by 10 degrees - markers.MarkerStyle(), markers.MarkerStyle('o'), ]) def test_markers_valid(marker): @@ -40,6 +40,12 @@ def test_markers_valid(marker): markers.MarkerStyle(marker) +def test_deprecated_marker_noargs(): + with pytest.warns(MatplotlibDeprecationWarning): + ms = markers.MarkerStyle() + markers.MarkerStyle(ms) # No warning on copy. + + @pytest.mark.parametrize('marker', [ 'square', # arbitrary string np.array([[-0.5, 0, 1, 2, 3]]), # 1D array diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index 768db940c756..0055d54a03a8 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -402,7 +402,7 @@ def test_default_math_fontfamily(): prop2 = text2.get_fontproperties() assert prop2.get_math_fontfamily() == 'cm' - fig.draw_no_output() + fig.draw_without_rendering() def test_argument_order(): @@ -427,7 +427,7 @@ def test_argument_order(): prop4 = text4.get_fontproperties() assert prop4.get_math_fontfamily() == 'dejavusans' - fig.draw_no_output() + fig.draw_without_rendering() def test_mathtext_cmr10_minus_sign(): diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index 17f63f737d84..610ff9b80b40 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -508,3 +508,39 @@ def test_backend_fallback_headful(tmpdir): # The actual backend will depend on what's installed, but at least tkagg is # present. assert backend.strip().lower() != "agg" + + +def test_deprecation(monkeypatch): + monkeypatch.setitem( + mpl._deprecated_map, "patch.linewidth", + ("0.0", "axes.linewidth", lambda old: 2 * old, lambda new: new / 2)) + with pytest.warns(_api.MatplotlibDeprecationWarning): + assert mpl.rcParams["patch.linewidth"] \ + == mpl.rcParams["axes.linewidth"] / 2 + with pytest.warns(_api.MatplotlibDeprecationWarning): + mpl.rcParams["patch.linewidth"] = 1 + assert mpl.rcParams["axes.linewidth"] == 2 + + monkeypatch.setitem( + mpl._deprecated_ignore_map, "patch.edgecolor", + ("0.0", "axes.edgecolor")) + with pytest.warns(_api.MatplotlibDeprecationWarning): + assert mpl.rcParams["patch.edgecolor"] \ + == mpl.rcParams["axes.edgecolor"] + with pytest.warns(_api.MatplotlibDeprecationWarning): + mpl.rcParams["patch.edgecolor"] = "#abcd" + assert mpl.rcParams["axes.edgecolor"] != "#abcd" + + monkeypatch.setitem( + mpl._deprecated_ignore_map, "patch.force_edgecolor", + ("0.0", None)) + with pytest.warns(_api.MatplotlibDeprecationWarning): + assert mpl.rcParams["patch.force_edgecolor"] is None + + monkeypatch.setitem( + mpl._deprecated_remain_as_none, "svg.hashsalt", + ("0.0",)) + with pytest.warns(_api.MatplotlibDeprecationWarning): + mpl.rcParams["svg.hashsalt"] = "foobar" + assert mpl.rcParams["svg.hashsalt"] == "foobar" # Doesn't warn. + mpl.rcParams["svg.hashsalt"] = None # Doesn't warn. diff --git a/lib/matplotlib/tests/test_streamplot.py b/lib/matplotlib/tests/test_streamplot.py index 3ed111881782..88c3ec2768e9 100644 --- a/lib/matplotlib/tests/test_streamplot.py +++ b/lib/matplotlib/tests/test_streamplot.py @@ -1,5 +1,3 @@ -import sys - import numpy as np from numpy.testing import assert_array_almost_equal import pytest @@ -8,19 +6,15 @@ import matplotlib.transforms as mtransforms -on_win = (sys.platform == 'win32') -on_mac = (sys.platform == 'darwin') - - def velocity_field(): - Y, X = np.mgrid[-3:3:100j, -3:3:100j] + Y, X = np.mgrid[-3:3:100j, -3:3:200j] U = -1 - X**2 + Y V = 1 + X - Y**2 return X, Y, U, V def swirl_velocity_field(): - x = np.linspace(-3., 3., 100) + x = np.linspace(-3., 3., 200) y = np.linspace(-3., 3., 100) X, Y = np.meshgrid(x, y) a = 0.1 @@ -29,7 +23,8 @@ def swirl_velocity_field(): return x, y, U, V -@image_comparison(['streamplot_startpoints'], remove_text=True, style='mpl20') +@image_comparison(['streamplot_startpoints'], remove_text=True, style='mpl20', + tol=0.513) def test_startpoints(): X, Y, U, V = velocity_field() start_x = np.linspace(X.min(), X.max(), 10) @@ -39,51 +34,39 @@ def test_startpoints(): plt.plot(start_x, start_y, 'ok') -@image_comparison(['streamplot_colormap'], - tol=.04, remove_text=True, style='mpl20') +@image_comparison(['streamplot_colormap'], remove_text=True, style='mpl20') def test_colormap(): - # Remove this line when this test image is regenerated. - plt.rcParams['pcolormesh.snap'] = False - X, Y, U, V = velocity_field() plt.streamplot(X, Y, U, V, color=U, density=0.6, linewidth=2, cmap=plt.cm.autumn) plt.colorbar() -@image_comparison(['streamplot_linewidth'], remove_text=True, style='mpl20') +@image_comparison(['streamplot_linewidth'], remove_text=True, style='mpl20', + tol=0.002) def test_linewidth(): X, Y, U, V = velocity_field() speed = np.hypot(U, V) lw = 5 * speed / speed.max() - # Compatibility for old test image - df = 25 / 30 ax = plt.figure().subplots() - ax.set(xlim=(-3.0, 2.9999999999999947), - ylim=(-3.0000000000000004, 2.9999999999999947)) - ax.streamplot(X, Y, U, V, density=[0.5 * df, 1. * df], color='k', - linewidth=lw) + ax.streamplot(X, Y, U, V, density=[0.5, 1], color='k', linewidth=lw) @image_comparison(['streamplot_masks_and_nans'], - remove_text=True, style='mpl20', tol=0.04 if on_win else 0) + remove_text=True, style='mpl20') def test_masks_and_nans(): X, Y, U, V = velocity_field() mask = np.zeros(U.shape, dtype=bool) - mask[40:60, 40:60] = 1 - U[:20, :20] = np.nan + mask[40:60, 80:120] = 1 + U[:20, :40] = np.nan U = np.ma.array(U, mask=mask) - # Compatibility for old test image ax = plt.figure().subplots() - ax.set(xlim=(-3.0, 2.9999999999999947), - ylim=(-3.0000000000000004, 2.9999999999999947)) with np.errstate(invalid='ignore'): ax.streamplot(X, Y, U, V, color=U, cmap=plt.cm.Blues) @image_comparison(['streamplot_maxlength.png'], - remove_text=True, style='mpl20', - tol=0.002 if on_mac else 0) + remove_text=True, style='mpl20', tol=0.302) def test_maxlength(): x, y, U, V = swirl_velocity_field() ax = plt.figure().subplots() @@ -95,7 +78,7 @@ def test_maxlength(): @image_comparison(['streamplot_direction.png'], - remove_text=True, style='mpl20') + remove_text=True, style='mpl20', tol=0.056) def test_direction(): x, y, U, V = swirl_velocity_field() plt.streamplot(x, y, U, V, integration_direction='backward', diff --git a/lib/matplotlib/tests/test_units.py b/lib/matplotlib/tests/test_units.py index c7a06e0e32ac..a6f6b44c9707 100644 --- a/lib/matplotlib/tests/test_units.py +++ b/lib/matplotlib/tests/test_units.py @@ -226,17 +226,17 @@ def test_empty_default_limits(quantity_converter): munits.registry[Quantity] = quantity_converter fig, ax1 = plt.subplots() ax1.xaxis.update_units(Quantity([10], "miles")) - fig.draw_no_output() + fig.draw_without_rendering() assert ax1.get_xlim() == (0, 100) ax1.yaxis.update_units(Quantity([10], "miles")) - fig.draw_no_output() + fig.draw_without_rendering() assert ax1.get_ylim() == (0, 100) fig, ax = plt.subplots() ax.axhline(30) ax.plot(Quantity(np.arange(0, 3), "miles"), Quantity(np.arange(0, 6, 2), "feet")) - fig.draw_no_output() + fig.draw_without_rendering() assert ax.get_xlim() == (0, 2) assert ax.get_ylim() == (0, 30) @@ -244,20 +244,20 @@ def test_empty_default_limits(quantity_converter): ax.axvline(30) ax.plot(Quantity(np.arange(0, 3), "miles"), Quantity(np.arange(0, 6, 2), "feet")) - fig.draw_no_output() + fig.draw_without_rendering() assert ax.get_xlim() == (0, 30) assert ax.get_ylim() == (0, 4) fig, ax = plt.subplots() ax.xaxis.update_units(Quantity([10], "miles")) ax.axhline(30) - fig.draw_no_output() + fig.draw_without_rendering() assert ax.get_xlim() == (0, 100) assert ax.get_ylim() == (28.5, 31.5) fig, ax = plt.subplots() ax.yaxis.update_units(Quantity([10], "miles")) ax.axvline(30) - fig.draw_no_output() + fig.draw_without_rendering() assert ax.get_ylim() == (0, 100) assert ax.get_xlim() == (28.5, 31.5) diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 36e2209c7fd2..f50402a20a15 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -460,6 +460,82 @@ def onselect(epress, erelease): assert artist.get_alpha() == 0.3 +@pytest.mark.parametrize('selector', ['span', 'rectangle']) +def test_selector_clear(selector): + ax = get_ax() + + def onselect(*args): + pass + + kwargs = dict(ax=ax, onselect=onselect, interactive=True) + if selector == 'span': + Selector = widgets.SpanSelector + kwargs['direction'] = 'horizontal' + else: + Selector = widgets.RectangleSelector + + tool = Selector(**kwargs) + do_event(tool, 'press', xdata=10, ydata=10, button=1) + do_event(tool, 'onmove', xdata=100, ydata=120, button=1) + do_event(tool, 'release', xdata=100, ydata=120, button=1) + + # press-release event outside the selector to clear the selector + do_event(tool, 'press', xdata=130, ydata=130, button=1) + do_event(tool, 'release', xdata=130, ydata=130, button=1) + assert not tool._selection_completed + + ax = get_ax() + kwargs['ignore_event_outside'] = True + tool = Selector(**kwargs) + assert tool.ignore_event_outside + do_event(tool, 'press', xdata=10, ydata=10, button=1) + do_event(tool, 'onmove', xdata=100, ydata=120, button=1) + do_event(tool, 'release', xdata=100, ydata=120, button=1) + + # press-release event outside the selector ignored + do_event(tool, 'press', xdata=130, ydata=130, button=1) + do_event(tool, 'release', xdata=130, ydata=130, button=1) + assert tool._selection_completed + + do_event(tool, 'on_key_press', key='escape') + assert not tool._selection_completed + + +@pytest.mark.parametrize('selector', ['span', 'rectangle']) +def test_selector_clear_method(selector): + ax = get_ax() + + def onselect(*args): + pass + + if selector == 'span': + tool = widgets.SpanSelector(ax, onselect, 'horizontal', + interactive=True, + ignore_event_outside=True) + else: + tool = widgets.RectangleSelector(ax, onselect, interactive=True) + do_event(tool, 'press', xdata=10, ydata=10, button=1) + do_event(tool, 'onmove', xdata=100, ydata=120, button=1) + do_event(tool, 'release', xdata=100, ydata=120, button=1) + assert tool._selection_completed + assert tool.visible + if selector == 'span': + assert tool.extents == (10, 100) + + tool.clear() + assert not tool._selection_completed + assert not tool.visible + + # Do another cycle of events to make sure we can + do_event(tool, 'press', xdata=10, ydata=10, button=1) + do_event(tool, 'onmove', xdata=50, ydata=120, button=1) + do_event(tool, 'release', xdata=50, ydata=120, button=1) + assert tool._selection_completed + assert tool.visible + if selector == 'span': + assert tool.extents == (10, 50) + + def test_tool_line_handle(): ax = get_ax() @@ -543,7 +619,11 @@ def test_CheckButtons(): check.disconnect(cid) -def test_TextBox(): +@pytest.mark.parametrize("toolbar", ["none", "toolbar2", "toolmanager"]) +def test_TextBox(toolbar): + # Avoid "toolmanager is provisional" warning. + dict.__setitem__(plt.rcParams, "toolbar", toolbar) + from unittest.mock import Mock submit_event = Mock() text_change_event = Mock() diff --git a/lib/matplotlib/ticker.py b/lib/matplotlib/ticker.py index fc30977d9b39..6d8fa5419bbf 100644 --- a/lib/matplotlib/ticker.py +++ b/lib/matplotlib/ticker.py @@ -118,9 +118,9 @@ the input ``str``. For function input, a `.FuncFormatter` with the input function will be generated and used. -See :doc:`/gallery/ticks_and_spines/major_minor_demo` for an -example of setting major and minor ticks. See the :mod:`matplotlib.dates` -module for more information and examples of using date locators and formatters. +See :doc:`/gallery/ticks/major_minor_demo` for an example of setting major +and minor ticks. See the :mod:`matplotlib.dates` module for more information +and examples of using date locators and formatters. """ import itertools @@ -655,16 +655,7 @@ def format_data_short(self, value): # Rough approximation: no more than 1e4 divisions. a, b = self.axis.get_view_interval() delta = (b - a) / 1e4 - # If e.g. value = 45.67 and delta = 0.02, then we want to round to - # 2 digits after the decimal point (floor(log10(0.02)) = -2); - # 45.67 contributes 2 digits before the decimal point - # (floor(log10(45.67)) + 1 = 2): the total is 4 significant digits. - # A value of 0 contributes 1 "digit" before the decimal point. - sig_digits = max( - 0, - (math.floor(math.log10(abs(value))) + 1 if value else 1) - - math.floor(math.log10(delta))) - fmt = f"%-#.{sig_digits}g" + fmt = "%-#.{}g".format(cbook._g_sig_digits(value, delta)) return self._format_maybe_minus_and_locale(fmt, value) def format_data(self, value): diff --git a/lib/matplotlib/tight_bbox.py b/lib/matplotlib/tight_bbox.py index 5904ebc1fa1c..bd58833baf88 100644 --- a/lib/matplotlib/tight_bbox.py +++ b/lib/matplotlib/tight_bbox.py @@ -57,11 +57,9 @@ def restore_bbox(): tr = Affine2D().scale(fixed_dpi) dpi_scale = fixed_dpi / fig.dpi - _bbox = TransformedBbox(bbox_inches, tr) - fig.bbox_inches = Bbox.from_bounds(0, 0, bbox_inches.width, bbox_inches.height) - x0, y0 = _bbox.x0, _bbox.y0 + x0, y0 = tr.transform(bbox_inches.p0) w1, h1 = fig.bbox.width * dpi_scale, fig.bbox.height * dpi_scale fig.transFigure._boxout = Bbox.from_bounds(-x0, -y0, w1, h1) fig.transFigure.invalidate() diff --git a/lib/matplotlib/tight_layout.py b/lib/matplotlib/tight_layout.py index 809b970915a9..1b4b80b2e0e8 100644 --- a/lib/matplotlib/tight_layout.py +++ b/lib/matplotlib/tight_layout.py @@ -11,9 +11,9 @@ import numpy as np -from matplotlib import _api, rcParams +from matplotlib import _api, artist as martist, rcParams from matplotlib.font_manager import FontProperties -from matplotlib.transforms import TransformedBbox, Bbox +from matplotlib.transforms import Bbox def _auto_adjust_subplotpars( @@ -78,14 +78,10 @@ def _auto_adjust_subplotpars( bb = [] for ax in subplots: if ax.get_visible(): - try: - bb += [ax.get_tightbbox(renderer, for_layout_only=True)] - except TypeError: - bb += [ax.get_tightbbox(renderer)] + bb += [martist._get_tightbbox_for_layout_only(ax, renderer)] tight_bbox_raw = Bbox.union(bb) - tight_bbox = TransformedBbox(tight_bbox_raw, - fig.transFigure.inverted()) + tight_bbox = fig.transFigure.inverted().transform_bbox(tight_bbox_raw) hspaces[rowspan, colspan.start] += ax_bbox.xmin - tight_bbox.xmin # l hspaces[rowspan, colspan.stop] += tight_bbox.xmax - ax_bbox.xmax # r diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 48c096032017..a59b3b1b1677 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1287,7 +1287,7 @@ def begin_typing(self, x): # If using toolmanager, lock keypresses, and plan to release the # lock when typing stops. toolmanager.keypresslock(self) - stack.push(toolmanager.keypresslock.release, self) + stack.callback(toolmanager.keypresslock.release, self) else: # If not using toolmanager, disable all keypress-related rcParams. # Avoid spurious warnings if keymaps are getting deprecated. @@ -1978,9 +1978,7 @@ def on_key_press(self, event): key = event.key or '' key = key.replace('ctrl', 'control') if key == self.state_modifier_keys['clear']: - for artist in self.artists: - artist.set_visible(False) - self.update() + self.clear() return for (state, modifier) in self.state_modifier_keys.items(): if modifier in key: @@ -2008,6 +2006,12 @@ def set_visible(self, visible): for artist in self.artists: artist.set_visible(visible) + def clear(self): + """Clear the selection and set the selector ready to make a new one.""" + self._selection_completed = False + self.set_visible(False) + self.update() + @property def artists(self): """Tuple of the artists of the selector.""" @@ -2354,9 +2358,11 @@ def _hover(self, event): if self.ignore(event): return - if self._active_handle is not None: + if self._active_handle is not None or not self._selection_completed: # Do nothing if button is pressed and a handle is active, which may # occur with drag_from_anywhere=True. + # Do nothing if selection is not completed, which occurs when + # a selector has been cleared return _, e_dist = self._edge_handles.closest(event.x, event.y) @@ -2704,7 +2710,7 @@ def onselect(eclick: MouseEvent, erelease: MouseEvent) - "move": Move the existing shape, default: no modifier. - "clear": Clear the current shape, default: "escape". - - "square": Makes the shape square, default: "shift". + - "square": Make the shape square, default: "shift". - "center": Make the initial point the center of the shape, default: "ctrl". diff --git a/lib/mpl_toolkits/axes_grid1/inset_locator.py b/lib/mpl_toolkits/axes_grid1/inset_locator.py index 5193cc540c31..fcdb32851b8c 100644 --- a/lib/mpl_toolkits/axes_grid1/inset_locator.py +++ b/lib/mpl_toolkits/axes_grid1/inset_locator.py @@ -126,7 +126,7 @@ def __init__(self, parent_axes, zoom, loc, bbox_transform=bbox_transform) def get_extent(self, renderer): - bb = TransformedBbox(self.axes.viewLim, self.parent_axes.transData) + bb = self.parent_axes.transData.transform_bbox(self.axes.viewLim) fontsize = renderer.points_to_pixels(self.prop.get_size_in_points()) pad = self.pad * fontsize return (abs(bb.width * self.zoom) + 2 * pad, diff --git a/lib/mpl_toolkits/axes_grid1/parasite_axes.py b/lib/mpl_toolkits/axes_grid1/parasite_axes.py index a140be9ef260..b2ef0b1c94d3 100644 --- a/lib/mpl_toolkits/axes_grid1/parasite_axes.py +++ b/lib/mpl_toolkits/axes_grid1/parasite_axes.py @@ -187,12 +187,6 @@ def get_aux_axes(self, tr=None, viewlim_mode="equal", axes_class=Axes): ax2._remove_method = self.parasites.remove return ax2 - def _get_legend_handles(self, legend_handler_map=None): - all_handles = super()._get_legend_handles() - for ax in self.parasites: - all_handles.extend(ax._get_legend_handles(legend_handler_map)) - return all_handles - def draw(self, renderer): orig_children_len = len(self._children) diff --git a/lib/mpl_toolkits/axisartist/axisline_style.py b/lib/mpl_toolkits/axisartist/axisline_style.py index 80f3ce58eb48..db4b0c144c5e 100644 --- a/lib/mpl_toolkits/axisartist/axisline_style.py +++ b/lib/mpl_toolkits/axisartist/axisline_style.py @@ -9,9 +9,7 @@ class _FancyAxislineStyle: class SimpleArrow(FancyArrowPatch): - """ - The artist class that will be returned for SimpleArrow style. - """ + """The artist class that will be returned for SimpleArrow style.""" _ARROW_STYLE = "->" def __init__(self, axis_artist, line_path, transform, @@ -69,9 +67,7 @@ def draw(self, renderer): FancyArrowPatch.draw(self, renderer) class FilledArrow(SimpleArrow): - """ - The artist class that will be returned for SimpleArrow style. - """ + """The artist class that will be returned for SimpleArrow style.""" _ARROW_STYLE = "-|>" diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index d4eef7ca77e6..4db9fcffe631 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -3033,8 +3033,7 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='', had_data = self.has_data() kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D) - # anything that comes in as 'None', drop so the default thing - # happens down stream + # Drop anything that comes in as None to use the default instead. kwargs = {k: v for k, v in kwargs.items() if v is not None} kwargs.setdefault('zorder', 2) @@ -3287,16 +3286,10 @@ def get_tightbbox(self, renderer, call_axes_locator=True, if self._axis3don: for axis in self._get_axis_list(): if axis.get_visible(): - try: - axis_bb = axis.get_tightbbox( - renderer, - for_layout_only=for_layout_only - ) - except TypeError: - # in case downstream library has redefined axis: - axis_bb = axis.get_tightbbox(renderer) - if axis_bb: - batch.append(axis_bb) + axis_bb = martist._get_tightbbox_for_layout_only( + axis, renderer) + if axis_bb: + batch.append(axis_bb) return mtransforms.Bbox.union(batch) def stem(self, x, y, z, *, linefmt='C0-', markerfmt='C0o', basefmt='C3-', diff --git a/mplsetup.cfg.template b/mplsetup.cfg.template index 2fd28a6e4d67..6c54a23fdccb 100644 --- a/mplsetup.cfg.template +++ b/mplsetup.cfg.template @@ -28,8 +28,8 @@ [rc_options] # User-configurable options # -# Default backend, one of: Agg, Cairo, GTK3Agg, GTK3Cairo, MacOSX, Pdf, Ps, -# QtAgg, QtCairo, SVG, TkAgg, WX, WXAgg. +# Default backend, one of: Agg, Cairo, GTK3Agg, GTK3Cairo, GTK4Agg, GTK4Cairo, +# MacOSX, Pdf, Ps, QtAgg, QtCairo, SVG, TkAgg, WX, WXAgg. # # The Agg, Ps, Pdf and SVG backends do not require external dependencies. Do # not choose MacOSX if you have disabled the relevant extension modules. The diff --git a/plot_types/basic/pie.py b/plot_types/basic/pie.py index e20b6c5001db..b078a8f5e6ab 100644 --- a/plot_types/basic/pie.py +++ b/plot_types/basic/pie.py @@ -1,6 +1,6 @@ """ ====== -pie(X) +pie(x) ====== See `~matplotlib.axes.Axes.pie`. diff --git a/plot_types/basic/plot.py b/plot_types/basic/plot.py index cd608f2c33f9..ac93ecf71b56 100644 --- a/plot_types/basic/plot.py +++ b/plot_types/basic/plot.py @@ -1,6 +1,6 @@ """ ========== -plot(X, Y) +plot(x, y) ========== See `~matplotlib.axes.Axes.plot`. diff --git a/plot_types/basic/scatter_plot.py b/plot_types/basic/scatter_plot.py index bc9ec24bbb78..68f06744150c 100644 --- a/plot_types/basic/scatter_plot.py +++ b/plot_types/basic/scatter_plot.py @@ -1,6 +1,6 @@ """ ============= -scatter(X, Y) +scatter(x, y) ============= See `~matplotlib.axes.Axes.scatter`. diff --git a/requirements/doc/doc-requirements.txt b/requirements/doc/doc-requirements.txt index 2cfba0dbad07..8be10d4d107c 100644 --- a/requirements/doc/doc-requirements.txt +++ b/requirements/doc/doc-requirements.txt @@ -12,12 +12,13 @@ colorspacious ipython ipywidgets numpydoc>=0.8 -pydata-sphinx-theme>=0.5.0 +pydata-sphinx-theme>=0.6.0 sphinxcontrib-svg2pdfconverter>=1.1.0 -# sphinx-gallery>=0.7 -# b41e328 is PR 808 which adds the image_srcset directive. When this is +# sphinx-gallery>=0.7 +# b41e328 is PR 808 which adds the image_srcset directive. When this is # released with sphinx gallery, we can change to the last release w/o this feature: # sphinx-gallery>0.90 git+git://github.com/sphinx-gallery/sphinx-gallery@b41e328#egg=sphinx-gallery sphinx-copybutton +sphinx-panels scipy diff --git a/setup.py b/setup.py index e1a2b261ddbe..6fc76f0747cd 100644 --- a/setup.py +++ b/setup.py @@ -29,15 +29,11 @@ import shutil import subprocess -from setuptools import setup, find_packages, Extension +from setuptools import setup, find_packages, Distribution, Extension import setuptools.command.build_ext import setuptools.command.build_py -import setuptools.command.test import setuptools.command.sdist -from distutils.errors import CompileError -from distutils.dist import Distribution - import setupext from setupext import print_raw, print_status @@ -62,17 +58,14 @@ def has_flag(self, flagname): f.write('int main (int argc, char **argv) { return 0; }') try: self.compile([f.name], extra_postargs=[flagname]) - except CompileError: + except Exception as exc: + # https://github.com/pypa/setuptools/issues/2698 + if type(exc).__name__ != "CompileError": + raise return False return True -class NoopTestCommand(setuptools.command.test.test): - def __init__(self, dist): - print("Matplotlib does not support running tests with " - "'python setup.py test'. Please run 'pytest'.") - - class BuildExtraLibraries(setuptools.command.build_ext.build_ext): def finalize_options(self): self.distribution.ext_modules[:] = [ @@ -270,7 +263,7 @@ def make_release_tree(self, base_dir, files): package_data.setdefault(key, []) package_data[key] = list(set(val + package_data[key])) -setup( # Finally, pass this all along to distutils to do the heavy lifting. +setup( # Finally, pass this all along to setuptools to do the heavy lifting. name="matplotlib", description="Python plotting package", author="John D. Hunter, Michael Droettboom", @@ -341,7 +334,6 @@ def make_release_tree(self, base_dir, files): "fallback_version": "0.0+UNKNOWN", }, cmdclass={ - "test": NoopTestCommand, "build_ext": BuildExtraLibraries, "build_py": BuildPy, "sdist": Sdist, diff --git a/setupext.py b/setupext.py index 81c4fb56eb72..0d85f479d106 100644 --- a/setupext.py +++ b/setupext.py @@ -1,6 +1,4 @@ import configparser -from distutils import ccompiler, sysconfig -from distutils.core import Extension import functools import hashlib from io import BytesIO @@ -12,10 +10,13 @@ import shutil import subprocess import sys +import sysconfig import tarfile import textwrap import urllib.request +from setuptools import Distribution, Extension + _log = logging.getLogger(__name__) @@ -167,14 +168,16 @@ def get_and_extract_tarball(urls, sha, dirname): '2.10.1': '3a60d391fd579440561bf0e7f31af2222bc610ad6ce4d9d7bd2165bca8669110', } -# This is the version of FreeType to use when building a local -# version. It must match the value in -# lib/matplotlib.__init__.py and also needs to be changed below in the -# embedded windows build script (grep for "REMINDER" in this file) +# This is the version of FreeType to use when building a local version. It +# must match the value in lib/matplotlib.__init__.py and also needs to be +# changed below in the embedded windows build script (grep for "REMINDER" in +# this file). Also update the cache path in `.circleci/config.yml`. LOCAL_FREETYPE_VERSION = '2.6.1' LOCAL_FREETYPE_HASH = _freetype_hashes.get(LOCAL_FREETYPE_VERSION, 'unknown') +# Also update the cache path in `.circleci/config.yml`. LOCAL_QHULL_VERSION = '2020.2' +LOCAL_QHULL_HASH = 'b5c2d7eb833278881b952c8a52d20179eab87766b00b865000469a45c1838b7e' # Matplotlib build options, which can be altered using mplsetup.cfg @@ -523,9 +526,27 @@ def add_libagg_flags_and_sources(ext): os.path.join("extern", "agg24-svn", "src", x) for x in agg_sources) -# First compile checkdep_freetype2.c, which aborts the compilation either -# with "foo.h: No such file or directory" if the header is not found, or an -# appropriate error message if the header indicates a too-old version. +def get_ccompiler(): + """ + Return a new CCompiler instance. + + CCompiler used to be constructible via `distutils.ccompiler.new_compiler`, + but this API was removed as part of the distutils deprecation. Instead, + we trick setuptools into instantiating it by creating a dummy Distribution + with a list of extension modules that claims to be truthy, but is actually + empty, and then running the Distribution's build_ext command. (If using + a plain empty ext_modules, build_ext would early-return without doing + anything.) + """ + + class L(list): + def __bool__(self): + return True + + build_ext = Distribution({"ext_modules": L()}).get_command_obj("build_ext") + build_ext.finalize_options() + build_ext.run() + return build_ext.compiler class FreeType(SetupPackage): @@ -533,6 +554,9 @@ class FreeType(SetupPackage): @classmethod def add_flags(cls, ext): + # checkdep_freetype2.c immediately aborts the compilation either with + # "foo.h: No such file or directory" if the header is not found, or an + # appropriate error message if the header indicates a too-old version. ext.sources.insert(0, 'src/checkdep_freetype2.c') if options.get('system_freetype'): pkg_config_setup_extension( @@ -636,7 +660,7 @@ def do_custom_build(self, env): f.truncate() f.write(vcxproj) - cc = ccompiler.new_compiler() + cc = get_ccompiler() cc.initialize() # Get msbuild in the %PATH% of cc.spawn. cc.spawn(["msbuild", str(sln_path), "/t:Clean;Build", @@ -666,7 +690,7 @@ def do_custom_build(self, env): toplevel = get_and_extract_tarball( urls=["http://www.qhull.org/download/qhull-2020-src-8.0.2.tgz"], - sha="b5c2d7eb833278881b952c8a52d20179eab87766b00b865000469a45c1838b7e", + sha=LOCAL_QHULL_HASH, dirname=f"qhull-{LOCAL_QHULL_VERSION}", ) shutil.copyfile(toplevel / "COPYING.txt", "LICENSE/LICENSE_QHULL") diff --git a/src/py_converters.cpp b/src/py_converters.cpp index 3a703509535c..d2c53c553c48 100644 --- a/src/py_converters.cpp +++ b/src/py_converters.cpp @@ -212,33 +212,13 @@ int convert_dashes(PyObject *dashobj, void *dashesp) { Dashes *dashes = (Dashes *)dashesp; - if (dashobj == NULL && dashobj == Py_None) { - return 1; - } - - PyObject *dash_offset_obj = NULL; double dash_offset = 0.0; PyObject *dashes_seq = NULL; - if (!PyArg_ParseTuple(dashobj, "OO:dashes", &dash_offset_obj, &dashes_seq)) { + if (!PyArg_ParseTuple(dashobj, "dO:dashes", &dash_offset, &dashes_seq)) { return 0; } - if (dash_offset_obj != Py_None) { - dash_offset = PyFloat_AsDouble(dash_offset_obj); - if (PyErr_Occurred()) { - return 0; - } - } else { - if (PyErr_WarnEx(PyExc_FutureWarning, - "Passing the dash offset as None is deprecated since " - "Matplotlib 3.3 and will be removed in Matplotlib 3.5; " - "pass it as zero instead.", - 1)) { - return 0; - } - } - if (dashes_seq == Py_None) { return 1; } diff --git a/tools/github_stats.py b/tools/github_stats.py index 849ace2a187c..2d1fbc47e81a 100755 --- a/tools/github_stats.py +++ b/tools/github_stats.py @@ -172,17 +172,18 @@ def report(issues, show_urls=False): n_issues, n_pulls = map(len, (issues, pulls)) n_total = n_issues + n_pulls + since_day = since.strftime("%Y/%m/%d") + today = datetime.today() # Print summary report we can directly include into release notes. print('.. _github-stats:') print() - print('GitHub statistics') - print('=================') + title = 'GitHub statistics ' + today.strftime('(%b %d, %Y)') + print(title) + print('=' * len(title)) print() - since_day = since.strftime("%Y/%m/%d") - today = datetime.today().strftime("%Y/%m/%d") - print("GitHub statistics for %s - %s (tag: %s)" % (since_day, today, tag)) + print("GitHub statistics for %s (tag: %s) - %s" % (since_day, tag, today.strftime("%Y/%m/%d"), )) print() print("These lists are automatically generated, and may be incomplete or contain duplicates.") print() diff --git a/tutorials/introductory/sample_plots.py b/tutorials/introductory/sample_plots.py index 91ae19eb0015..003bc70661ff 100644 --- a/tutorials/introductory/sample_plots.py +++ b/tutorials/introductory/sample_plots.py @@ -338,6 +338,7 @@ For examples of how to embed Matplotlib in different toolkits, see: + * :doc:`/gallery/user_interfaces/embedding_in_gtk4_sgskip` * :doc:`/gallery/user_interfaces/embedding_in_gtk3_sgskip` * :doc:`/gallery/user_interfaces/embedding_in_wx2_sgskip` * :doc:`/gallery/user_interfaces/mpl_with_glade3_sgskip` diff --git a/tutorials/introductory/usage.py b/tutorials/introductory/usage.py index 08b4d6ad00a0..17e623399b65 100644 --- a/tutorials/introductory/usage.py +++ b/tutorials/introductory/usage.py @@ -300,9 +300,10 @@ def my_plotter(ax, data1, data2, param_dict): # Without a backend explicitly set, Matplotlib automatically detects a usable # backend based on what is available on your system and on whether a GUI event # loop is already running. The first usable backend in the following list is -# selected: MacOSX, Qt5Agg, Gtk3Agg, TkAgg, WxAgg, Agg. The last, Agg, is a -# non-interactive backend that can only write to files. It is used on Linux, -# if Matplotlib cannot connect to either an X display or a Wayland display. +# selected: MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. The last, Agg, +# is a non-interactive backend that can only write to files. It is used on +# Linux, if Matplotlib cannot connect to either an X display or a Wayland +# display. # # Here is a detailed description of the configuration methods: # @@ -370,7 +371,7 @@ def my_plotter(ax, data1, data2, param_dict): # from the canvas (the place where the drawing goes). The canonical # renderer for user interfaces is ``Agg`` which uses the `Anti-Grain # Geometry`_ C++ library to make a raster (pixel) image of the figure; it -# is used by the ``QtAgg``, ``GTK3Agg``, ``wxAgg``, ``TkAgg``, and +# is used by the ``QtAgg``, ``GTK4Agg``, ``GTK3Agg``, ``wxAgg``, ``TkAgg``, and # ``macosx`` backends. An alternative renderer is based on the Cairo library, # used by ``QtCairo``, etc. # @@ -419,6 +420,9 @@ def my_plotter(ax, data1, data2, param_dict): # GTK3Agg Agg rendering to a GTK_ 3.x canvas (requires PyGObject_, # and pycairo_ or cairocffi_). This backend can be activated in # IPython with ``%matplotlib gtk3``. +# GTK4Agg Agg rendering to a GTK_ 4.x canvas (requires PyGObject_, +# and pycairo_ or cairocffi_). This backend can be activated in +# IPython with ``%matplotlib gtk4``. # macosx Agg rendering into a Cocoa canvas in OSX. This backend can be # activated in IPython with ``%matplotlib osx``. # TkAgg Agg rendering to a Tk_ canvas (requires TkInter_). This @@ -430,6 +434,8 @@ def my_plotter(ax, data1, data2, param_dict): # figure. # GTK3Cairo Cairo rendering to a GTK_ 3.x canvas (requires PyGObject_, # and pycairo_ or cairocffi_). +# GTK4Cairo Cairo rendering to a GTK_ 4.x canvas (requires PyGObject_, +# and pycairo_ or cairocffi_). # wxAgg Agg rendering to a wxWidgets_ canvas (requires wxPython_ 4). # This backend can be activated in IPython with ``%matplotlib wx``. # ========= ================================================================