Weekly GitHub Report for Matplotlib: September 01, 2025 - September 08, 2025 (12:04:45)
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 enhanced warnings and documentation corrections.
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.
-
[ENH]: Add mechanism for feature flags: This issue proposes adding a mechanism for feature flags to manage fundamental behavioral changes in the project, such as registering standalone figures, GUI-native drawing elements, or the data prototype. The goal is to make these features toggleable, allowing experimental features to be shipped as opt-in for early adopters or opt-out if they cause issues, thereby minimizing unforeseen side effects.
- The comments discuss whether feature flags should be implemented as rcParams entries or require a separate dedicated namespace due to their temporary and evolving nature. There is consideration of the semantics and lifecycle of feature flags, with suggestions for warnings instead of errors on missing flags, and debate on whether some changes belong in rcParams or should be handled as alternate submodules.
- Number of comments this week: 4
-
Make Widget.useblit robust against underlying canvas changes: This issue addresses the fragility of the Widget.useblit attribute in Matplotlib when the underlying canvas changes, such as switching from a canvas that supports blitting to one that does not during vector output saving. It highlights the need for a unified and robust approach to handle these canvas changes, referencing previous attempts and discussions on improving the implementation.
- The comments discuss the complexity and effectiveness of two different approaches (#25085 and #30490) to handle canvas changes, with some concern that the simpler method (#30490) may be insufficient if another change (#29855) is implemented, suggesting a more comprehensive solution might be necessary.
- 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=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 long build times or cumbersome workarounds that generate many warnings. The author proposes improving the documentation with practical tips and modifying the build 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 integral expressions with limits placed above and below the integral sign. The user expects the "\limits" command to properly format the integral with its limits displayed vertically, but instead encounters a ValueError indicating an unknown symbol, highlighting a need for enhanced support for this LaTeX feature in matplotlib.
- [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 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.
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: 5
Summarized Issues:
- User interface improvements: Several issues focus on enhancing user interaction and experience in Matplotlib. One proposes adding an 'offset_loc' parameter to control the position of the offset label on time axes for better clarity, while another suggests implementing a built-in crosshair tool using a GUI-native cursor to improve performance and usability by avoiding expensive redraws.
- [issues/30500, issues/30515]
- Robustness and feature management: There are concerns about the fragility of the Widget.useblit attribute when switching canvases, highlighting the need for a unified solution to handle different canvas capabilities. Additionally, a feature flag mechanism is proposed to allow toggling experimental features on or off, enabling safer adoption and management of new functionalities separate from regular configuration.
- [issues/30503, issues/30519]
- Project automation issues: The new contributor greeting GitHub Action workflow is reported as not functioning correctly, indicating a problem with project automation tools that support community engagement.
- [issues/30522]
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: 5
Summarized Issues:
- API Naming and Compatibility: There is a longstanding typo in the public API method name
contains_branch_seperately
that needs correction tocontains_branch_separately
. The fix includes maintaining backward compatibility by aliasing the old misspelled name without issuing a deprecation warning and updating internal references and documentation accordingly. - issues/30474
- Figure Saving and Backend Errors: Using the SpanSelector widget with
useblit=True
causes an AttributeError when saving figures as SVG or PDF because the FigureCanvasSVG backend lacks thecopy_from_bbox
method. Settinguseblit=False
avoids this error, allowing figures to save correctly. - issues/30485
- Test Flakiness and File Handling: The
test_save_figure_return
test is flaky and intermittently fails on Fedora builders due to a FileNotFoundError when trying to remove a mocked file that does not exist. This causes instability in the test suite. - issues/30493
- Documentation Versioning Display: The gallery example page in the stable documentation incorrectly shows an "unstable development version" banner. This is likely caused by an outdated version switcher configuration that requires updating after a new release.
- issues/30498
- Windows Kernel Crash Due to Package Issue: Matplotlib crashes the Jupyter kernel on fresh Windows installs after package updates due to a broken
llvm-openmp
package version. Downgrading this package resolves the crash. - issues/30501
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. TST: Remove redundant font tests: This pull request aims to remove redundant font-related tests from the test suite by consolidating overlapping test coverage to prevent issues with pre-loading test images and improve test efficiency.
- URL: pull/30513
- Merged: No
2. Added conversion from datetime to float for position and width parameters in violin plots: This pull request adds functionality to convert datetime objects to float values for the position and width parameters in violin plots, enabling the use of datetimes as positions without causing type errors by internally converting datetimes using matplotlib's date2num function and time differences to days.
- URL: pull/30508
- Merged: No
3. Update Colorizer/ColorizingArtist to work with MultiNorm: This pull request updates the Colorizer and ColorizingArtist components in Matplotlib to support the MultiNorm normalization along with BivarColormap and MultivarColormap, enabling bivariate colormapping functionality as demonstrated by new testing code, while not yet extending this support to plotting functions like imshow or colorbar features.
- URL: pull/30511
- Merged: No
Other Open Pull Requests
- Dependency and environment management: Multiple pull requests focus on improving reproducibility and reliability in development and testing environments by adding fully pinned requirements files and enhancing environment setup scripts. These changes ensure consistent dependency versions and safer, cross-platform environment creation, which facilitates continuous integration workflows and backport testing.
- pull/30509, pull/30521
- PDF backend and font handling improvements: Several pull requests address font encoding and rendering in the PDF backend by simplifying character encoding for Type 3 fonts and improving text rendering to support non-English characters through font subsetting and remapping. These enhancements eliminate the need for XObjects and enable selectable, copyable text in PDFs, improving overall font support and output quality.
- pull/30520, pull/30512
- New plotting features and GUI enhancements: Pull requests introduce new plotting capabilities such as a 3D arrow plotting method in
Axes3D
and a proof-of-concept GUI-native crosshair cursor that follows the mouse in Qt backends. These additions expand Matplotlib’s visualization tools and demonstrate the feasibility of extending interactive GUI features across backends. - pull/30517, pull/30516
- Documentation and contribution process updates: One pull request reorganizes and clarifies the documentation regarding draft pull requests by moving related information to the pull request guidelines section. This improves contributor understanding and streamlines the contribution workflow.
- pull/30507
- MetaFont/PK font support preparation: A pull request prepares Matplotlib for MetaFont/PK font integration by enabling calls to
kpsewhich
to generate and locate raster font files from TeX MetaFont sources in the temporary cache at a default resolution. This is a foundational step toward full MF/PK font support in Matplotlib. - pull/30514
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: 12
Key Closed Pull Requests
1. merge up v3.10.6: This pull request merges the v3.10.6 release branch into the main line, incorporating multiple backported fixes and enhancements including documentation updates, CI improvements, bug fixes for hi-dpi support and race conditions, and release preparations for Matplotlib version 3.10.6.
- URL: pull/30491
- Merged: 2025-09-02T22:00:19Z
- Associated Commits: e4449, 33054, ca6a2, e7026, f25ce, ba268, e1e13, e3007, a55b8, 4b794, 25a97, 6b800, 53510, 81ed6, d3365, 2e047, b2358, 5cd38, 1d526, 22c64, 676f2
2. MNT/DOC: Deprecate anchor in Axes3D.set_aspect: This pull request deprecates the unused anchor
parameter in the Axes3D.set_aspect
method, removes an unnecessary super()
call to simplify the code, updates the documentation to clarify 3D-specific behavior, and adds a unit test to ensure the deprecation warning is properly raised.
- URL: pull/30408
- Merged: 2025-09-02T23:04:27Z
- Associated Commits: 8f0e5
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 im.format_cursor_data()
method with the intended data dimensionality, and its functionality is already covered by a more comprehensive existing test, test_format_cursor_data()
.
- URL: pull/30465
- Merged: 2025-09-04T14:41:13Z
- Associated Commits: 1f2ca
Other Closed Pull Requests
- Spelling correction in method name: This topic covers the correction of a long-standing spelling error in the method name
contains_branch_seperately
tocontains_branch_separately
. The pull request preserves backwards compatibility by maintaining aliases for the old spelling and updates type hints and internal references accordingly.
[pull/30475]
- SVG export crash fix: These pull requests fix a crash occurring when saving figures as SVG by modifying the
update_background
function to skip blitting during SVG export. The fix prevents the error while preserving normal interactive behavior and is backported to the v3.10.x branch.
[pull/30490, pull/30506]
- Documentation updates and backports: This group of pull requests updates documentation by correcting the pytz link to point to the PyPI source and removing an incorrect unstable banner to reflect the stable version. These changes address oversights from previous releases and are backported to the v3.10.x branch.
[pull/30495, pull/30502, pull/30518]
- Test improvements: These pull requests update the
test_save_figure_return
test to use a temporary directory, improving test reliability by avoiding manual cleanup of generated files. The change is also backported to the v3.10.x branch.
[pull/30497, pull/30518]
- Project README enhancement: This pull request adds a Linux Foundation Health Score badge to the README to signify matplotlib's onboarding to LFX Insights, the Linux Foundation's platform for monitoring critical open-source projects.
[pull/30505]
- Workflow syntax update: This pull request updates the syntax of the pull request welcome workflow to align with recent changes in the first-interaction GitHub Action, addressing warnings in the project's automated workflows.
[pull/30510]
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 |
---|---|---|---|---|
QuLogic | 18 | 4 | 1 | 43 |
timhoffm | 14 | 3 | 3 | 24 |
anntzer | 11 | 2 | 1 | 9 |
ksunden | 15 | 1 | 0 | 1 |
rcomer | 4 | 1 | 2 | 10 |
tacaswell | 6 | 0 | 0 | 9 |
trygvrad | 6 | 2 | 0 | 7 |
jklymak | 1 | 1 | 1 | 10 |
story645 | 1 | 0 | 0 | 11 |
dstansby | 6 | 1 | 2 | 1 |