Weekly GitHub Report for Matplotlib: August 04, 2025 - August 11, 2025 (22:42:50)
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 compliance, fixes for pyplot.matshow and Axes positioning, adjustments to polar plot titles, GTK4 version gating, and warnings for scatter plot color conflicts, alongside various documentation enhancements.
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]: AutoDateLocator is not regular at the end of the month: This issue reports a bug in Matplotlib’s
AutoDateLocator
where date ticks plotted at the end of a month are irregularly spaced, causing the locator to jump a day and produce uneven intervals. The user proposes a code fix to manually define the range of days for weekly frequency to ensure regular spacing, especially around month boundaries, and discusses the challenge of aligning ticks consistently when months have different lengths.- The comments explain that the current behavior of
AutoDateLocator
is intentional to align ticks with significant dates like the start of a month, but this can cause irregular spacing near month ends. Contributors discuss trade-offs between having regular intervals versus aligning with month boundaries, the impact on interactive panning, and suggest that users can customize tick behavior with parameters or different locators, while acknowledging that improving the default behavior might require more complex code. - Number of comments this week: 7
- The comments explain that the current behavior of
-
[Bug]: RadioButtons.set_label_props is expecting values of a single list: This issue reports that the
RadioButtons.set_label_props
method expects a dictionary with values that are lists, which is neither documented nor intuitive, leading to errors when passing single scalar values. The user suggests improving the method to accept either a single value broadcast to all labels or a sequence matching the number of labels, and the discussion explores aligning this behavior with similar widget properties and enhancing documentation.- The comments discuss documenting the current behavior and improving the API to accept single values or sequences matching label counts, noting existing tests and inconsistencies with related properties; contributors consider implementation details, backward compatibility, and alignment with similar widgets before proceeding.
- Number of comments this week: 6
-
[Doc]: Fix version for switching to version 9 of the documentation.: This issue addresses an incorrect link in the version switcher file for matplotlib version 3.10.5, which points to a wrong location for version 9 of the documentation. The reporter suggests fixing this by adding a redirection folder or creating a folder for version 9.4 in the documentation, or alternatively removing the 9.4 tag altogether to prevent confusion.
- The comments reveal that the issue was fixed via a pull request, though it was clarified that the problematic file is not actually used on the live documentation site. Despite this, there is agreement on correcting the link to prevent future bugs, and one participant expressed interest in working on the issue.
- Number of comments this week: 5
-
[Bug]: removing module does not reliably work anymore in 3.10.5 (regression): This issue reports a regression in matplotlib version 3.10.5 where dynamically removing and reimporting the module no longer works, causing an ImportError related to pybind11 enum types. The user explains that this problem affects their multiprocessing plotting workflow when using LaTeX text rendering, due to caching conflicts, and identifies the root cause as an update in the pybind11 version used to build matplotlib extensions.
- The discussion reveals that the error stems from changes in pybind11 between versions 2.13.6 and 3.0.0, with a workaround found by compiling matplotlib against the older pybind11 version. The maintainers question the need to support dynamic module reloading but acknowledge the underlying cache issue related to multiprocessing and suggest opening a separate issue to address cache path resetting more robustly.
- Number of comments this week: 4
-
[Bug]:
libc++abi: terminating due to uncaught exception of type NSException
crash when combining tkinter and matplotlib with the macosx backend: This issue describes a crash occurring on macOS when using the matplotlib macosx backend together with a tkinter window, resulting in alibc++abi
uncaught NSException error. The problem arises because creating a matplotlib figure withplt.subplots
initiates the macOS GUI event loop, which conflicts with the tkinter event loop, causing the application to terminate unexpectedly.- The comments explain that mixing two different GUI event loops (macosx and Tk) is not recommended and likely the root cause of the crash. It is suggested to use the Tk backend for matplotlib when working with tkinter or a headless backend if no GUI is needed, and the issue reporter acknowledges this explanation and plans to document the workaround for users of their package.
- 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.
- [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 problem where the x-axis labels are not centered on the bars, compounded by a lack of clear documentation on how categories are mapped to integers, making it difficult to correctly position the labels. - [ENH]: Parse "\limits" in mathtext: This issue addresses a problem in the matplotlib mathtext module where the LaTeX command "\limits" is not recognized and causes a parsing error when rendering mathematical expressions, specifically integrals with limits displayed above and below the integral sign. The user reports that attempting to parse expressions like
\int \limits_{v}^{\mu e} e d A
results in a ValueError due to an unknown symbol, and they expect the rendering to correctly position the limits as in standard LaTeX output. - [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 consistency and accuracy of displayed data.
- [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 when converting data coordinates. The user highlights that although the documentation implies data limits update automatically with new data, in practice, manual calls to methods likeset_xlim
orset_ylim
are required to refresh these limits, leading to confusion and inconsistent behavior. Since there were fewer than 5 open issues, all of the open issues have been listed above.
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: 9
Summarized Issues:
- GUI Backend Conflicts on macOS: This issue describes a crash caused by an uncaught NSException when creating a matplotlib figure with the macosx backend followed by initializing a tkinter window, due to conflicting GUI event loops on macOS. The problem does not occur when using the tkagg backend or manually creating a figure without triggering the macosx GUI loop.
- issues/30388
- ImportError Handling and Regression: Several issues report ImportErrors affecting matplotlib functionality, including a need to gracefully handle ImportError related to python-build-standalone in _backend_tk.py by catching the exception and providing clearer warnings. Additionally, a regression in version 3.10.5 breaks dynamic removal and reimporting of the matplotlib module due to an ImportError related to pybind11 enum type registration, which worked in version 3.10.3.
- issues/30390, issues/30392
- Documentation Updates and Improvements: There are requests to update documentation to reduce the prominence of warnings about uv/python-build-standalone incompatibility that previously broke tkagg, reflecting that recent releases have resolved the problem. Another proposal suggests enhancing the Sphinx extension to allow the :context: option to persist across multiple docstrings or adding a new .. plotsetup:: directive to share setup code for plots within class method documentation.
- issues/30409, issues/30410
- API Usability and Behavior Issues: One issue reports that the RadioButtons.set_label_props method expects a dictionary with list values matching the number of labels, which is undocumented and unintuitive, causing errors when passing single scalar values like a string for color. It suggests improving the method to accept either a single value broadcast to all labels or a sequence matching the label count for better usability. Another issue highlights that AutoDateLocator produces irregularly spaced date ticks at month-end, causing the locator to jump a day and break expected intervals, suggesting code modification for consistent tick placement.
- issues/30393, issues/30395
- Build and Compilation Errors: A C++11 narrowing conversion error occurs when building for 32-bit targets due to unsigned int values being implicitly converted to signed types without explicit casts, causing compilation failures. This can be resolved by adding static casts to silence the narrowing warnings.
- issues/30413
- Documentation Link Errors: An issue addresses an incorrect link in the version switcher file for matplotlib version 3.10.5 that points to version 9 of the documentation, proposing a fix by adding a redirection folder or removing the outdated version tag to ensure proper navigation.
- issues/30397
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: 2
Summarized Issues:
- Arrow drawing limitations: The
ax.arrow()
function in Matplotlib does not display the arrowhead tip by default because its size parameters are fixed in absolute units and must be explicitly set. This design limitation causes confusion and leads users to prefer theannotate()
method for drawing arrows instead. - issues/30389
- Memory leak in figure handling: Repeatedly creating, plotting with, and closing figures using
imshow()
in a loop causes a megabyte-level memory leak, with memory usage steadily increasing despite explicit cleanup. This indicates that Matplotlib does not fully release resources and references during such operations, leading to inefficient memory management. - issues/30400
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: 11
Key Open Pull Requests
1. merge up v3.10.5: This pull request is a comprehensive merge-up to version 3.10.5 of the matplotlib project, backporting numerous bug fixes, documentation improvements, type hint corrections, test enhancements, CI updates, and minor feature adjustments from later branches to the 3.10.x maintenance branch to prepare for the 3.10.5 release.
- URL: pull/30401
- Merged: No
- Associated Commits: fff6a, 98594, 4244f, 80766, b4c1a, d0829, 69cc6, e9c02, 44c23, 9e38a, 28273, 16cf9, 4ecba, e751c, 2dd5e, e4627, 97516, 8c9c1, ba89f, 8b1a7, 1316b, ac2a2, 50cad, c38e0, 1bdc3, bf640, 365dd, b6f6e, 7bbf2, a2ed2, 6843f, f51d4, f098e, 01d66, 6bc61, 519b3, 3ac78, 5d628, d0ab4, 5090b, f8694, 90a5a, 89460, d4820, 2ddb3, 2736c, ac649, 00567, ba55b, a5691, 57878, 1e890, 64ff9, f5d67, 03590, 30817, 5fde1, ba588, b29bd, 282ef, 00b4d, 465d9, a4996, 2230a, 479ed, 4bf74, d8654, 6cab0, 877ec, 6c394, 7470a, 02c05, fe014, 34a11, 25b93, 88bd9, 2673b, f7252, 54d66, a5953, 9a572, bdba9, a1440, 6a6e8, 09bea, 4cd3b, 7dfb4, d1c20, 110b6, 704c2, 9a803, 59a97, a7f5c, 8a1ce, 0753e, 4ee1e, 9846a, 9e425, 950f2, 495fb, 7dab2, 2322a, 2c0e1, be0d1, f7b8d, cd67b, 05d10, a64d4, 95c87, 9f40c, 05953, 0ef11, acb73, 3b50d, 0ef15, 71e69, 8b827, e82b4, 3b85b, ceb90, d3c77, 35d90, b8142, 3d46c, d397c, 6ea55, bb765, 9f08b, 4b8e2, 8761e, deef9, d7266, bfc2b, 65573, 0c10e, 9ca8d, e1884, 5bdbb, 5359e, 34cca, ff1f8, ae159, f4920, 7eb3a, d7392, dbee8, 3950d, 7f8a4, b7f84, 8dbf0, 96512, 8b080, a8ded, e8f3c, 22b82, daf4c, 6b739, f24ff, a6cc5, 3ca80, 4b7ea, b9db5, 8bed3, 8c5c5, f7082, e6394, b1226, cdb39, 5c135, b1d31, 1790c, 31199, e0739, dd24d, c7c11, 3c47b, b1e9d, f6a80, 3aa14, cb23e, 6da96, 534dc, a8633, 62d5c, 74d86, a474f, 55acf
2. ENH: Scroll to zoom: This pull request implements a minimal version of scroll-to-zoom functionality in Matplotlib, enabling zooming towards the cursor with the mouse scroll wheel when either the pan or zoom axes manipulation tools are active, while preserving the aspect ratio and preventing accidental zooming without an active tool or modifier keys pressed.
- URL: pull/30405
- Merged: No
3. DOC: Scale axis parameter: This pull request documents the current state of the soon-to-be-removed axis parameter of Scales in the Matplotlib project, as referenced by issues #29349 and #29988.
- URL: pull/30404
- Merged: No
Other Open Pull Requests
- HiDPI scaling fix in Qt backend: This pull request addresses inconsistencies in HiDPI scaling on X11 and Windows by adding a missing
_update_pixel_ratio
call to ensure the internal scale is correctly initialized and updated. This improves consistency in handling fractional and integer scaling factors across different platforms.
pull/30399
- WebAgg scroll event control: This pull request adds a feature to the WebAgg backend allowing users to enable or disable scroll event capture on figures. It provides a mechanism to control whether the figure should call
preventDefault
on scroll events, which is useful for managing scroll behavior in interactive plots.
pull/30403
- ImportError handling for Tk in python-build-standalone: This pull request enhances matplotlib by gracefully handling the ImportError related to Tk in the python-build-standalone environment. It addresses issue #30390 to improve robustness in this environment.
pull/30394
- Release guide update: This pull request updates the release guide by adding a note about closing old milestones and separating the push steps for branch and tag. These changes improve the clarity and process of the release documentation.
pull/30402
- Font manager cache rebuild fix: This pull request fixes the font manager by correcting conditional logic to allow users to rebuild the font cache when disabling fallback and enabling rebuild. This ensures the cache is properly rebuilt instead of prematurely returning an error.
pull/30406
imshow()
alpha parameter enhancement: This pull request updates theimshow()
function to support array-like values for thealpha
parameter, enabling per-pixel transparency effects. It also includes a new test to verify this functionality works correctly.
pull/30407
- Deprecation of
anchor
parameter in Axes3D.set_aspect: This pull request removes the unusedanchor
parameter from theAxes3D.set_aspect
method, adds a conditional warning when it is used, and simplifies the method's logic. Documentation is updated to clarify 3D-specific behavior, and a new unit test ensures the deprecation warning functions correctly.
pull/30408
- Improved documentation for label_props in CheckButtons and RadioButtons: This pull request improves the documentation of the
label_props
parameter for CheckButtons and RadioButtons, addressing issue #30393. It provides clearer and more consistent API documentation for these widgets.
pull/30412
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: 6
Key Closed Pull Requests
1. Make PyFT2Font a subclass of FT2Font: This pull request refactors the codebase by making PyFT2Font
a subclass of FT2Font
to eliminate a level of indirection and facilitate future development, while carefully managing constructor and destructor order and ownership of fallback lists between the two classes.
- URL: pull/30324
- Merged: 2025-08-07T21:18:24Z
2. Fix the link to latest stable documentation: This pull request fixes the link to the latest stable documentation by updating the version configuration in the documentation switcher to prevent the display of a message indicating the documentation is for an unstable development version.
- URL: pull/30396
- Merged: 2025-08-06T13:36:09Z
3. {,Range}Slider: accept callable valfmt arguments: This pull request enhances the {,Range}Slider widget in Matplotlib to accept callable functions for the valfmt parameter, allowing dynamic and customizable formatting of slider values, such as displaying logarithmic scales concisely.
- URL: pull/30362
- Merged: 2025-08-07T18:16:14Z
- Associated Commits: 41ba7
Other Closed Pull Requests
- Code cleanup and default parameter removal: These pull requests focus on simplifying the code by removing redundant or unnecessary elements. One removes the explicit
autolim=True
parameter inadd_collection
calls since it is the default, and another removes theqt_core
fixture from tests due to changes in imports making it obsolete. - [pull/30382, pull/30398]
- Bug fix in RadioButtons component: This pull request fixes the
label_props
argument and theset_label_props
method in the RadioButtons component, addressing issue #30393. The changes ensure the component behaves correctly with respect to label properties. - [pull/30411]
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 | 15 | 5 | 2 | 58 |
QuLogic | 22 | 5 | 1 | 23 |
nrnavaneet | 16 | 2 | 0 | 10 |
tacaswell | 10 | 1 | 1 | 14 |
dstansby | 15 | 3 | 1 | 7 |
ksunden | 18 | 2 | 0 | 2 |
story645 | 0 | 0 | 1 | 20 |
rcomer | 1 | 0 | 0 | 17 |
AndrGutierrez | 16 | 1 | 0 | 0 |
anntzer | 9 | 1 | 0 | 4 |
Access Last Week's Newsletter: