Weekly GitHub Report for Matplotlib: October 20, 2025 - October 27, 2025 (12:03:43)
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 image interpolation, removal of md5 to support FIPS-enabled systems, fixes for pyplot.matshow and polar plot titles, and added warnings for scatter plot color usage, 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.
-
[MNT]: Declare table() to be not further developed: This issue addresses the decision to declare the
table()feature in the project as no longer actively developed due to its substantial design flaws, recommending a freeze on new features and bugfixes. It proposes setting clear expectations by labeling the feature as "frozen" and suggests directing users to a third-party package, blume, as an alternative for better table functionality.- The comments reflect a consensus that a feature freeze is reasonable given the fundamental design issues and limited maintenance resources, though some users still value the current functionality and would appreciate bugfixes. There is discussion about the appropriateness and development status of the blume package as a replacement, concerns about backlog management and issue triaging, and a shared desire to manage user expectations by clearly communicating the limited support for
table(). - Number of comments this week: 9
- The comments reflect a consensus that a feature freeze is reasonable given the fundamental design issues and limited maintenance resources, though some users still value the current functionality and would appreciate bugfixes. There is discussion about the appropriateness and development status of the blume package as a replacement, concerns about backlog management and issue triaging, and a shared desire to manage user expectations by clearly communicating the limited support for
-
[Bug]:
set_positiondoes not work on an inset_axes: This issue reports that theset_positionmethod does not work to move inset axes created withinset_axesin Matplotlib, meaning attempts to reposition these inset axes programmatically have no effect. The user expects that callingset_positionon an inset axes should update its location, but currently the inset axes remain fixed, causing problems such as unwanted movement during window resizing and limiting dynamic interaction possibilities.- The discussion confirms that inset axes positioning is managed differently from normal axes via a private
axes_locator, and there is no public API to move them after creation. Workarounds include redefining the axes locator manually or removing and re-adding the inset, though the latter is problematic. The maintainers consider possible solutions like subclassing or modifyingset_positionbehavior but note complications due to dynamic axes types and API design. Users share practical use cases involving dynamic insets for zooming and 3D plot orientation, emphasizing the need for better support. A minimal interim step suggested is documenting thatset_positionis unsupported on inset axes. Additional related discussions and backend event handling improvements are also mentioned. - Number of comments this week: 9
- The discussion confirms that inset axes positioning is managed differently from normal axes via a private
-
[Bug]: calling pyplot.gca() simultaneously in several threads crashes with the MacOS backend: This issue reports a crash occurring when calling
pyplot.gca()simultaneously from multiple threads using the MacOS backend in Matplotlib. The crash is caused by the MacOS backend attempting to instantiate anNSWindowon a non-main thread, which is not allowed, leading to an uncaught exception and application termination.- The comments clarify that Matplotlib's pyplot is generally not thread-safe and that simultaneous calls to
plt.gca()from multiple threads are unsupported. While some acknowledge that such usage is nonsensical, there is consensus that the crash should be replaced by a more user-friendly runtime error. Suggestions include improving error handling to prevent interpreter crashes and encouraging use of Figure and Axes objects directly to avoid reliance on pyplot’s global state in multithreaded contexts. - Number of comments this week: 7
- The comments clarify that Matplotlib's pyplot is generally not thread-safe and that simultaneous calls to
-
[MNT]: Inconsistent type annotation: This issue addresses inconsistent type annotations in the mplot3d package, where a variable named zs is incorrectly inferred as an integer by Pylance despite being a List[Any] like similar variables xs and ys. The proposed solution involves using an inline type annotation with a Union of List (np.typing.ArrayLike) and float to resolve the type confusion.
- The first commenter expressed interest in contributing and asked whether to use inline type annotations or create a stub (.pyi) file according to the project's coding guidelines. The response clarified that mplot3d is not yet typed, the project's policy favors stub files for type annotations, and contributors are encouraged to submit pull requests without expecting issue assignments.
- Number of comments this week: 2
Since there were fewer than 5 open issues, all of the open issues have been listed above.
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=Trueparameter, 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 1. 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 and inefficiency of building a single Sphinx Gallery example file during documentation generation, which currently requires long build times or manual configuration edits that still produce many warnings. The author proposes improving the documentation with clear instructions and potentially adding a dedicated build target to streamline this process, making it easier for developers—especially beginners—to preview and develop individual gallery examples efficiently.
- [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 placed 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, whereas the expected behavior is to correctly display the limits above and below the integral as in standard LaTeX formatting.
- [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 reporter suggests implementing a similar feature for log formatters to match the cursor pointing precision, enhancing the accuracy of displayed data values.
- [Bug]:
ax.transDatadoes not honor data limits: This issue reports a bug in Matplotlib where the transformationax.transDatadoes not respect the current data limits set byxlimandylim, causing it to use outdated data limits when transforming coordinates. The user highlights that although the documentation implies data limits update automatically with new data, in practice, manual calls toset_xlimorset_ylimare required to refresh these limits, leading to confusion and suggesting either a documentation update or an internal fix to ensuretransDataalways uses the latest data limits.
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:
- Feature Freezing and Alternatives: The
table()feature in Matplotlib is proposed to be declared frozen due to fundamental design flaws, meaning no further development or bug fixes will be made. Users are recommended to consider the third-party package blume as an alternative to manage expectations and user disappointment. - issues/30664
- Concurrency and Backend Crashes: Calling
pyplot.gca()concurrently from multiple threads causes a crash on macOS because the MacOS backend tries to instantiate an NSWindow off the main thread, which is disallowed. This results in an uncaught exception and application termination, highlighting thread safety issues in the backend. - issues/30666
- Type Annotation Inconsistencies: The mplot3d package has inconsistent type annotations where the variable
zsis incorrectly inferred as an integer by Pylance despite being a List[Any]. The issue proposes fixing this with inline type annotations using a Union of List (np.typing.ArrayLike) and float, while debating whether to use inline annotations or stub files per the project's typing policy. - issues/30670
- Plot Styling Enhancements: The
grouped_barplotting function is proposed to support custom hatch styling through a broadcasted hatch parameter, allowing distinct hatches per dataset. This enhancement aims to improve consistency with other plotting methods like histograms and provide more flexible styling options. - issues/30673
- Keyboard Event Handling Bugs: Releasing a key in a combination (e.g., "alt + h") does not correctly register the release of the individual key but instead reports the release of the entire combination. This causes incorrect event sequences and makes it impossible to detect which keys remain pressed, complicating keyboard interaction handling.
- issues/30678
- Normalization Method Proposal: A new normalization method called "CenteredAsinhNorm" is proposed to automatically center the AsinhNorm color scale around zero. This would better support diverging colormaps for data containing both positive and negative values, improving visualization accuracy.
- issues/30679
- Inset Axes Positioning Bug: The
set_positionmethod does not work to change the position of an inset axes created withinset_axes, meaning attempts to move the inset axes programmatically have no effect. This complicates use cases such as dynamic repositioning during window resizing or interactive data exploration. - issues/30681
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:
- Grid line orientation inconsistency: This issue involves a bug where using
pyplot.grid(axis='x'/'y')causes the displayed plot and the saved figure to show different grid line orientations. The problem arises becauseplt.grid()is called after setting the grid on the axes, leading to y-axis grid lines on the display but x-axis grid lines in the saved image. - issues/30663
- Type hinting error in fontproperties keyword: The
fontpropertieskeyword in thetext.pyifile is incorrectly typed asmatplotlib.path.Pathinstead ofpathlib.Path. This causes type checker errors when apathlib.Pathobject is passed during the initialization of aTextobject. - issues/30669
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: 4
Key Open Pull Requests
1. Grammar corrections in User guide FAQ: This pull request proposes minor grammar corrections in the User guide FAQ, including the proper use of "its" versus "it's" and adjusting verb plurality to agree with compound subjects joined by "or," as well as restructuring sentences to resolve subject/pronoun/verb disagreements.
- URL: pull/30665
- Merged: No
2. fix: uses scatter markers with facecolor = 'none': This pull request fixes a bug in Matplotlib's scatter function where the facecolors='none' option was ignored, causing markers to be filled instead of hollow, by adjusting the internal handling in PathCollection to correctly interpret and render unfilled scatter markers as outlined only.
- URL: pull/30671
- Merged: No
- Associated Commits: f0cb5
3. BACKEND/Tk: Report released key on KeyRelease events instead of composed key (fix GH#30678): This pull request fixes the Tk backend in Matplotlib to report the actual physical key released on KeyRelease events—distinguishing between modifier and non-modifier keys—instead of reporting the composed key, thereby improving key release detection consistency and aligning with user expectations while maintaining backward compatibility.
- URL: pull/30680
- Merged: No
- Associated Commits: fc328
Other Open Pull Requests
- Mathtext symbol table redesign: This pull request updates the mathtext symbol tables by replacing static column-based layouts with a responsive CSS grid that dynamically resizes and wraps based on browser width. It also adds a helper function for Sphinx integration, improves HTML/CSS styling for better mobile and tablet viewing, and organizes symbols by category with consistent ordering.
- pull/30682
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: 7
Key Closed Pull Requests
1. Merge branch 'main' into text-overhaul: This pull request merges the latest changes from the main branch into the text-overhaul feature branch to resolve continuous integration failures occurring on the feature branch but not on main, effectively testing whether syncing with main fixes the CI issues.
- URL: pull/30677
- Merged: Yes
- Associated Commits: 0cfa6, b23f1, 692a9, 87079, ca02c, 4d2e6, a3faf, e8eac, 851d6, b72e9, 155b1, 291d6, 56b2d, 75a1e, b63a7, f8583, 0a744, e52f7, 165cc, d2ab5, 4a9c1, a1598, d8f00, b6f36, f8400, 22482, a00cb, 37968, d53d7, 8a6e2, 9d04f, b755c, ee6c7, 5370f, 83ed7, c3f42, 8e2eb, cca26, 56494, 65201, 1c95f, 56c18, e7e58, f31a1, 509dc, f380a, 6e959, f783a, 27adc, de229, 11fc1, 94d6f, 9b61b, 3ecf0, ea40d, cfccd, ab067, ce0f0, bd81e, bd2f7, adf37, 36a62, 01c66, 72660, a0fb5
2. Backport PR #30672 on branch v3.10.x (Use pathlib.Path instead of matplotlib.path.Path in text.pyi): This pull request backports the change from PR #30672 to the v3.10.x branch, replacing the use of matplotlib.path.Path with pathlib.Path in the text.pyi file.
- URL: pull/30674
- Merged: Yes
- Associated Commits: a7675
3. Backport PR #30657 on branch v3.10.x (Fix AttributeError: module 'gi' has no attribute 'require_version'): This pull request backports the fix for the AttributeError caused by the missing 'require_version' attribute in the 'gi' module to the v3.10.x branch of the matplotlib project.
- URL: pull/30675
- Merged: Yes
- Associated Commits: b8434
Other Closed Pull Requests
- Grouped Bar Hatch Pattern Enhancement: This pull request enhances the grouped_bar function by adding support for broadcasted hatch patterns, enabling one hatch style to be applied per dataset. This improvement allows for more flexible and visually distinct bar chart styling in Matplotlib.
- pull/30676
- Documentation Typo Corrections: This pull request fixes typographical errors by changing "lets" to the correct contraction "let's" in the documentation. These corrections improve the clarity and professionalism of the project documentation.
- pull/30667
- Build Environment Update: This pull request updates the cibuildwheel configuration to switch the macOS Intel build environment from version 13 to version 15. The change is necessary due to the deprecation of the older macOS version in the build process.
- pull/30668
- Type Annotation Fix: This pull request updates the type annotation for Text.fontproperties by replacing matplotlib.path.Path with pathlib.Path. This change resolves type checker errors without affecting runtime behavior by correctly representing filesystem paths.
- pull/30672
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 | 1 | 2 | 34 |
| QuLogic | 21 | 8 | 0 | 6 |
| rcomer | 7 | 3 | 2 | 9 |
| G26karthik | 17 | 0 | 0 | 0 |
| kdschlosser | 0 | 0 | 3 | 11 |
| tacaswell | 5 | 1 | 1 | 6 |
| heinrich5991 | 3 | 1 | 2 | 3 |
| story645 | 0 | 0 | 1 | 8 |
| ksunden | 8 | 0 | 0 | 0 |
| evhalp | 6 | 1 | 0 | 0 |