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:
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.
-
[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
-
[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
-
[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 tocontains_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
-
[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
-
[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 thecopy_from_bbox
method in the SVG backend. The problem does not occur whenuseblit=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
- The comments acknowledge the original contributor’s isolation work and provide a smaller reproducible snippet confirming the error occurs only with
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.
- [Bug]: Misalignment of Labels and Incorrect Density Values in
ax.hist()
for Categorical Variables: This issue addresses a bug in theax.hist()
function of Matplotlib when used with categorical variables and thedensity=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. - [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.
- [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.
- [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.
- [Bug]:
ax.transData
does not honor data limits: This issue reports a bug in Matplotlib where the transformationax.transData
does not automatically respect the current data limits (xlim
andylim
), 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 likeset_xlim
orset_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 tocontains_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 requiredcopy_from_bbox
method. Settinguseblit=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 aFileNotFoundError
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
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
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
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 thepositions
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 inRadialLocator
and remove redundant calls to sanitize extrema inColorizer.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
, distinguishinginset_locator.inset_axes
fromAxes.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 theset_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 |