Weekly Project News

Subscribe
Archives

Weekly GitHub Report for Matplotlib: August 25, 2025 - September 01, 2025 (12:04:22)

Weekly GitHub Report for Matplotlib

Thank you for subscribing to our weekly newsletter! Each week, we deliver a comprehensive summary of your GitHub project's latest activity right to your inbox, including an overview of your project's issues, pull requests, contributors, and commit activity.


Table of Contents

  • I. News
    • 1.1. Recent Version Releases
    • 1.2. Other Noteworthy Updates
  • II. Issues
    • 2.1. Top 5 Active Issues
    • 2.2. Top 5 Stale Issues
    • 2.3. Open Issues
    • 2.4. Closed Issues
    • 2.5. Issue Discussion Insights
  • III. Pull Requests
    • 3.1. Open Pull Requests
    • 3.2. Closed Pull Requests
    • 3.3. Pull Request Discussion Insights
  • IV. Contributors
    • 4.1. Contributors

I. News

1.1 Recent Version Releases:

The current version of this repository is v3.10.1

1.2 Version Information:

Released on February 27, 2025, this first bugfix update of the 3.10.x series addresses multiple issues including improved handling of array alpha in interpolation, removal of md5 to support FIPS-enabled systems, fixes for pyplot.matshow and Axes position modifications, adjustments to polar plot titles, and added version gating for GTK4 calls, alongside documentation enhancements. Notably, it also introduces a warning when both color and facecolors are used in scatter plots, reflecting a focus on stability and user guidance.

II. Issues

2.1 Top 5 Active Issues:

We consider active issues to be issues that that have been commented on most frequently within the last week. Bot comments are omitted.

  1. [Bug]: Can't compile Mac: This issue reports a compilation error on macOS 15.6.1 when building Matplotlib in a micromamba environment, specifically related to an undeclared identifier 'Byte' in the FreeType 2.6.1 subproject. The user is unable to compile the project using the micromamba-provided clang compiler and is seeking advice on how to switch to the system compiler or otherwise resolve the build failure.

    • The comments focus on identifying the compiler in use, confirming it is the micromamba-installed clang rather than the system default, and discussing attempts to unset environment variables and recreate the build directory to force use of the system compiler. Suggestions include trying a newer FreeType version from a different branch and considering whether the build system should pin the compiler explicitly to avoid such conflicts.
    • Number of comments this week: 9
  2. [Bug]: It shows 1 extra/redundant empty figure: This issue reports a bug where a user attempting to display a 3x3 grid of subplots consistently sees one extra, empty figure that should not be present. The user provides a code snippet for reproduction but is unable to resolve the problem, and the issue remains unresolved due to incomplete information and difficulty reproducing the error.

    • The commenters request more context about the execution environment and how the code is run, suggest running the code from the command line, and ask for a complete, self-contained example including imports. The user later reports being unable to reproduce the error when copying the snippet into a new file, and the discussion ends with a recommendation to continue iterating until a reproducible example is provided.
    • Number of comments this week: 7
  3. [Bug]: Typo in method name: contains_branch_separately: This issue reports a longstanding typo in the method name contains_branch_seperately within the Matplotlib codebase, proposing to correct it to contains_branch_separately while maintaining backward compatibility. The suggested solution includes renaming the method, creating a permanent alias for the misspelled name without a deprecation warning, updating internal references, and fixing documentation accordingly.

    • The discussion acknowledges the typo has existed for 13 years and is mostly harmless, with consensus favoring a fix that avoids breaking existing code by keeping the misspelled method as a permanent alias. The original reporter agrees with this approach and offers to prepare a pull request, which is welcomed and subsequently submitted for review.
    • Number of comments this week: 4
  4. [Doc]: Two sources of a gallery figure for normal and high-DPI screen are different: This issue addresses a discrepancy in a Matplotlib gallery figure where the images used for normal and high-DPI screens differ, causing misalignment in annotations between the two versions. The user highlights the difficulty in editing the high-DPI figure and questions the necessity of maintaining this example given its redundancy with other documentation.

    • The comments discuss the technical challenge of using display coordinates in figures and suggest either creating two separate figures at different DPI settings or prioritizing the high-DPI version for accuracy. Some contributors question the example's relevance, proposing its removal due to overlap with other tutorials and the rarity of use cases involving display coordinate annotations.
    • Number of comments this week: 3
  5. [Bug]: figures with SpanSelector(..., useblit=True) can't be saved to SVG or PDF: This issue reports a bug where using a SpanSelector widget with the parameter useblit=True in Matplotlib causes an AttributeError when attempting to save figures as SVG or PDF files, due to the absence of the copy_from_bbox method in the SVG backend. The problem does not occur when useblit=False and affects multiple backends and output formats, with a minimal reproducible example provided to demonstrate the failure.

    • The comments acknowledge the original contributor’s isolation work and provide a smaller reproducible snippet confirming the error occurs only with useblit=True. It is also noted that the underlying cause is a missing guard in the code that should skip blitting operations when saving figures to disk, which leads to the AttributeError.
    • Number of comments this week: 2

2.2 Top 5 Stale Issues:

We consider stale issues to be issues that has had no activity within the last 30 days. The team should work together to get these issues resolved and closed as soon as possible.

  1. [Bug]: Misalignment of Labels and Incorrect Density Values in ax.hist() for Categorical Variables: This issue addresses a bug in the ax.hist() function of Matplotlib when used with categorical variables and the density=True parameter, where the density values are incorrectly computed due to the internal conversion of categories to integers and the resulting bin widths not being equal to one. Additionally, the issue highlights a misalignment of x-axis labels because the function does not clearly document or handle the mapping from categories to integers, making it difficult to position labels accurately at the center of the histogram bars.
  2. [MNT]: Ease building just one Sphinx Gallery example file: This issue addresses the difficulty of efficiently building a single Sphinx Gallery example file, which currently requires lengthy build times or cumbersome workarounds that generate many warnings. The author proposes improving the documentation with practical tips and potentially adding a dedicated build target in the Makefile to streamline this process, making it easier for developers—especially beginners—to preview and develop individual gallery entries.
  3. [ENH]: Parse "\limits" in mathtext: This issue addresses a problem in the matplotlib mathtext module where the LaTeX command "\limits" is not being parsed correctly, resulting in a parsing error when rendering integral expressions with limits placed above and below the integral sign. The user reports that using "\int \limits _{v} ^{\mu e} e d A" triggers a ValueError due to an unknown symbol "\limits," whereas the expected behavior is to display the limits properly positioned, similar to standard LaTeX rendering.
  4. [ENH]: Fix precision displayed by LogFormatter.format_data_short: This issue addresses the lack of precision adjustment in the display of mouse cursor values for logarithmic scale formatters within the toolbar, which currently only exists for linear scale formatters. The user suggests implementing a similar feature for log formatters to match the cursor pointing precision, enhancing the accuracy of displayed data values.
  5. [Bug]: ax.transData does not honor data limits: This issue reports a bug in Matplotlib where the transformation ax.transData does not automatically respect the current data limits (xlim and ylim), causing it to use outdated limits unless these are manually updated. The user highlights that the documentation implies data limits should update automatically when new data is added, but in practice, a manual call to methods like set_xlim or set_ylim is required to refresh these limits, leading to confusion and inconsistent behavior.

2.3 Open Issues

This section lists, groups, and then summarizes issues that were created within the last week in the repository.

Issues Opened This Week: 7

Summarized Issues:

  • Figure and layout rendering issues: Several issues describe problems with figure rendering and layout alignment in Matplotlib. These include annotation misalignment between normal and high-DPI gallery figures causing confusion, colorbars becoming misaligned and longer than subfigures when using 'layout=compressed' with a figure suptitle, and an extra redundant empty subplot appearing unexpectedly in a 3x3 grid layout.
  • issues/30463, issues/30472, issues/30496
  • API naming and backward compatibility: One issue addresses a longstanding typo in the public API method name contains_branch_seperately, proposing to correct the spelling to contains_branch_separately while maintaining backward compatibility through an alias and updating internal references and documentation accordingly. This ensures the API remains consistent without breaking existing code.
  • issues/30474
  • Build and environment compatibility: A compilation failure on macOS 15.6.1 within a micromamba environment is reported, caused by undeclared identifier errors in the FreeType 2.6.1 subproject. The issue likely stems from conflicts or misconfiguration involving the micromamba-provided clang compiler, preventing successful Matplotlib builds from source.
  • issues/30480
  • Widget and backend compatibility: Using the SpanSelector widget with useblit=True causes an AttributeError when saving figures as SVG or PDF because the FigureCanvasSVG backend lacks the required copy_from_bbox method. Setting useblit=False avoids this error, indicating a backend limitation affecting widget functionality during export.
  • issues/30485
  • Test reliability and flaky behavior: The test_save_figure_return test intermittently fails on Fedora builders due to a FileNotFoundError when attempting to remove a mocked file that does not exist. This causes flaky test behavior and unreliable test outcomes in the continuous integration environment.
  • issues/30493

2.4 Closed Issues

This section lists, groups, and then summarizes issues that were closed within the last week in the repository. This section also links the associated pull requests if applicable.

Issues Closed This Week: 4

Summarized Issues:

  • ImportError Handling and User Warnings: This topic covers improving the handling of ImportError related to python-build-standalone in the _backend_tk.py module by catching the exception and providing clearer warning messages to users. It also includes updating documentation to reflect resolved incompatibility issues between uv and python-build-standalone, advising users to upgrade uv and reinstall its managed Python version if problems continue.
  • issues/30390, issues/30409
  • Documentation and Plot Setup Enhancements: This topic involves enhancing the Sphinx extension to allow the :context: option to persist across multiple docstrings or adding a new .. plotsetup:: directive to share plot setup code, which avoids re-instantiating objects in each plot directive within class method documentation. These improvements aim to streamline documentation and reduce repetitive code in plot examples.
  • issues/30410
  • Optional Qt5 Backend Dependency Group: This topic proposes adding an optional dependency group "Qt5Agg" to matplotlib, enabling users to install Qt5 backend dependencies like PyQt5 with a single pip command (pip install matplotlib[Qt5Agg]). This simplifies the installation process for users requiring the Qt5 backend.
  • issues/30482

2.5 Issue Discussion Insights

This section will analyze the tone and sentiment of discussions within this project's open and closed issues that occurred within the past week. It aims to identify potentially heated exchanges and to maintain a constructive project environment.

Based on our analysis, there are no instances of toxic discussions in the project's open or closed issues from the past week.


III. Pull Requests

3.1 Open Pull Requests

This section provides a summary of pull requests that were opened in the repository over the past week. The top three pull requests with the highest number of commits are highlighted as 'key' pull requests. Other pull requests are grouped based on similar characteristics for easier analysis. Up to 25 pull requests are displayed in this section, while any remaining pull requests beyond this limit are omitted for brevity.

Pull Requests Opened This Week: 9

Key Open Pull Requests

1. merge up v3.10.6: This pull request aims to merge the v3.10.6 release branch into the main development line, incorporating multiple backported bug fixes, documentation updates, continuous integration improvements, and release preparations for the Matplotlib 3.10.6 bugfix release.

  • URL: pull/30491
  • Merged: No
  • Associated Commits: 3b85b, d3c77, b8142, 3d46c, e1884, 5bdbb, 5359e, 34cca, 3950d, 7f8a4, 96512, 8b080, b1226, cdb39, 74d86, a474f, 1316b, b17b0, e4449, 33054, ca6a2, e7026, f25ce, ba268, e1e13, e3007, a55b8, 4b794, 25a97, 6b800, 53510, 81ed6, d3365, 2e047, b2358, 5cd38, 1d526, 22c64, 676f2

2. FIX: Mark shared Axes as stale when propagating adjustable: This pull request addresses a bug by ensuring that when the _adjustable property is propagated to all sibling Axes, all of them are correctly marked as stale rather than only the current one, and it also includes slight improvements to the documentation.

  • URL: pull/30462
  • Merged: No
  • Associated Commits: 36e0f

3. removed test_image_cursor_formatting(): This pull request removes the outdated and ineffective test test_image_cursor_formatting() because it does not properly test the intended behavior of im.format_cursor_data() with masked image data, and its functionality is already covered by a more comprehensive existing test, test_format_cursor_data().

  • URL: pull/30465
  • Merged: No
  • Associated Commits: 1f2ca

Other Open Pull Requests

  • Bug fixes for rendering and export issues: Multiple pull requests address rendering and export problems in Matplotlib. One fixes text layouting for coordinates in the wx backend across Windows and macOS, another resolves a crash during SVG export by skipping blitting, and a third improves colorbar compression to enhance rendering or performance.
  • [pull/30466, pull/30483, pull/30490]
  • Code correctness and compatibility improvements: There is a pull request correcting a spelling error in a method name while maintaining backwards compatibility through aliases and updating type hints. Another pull request improves test reliability by using a temporary directory to avoid manual cleanup of generated files.
  • [pull/30475, pull/30497]
  • Documentation update backport: One pull request proposes backporting a documentation update that changes the pytz link to point to PyPI for branch v3.10.6-doc.
  • [pull/30495]

3.2 Closed Pull Requests

This section provides a summary of pull requests that were closed in the repository over the past week. The top three pull requests with the highest number of commits are highlighted as 'key' pull requests. Other pull requests are grouped based on similar characteristics for easier analysis. Up to 25 pull requests are displayed in this section, while any remaining pull requests beyond this limit are omitted for brevity.

Pull Requests Closed This Week: 20

Key Closed Pull Requests

1. DOC: Fix text formatting of imshow_extent example: This pull request fixes the text formatting in the imshow_extent example by changing the font style from italics to normal to improve documentation clarity.

  • URL: pull/30471
  • Merged: 2025-08-27T05:38:18Z
  • Associated Commits: 56c45, 03da9, b086d

2. FIX: be more cautious about checking widget size: This pull request fixes an issue by making the widget size check more cautious to prevent failures that occur when the C++ side of an object has been cleaned up while the Python side still lingers due to references in callbacks, thereby resolving the related issue #29618.

  • URL: pull/30484
  • Merged: 2025-08-29T20:20:22Z
  • Associated Commits: 4b0a2, 8693a, 63842

3. ci: Remove cibuildwheel override for win_arm64/Py3.14: This pull request removes the cibuildwheel override for the win_arm64 platform and Python 3.14 testing in the continuous integration setup because the project’s dependencies now provide pre-built wheels for these environments.

  • URL: pull/30476
  • Merged: 2025-08-27T07:57:58Z
  • Associated Commits: 5db47, 4a260

Other Closed Pull Requests

  • Datetime support in violin plots: This pull request adds a test for datetime support in the ax.violin plotting function, addressing issue #26864. It notes that the positions argument currently does not work and requires further investigation.
    pull/30384
  • Handling ImportError for Tk in python-build-standalone: These pull requests enhance robustness by gracefully handling the ImportError related to Tk in the python-build-standalone environment. The fix is backported to the v3.10.x branch to maintain consistency across versions.
    pull/30394, pull/30481
  • Deprecation and code cleanup in locator and colorizer classes: These pull requests deprecate the redundant axes parameter in RadialLocator and remove redundant calls to sanitize extrema in Colorizer.set_clim. Both changes simplify the codebase and prepare for future improvements in locator design and MultiNorm integration.
    pull/30469, pull/30470
  • Documentation clarifications and corrections: Multiple pull requests improve documentation by clarifying the behavior of sanitize_sequence in _replacer, distinguishing inset_locator.inset_axes from Axes.inset_axes, and updating warnings and links related to the python-build-standalone process and the pytz package. These updates include backports to older branches for consistency.
    pull/30478, pull/30479, pull/30486, pull/30487, pull/30488, pull/30489, pull/30492, pull/30494
  • Fixes for testing and layout behavior: These pull requests fix errors in the triage_tests tool to support test modules without baseline images and enable ticklabels to respect the set_in_layout(False) setting for better manual layout control.
    pull/30467, pull/30468
  • Removal of deprecated warnings and platform-specific overrides: These pull requests remove deprecated warnings related to hiding artist names in legends and backport the removal of the cibuildwheel override for the win_arm64 platform with Python 3.14 to the v3.10.x branch.
    pull/30464, pull/30477

3.3 Pull Request Discussion Insights

This section will analyze the tone and sentiment of discussions within this project's open and closed pull requests that occurred within the past week. It aims to identify potentially heated exchanges and to maintain a constructive project environment.

Based on our analysis, there are no instances of toxic discussions in the project's open or closed pull requests from the past week.


IV. Contributors

4.1 Contributors

Active Contributors:

We consider an active contributor in this project to be any contributor who has made at least 1 commit, opened at least 1 issue, created at least 1 pull request, or made more than 2 comments in the last month.

If there are more than 10 active contributors, the list is truncated to the top 10 based on contribution metrics for better clarity.

Contributor Commits Pull Requests Issues Comments
timhoffm 19 5 2 29
QuLogic 11 3 1 32
anntzer 10 6 0 9
rcomer 3 2 1 18
tacaswell 6 1 1 14
ksunden 17 2 0 2
story645 1 1 0 18
dstansby 8 2 1 2
jklymak 1 1 1 10
meeseeksmachine 0 9 0 0

Don't miss what's next. Subscribe to Weekly Project News:
Powered by Buttondown, the easiest way to start and grow your newsletter.