Weekly GitHub Report for Matplotlib: November 17, 2025 - November 24, 2025 (12:06:05)
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 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]: Changing the release workflow for external builds: This issue proposes changing the release workflow for external builds by moving the release build process outside the main repository, following a pattern used by another project. It addresses a recent build failure caused by missing dependency wheels and headers, outlines technical changes to the workflow, and lists follow-up steps to improve release management and automation.
- The comments show general agreement with the policy changes and a cursory technical review, noting that some fixes were already addressed in a previous pull request; overall, the discussion supports centralizing release builds externally while acknowledging some open questions about workflow improvements.
- Number of comments this week: 3
-
3.10.8 release workflow failed?: This issue concerns the failure of the 3.10.8 release workflow for a project, which resulted in the release not being published to PyPI despite the release tag being created and some distributions already picking it up. The user requests either publishing the missing artifacts for the release or creating a new release to synchronize the distribution channels.
- The maintainers explain that they are migrating the build pipeline to a dedicated repository to address the build failure and that publishing 3.10.8 to PyPI will serve as a test for this new setup. They also note that the release contains minimal changes and prefer fixing the root cause rather than issuing a new release, and they reference a related issue for further context.
- Number of comments this week: 2
-
1. Feature Request: Editable Figure Format (MATLAB-like .fig functionality) Problem Background more interactive like MATLAB: This issue requests the introduction of an official editable figure format for Matplotlib, similar to MATLAB’s .fig files, which would allow users to save figures in a way that supports reopening and interactive editing of titles, labels, legends, and other properties without rerunning the original code. The feature aims to improve workflow efficiency for researchers, engineers, students, and users needing last-minute presentation adjustments by enabling GUI-based modifications and ensuring compatibility across Matplotlib versions.
- The comments express skepticism about the feasibility and utility of this feature, noting that implementing it would require a major rearchitecture of Matplotlib’s core components and likely take several years. Additionally, some argue that maintaining a close link between data, plotting code, and figure files is preferable, suggesting that saving processed data for re-plotting offers more flexibility than an editable figure format.
- Number of comments this week: 2
-
[Bug]: Bug / Inconsistency: Title Format Lost After Interactive Editing: This issue reports a bug in Matplotlib where the formatting of a plot title, such as boldness and color, is lost after the user interactively edits any label or legend in the plotting window. The problem occurs because the current implementation replaces the entire title object rather than updating its text, causing the title's style to reset to default and disrupting the user's workflow.
- The comments identify the root cause as the use of
axes.set_title(title), which resets the title style, and propose a fix by updating the title text directly withaxes.title.set_text(title). Although there is uncertainty about how to write a unit test for this GUI-related fix, it is agreed that merging without a test is acceptable, and the behavior ofset_titleresetting styles is considered consistent with other title elements. - Number of comments this week: 2
- The comments identify the root cause as the use of
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 of efficiently building a single Sphinx Gallery example file, which currently requires lengthy build times or cumbersome workarounds that still produce many warnings. The author proposes improving the documentation with practical tips and adjusting the Sphinx Gallery configuration to streamline this process, making it easier for developers—especially beginners—to preview and develop individual gallery entries more quickly.
- [ENH]: Parse "\limits" in mathtext: This issue reports a problem in the matplotlib mathtext module where the LaTeX command "\limits" is not recognized and causes a parsing error when rendering mathematical expressions involving integrals. The user expects the "\limits" command to position subscripts and superscripts above and below the integral symbol, but instead, the parser raises a ValueError indicating an unknown symbol, preventing correct rendering of the expression.
- [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 and consistency 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 to update these limits are necessary, leading to confusion and suggesting either a documentation update or an improvement to havetransDataalways reflect 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: 6
Summarized Issues:
- Release workflow failures and improvements: The release workflow for Matplotlib has experienced failures that prevented publishing release artifacts to PyPI, causing synchronization issues with distributions. To address these problems, a proposal suggests moving the build and release process to an external repository to fix dependency issues, improve license handling, and streamline upload tasks while seeking technical and policy reviews.
- issues/30762, issues/30765
- Legend customization limitations: Matplotlib currently lacks the ability to customize the line width of legend box edges, limiting user control over legend appearance. A new rcParams parameter
legend.linewidthhas been proposed to allow users to adjust this aspect for better visual customization. - issues/30767
- Editable figure format requests: There is a request for an official editable figure format in Matplotlib, similar to MATLAB’s .fig files, to enable saving, reopening, and interactive editing of figure elements without rerunning code. This feature aims to improve workflow efficiency and accessibility for various users including researchers and students.
- issues/30769
- Interactive text formatting issues: When editing labels or legend text interactively in Matplotlib’s plotting window, custom formatting on titles such as bold weight and color resets unexpectedly to default styles, disrupting user workflows. This issue highlights a problem with preserving text styling during interactive edits.
- issues/30770
- 3D scatter plot zooming enhancements: Users have requested more precise zooming features for interactive 3D scatter plots, such as scroll wheel zoom or box zoom tools, to better focus on and analyze specific clusters of points. This enhancement would improve the usability and analytical capabilities of 3D plots.
- issues/30772
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: 1
Summarized Issues:
- hexbin function documentation discrepancy: The documentation for the
hexbinfunction incorrectly states that when usingbins='log', a logarithmic scale with an added +1 offset is applied, but the actual code does not add +1. This causes zero-count bins to be mapped to a "bad" color instead of the bottom color of the colorbar, leading to a recommendation to update the documentation to match the implementation. - issues/30764
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: 12
Key Open Pull Requests
1. Add legend support for PatchCollection: This pull request adds support for displaying PatchCollection instances in matplotlib legends by registering them to use the existing HandlerPolyCollection legend handler, thereby enabling automatic legend entries with correct visual representation and eliminating the previous need for manual legend creation.
- URL: pull/30756
- Merged: No
- Associated Commits: 0f132, 3f013, 567b4, 8fc57, 478de, 8536b, 71c9a, 618d4, 122a7, 83adf, 477bf, 1a1b2, bd2f9, 33242, b669f, 92aae, 555fa
2. Fix axis3d to include offset text in tight bounding box calculation: This pull request fixes the 3D axis implementation in Matplotlib to include the offset text in the tight bounding box calculation by checking its visibility and bounding box extent, thereby ensuring consistent behavior with the 2D axis and preventing the offset text from being clipped in saved figures.
- URL: pull/30760
- Merged: No
3. Fix colorbar alignment with suptitle in compressed layout mode: This pull request fixes the alignment issue of colorbars with their parent axes when using compressed layout mode alongside a suptitle by ensuring that colorbars are sized and positioned based on the post-aspect-adjustment dimensions of the axes rather than the pre-adjustment layout grid, thereby maintaining proper vertical alignment and height.
- URL: pull/30766
- Merged: No
Other Open Pull Requests
- Legend customization enhancements: This pull request introduces a new
legend.linewidthrcParam and a correspondinglinewidthparameter in theLegendconstructor to allow users to independently control the linewidth of the legend box edges. This addition enhances customization consistency and flexibility in matplotlib's legend styling. - pull/30780
- Grouped bar legend fixes: This pull request fixes the grouped_bar method in Matplotlib's Axes by ensuring that single legend labels are correctly applied to all bars and that colors and hatch patterns are consistently handled across grouped bars. It also prevents TypeErrors caused by passing labels or colors multiple times and updates tests to verify these improvements.
- pull/30768
- Grouper and shared axes improvements: This pull request improves the Grouper functionality by adding an
include_selfparameter to theGrouper.get_siblingsmethod and refactorsAxes._shared_axesas a class variable. These changes enableget_shared_x/y_axes()to be class methods in preparation for a related issue discussion. - pull/30754
- Documentation update for tick label alignment: This pull request proposes adding a documentation example demonstrating how to align tick labels in Matplotlib. The update addresses issue #21566 by providing clearer guidance on tick label alignment.
- pull/30763
- Code robustness with std::visit: This pull request proposes using std::visit to exhaustively handle all std::variant possibilities, thereby eliminating the need to silence impossible "unhandled" cases in the code. This change improves code safety and clarity.
- pull/30773
- Title styling preservation fix: This pull request fixes an issue where calling
set_titlein Matplotlib would reset the title's style to default by modifying the implementation to update only the title string without altering its style. This preserves user-defined styling when changing the title text. - pull/30775
- Table function maintenance status: This pull request proposes marking the
table()function in the Matplotlib project as no longer being actively developed. This signals its maintenance status and closes issue #30664. - pull/30776
- Backend versioning introduction: This pull request proposes introducing backend versioning to facilitate the future evolution of the backend API without relying on introspection. It addresses issue #30559 and aims to provide a low-risk improvement that can be discarded if unnecessary.
- pull/30777
- Traceback maintainability improvement: This pull request aims to improve the maintainability of the codebase by removing decorator frames from tracebacks. This change is linked to issue #29863 and helps simplify debugging.
- pull/30778
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. Fix patchcollection legend: This pull request addresses the long-standing issue of PatchCollection instances not displaying in legends by adding a HandlerPatchCollection class that inherits from HandlerPolyCollection to provide consistent and maintainable legend support, accompanied by comprehensive tests and updated documentation.
- URL: pull/30755
- Merged: No
2. Docs: Add dynamic column resizing for mathtext symbol tables (fixes #26143): This pull request introduces a helper function dynamic_columns() to dynamically compute and resize the number of columns in mathtext symbol tables, exemplified by its application to the "Lower-case Greek" symbol table, addressing part of issue #26143 in the matplotlib project.
- URL: pull/30758
- Merged: No
3. Update mpl-sphinx-theme in environment.yml: This pull request updates the mpl-sphinx-theme in the environment.yml file to ensure that pydata-sphinx-theme and its dependencies are installed from conda-forge rather than pip, and also adds pikepdf, which is now available on conda-forge.
- URL: pull/30753
- Merged: Yes
- Associated Commits: a7cc8
Other Closed Pull Requests
- Generative AI usage policy clarification: This pull request clarifies the restrictions on the use of generative AI in contributions by explicitly separating relevant topics with bullet points and emphasizing the requirement for adding personal value. It also states that low-value AI-generated content can be rejected with a clear, friendly message referencing the project's AI usage policy.
- pull/30761
- Font properties handling improvement: This pull request proposes a small follow-up change to avoid copying font properties by making the copy inside the font metrics cache. This improves efficiency in handling font properties within the matplotlib project.
- pull/30771
- Documentation fix for hexbin function: This pull request fixes a documentation error related to the hexbin function in the Matplotlib project, addressing issue #30764. The correction ensures the documentation accurately reflects the function's usage.
- pull/30774
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 | 18 | 10 | 0 | 68 |
| ilakkmanoharan | 31 | 3 | 5 | 20 |
| FazeelUsmani | 30 | 4 | 0 | 8 |
| QuLogic | 17 | 2 | 0 | 13 |
| rcomer | 4 | 2 | 0 | 23 |
| story645 | 2 | 1 | 0 | 22 |
| tacaswell | 2 | 1 | 0 | 19 |
| anntzer | 6 | 2 | 0 | 1 |
| jklymak | 0 | 0 | 0 | 7 |
| No author found | 6 | 0 | 0 | 0 |