Weekly GitHub Report for Matplotlib: July 07, 2025 - July 14, 2025 (12:03:55)
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 for the 3.10.x series addresses several issues, including respecting array alpha in image interpolation, removing md5 usage for FIPS compliance, and fixing various plotting and figure handling bugs. It also introduces a version gate for GTK4 calls and enhances documentation.
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]: Annotation clipping to rect works, but not when setting xlim: This issue describes a bug in Matplotlib where a text annotation clipped to a rectangular patch (axvspan) does not remain clipped when the x-axis limits are set, causing the text to appear outside the intended clipping area. The problem arises when the xlim is adjusted, which should ideally maintain the clipping effect of the annotation within the specified rectangular patch, but instead, the text becomes visible beyond the new axis limits.
- The comments discuss different behaviors observed by users with similar setups, questioning whether the rectangle or text should be clipped by the axes. Suggestions include disabling clipping on the rectangle, which affects the visibility of the text. There is a consensus that annotations are not clipped by the axes by default, and there is an expectation that if one element is clipped by another, it should also be clipped by any additional clipping applied to the second element.
- Number of comments this week: 6
-
[Bug]: Legend kwarg
labelcolor='linecolor'
not working properly whenfacecolor
is'None'
: This issue addresses a bug in the Matplotlib library where thelabelcolor='linecolor'
keyword argument does not function correctly withhisttype='step'
histograms and scatter plots withfacecolor='None'
, leading to an invisible legend label for the histogram and an IndexError for the scatter plot. The expected behavior is for the legend labels to be visible and correctly colored, without any errors, by intelligently determining the appropriate color attributes to use.- The comments discuss potential solutions and improvements, such as using
labelcolor='markeredgecolor'
for better compatibility, and suggest modifying the code to check bothget_facecolor
andget_edgecolor
methods to avoid errors. There is also a discussion about the handling of facecolor with alpha values and the design choices in Matplotlib regarding histogram types. - Number of comments this week: 2
- The comments discuss potential solutions and improvements, such as using
-
[Bug]: _constrained_layout takes several iterations to converge to expected result: This issue describes a bug in the Matplotlib library where the
_constrained_layout
function requires multiple iterations to properly scale the axes and include the legend within the figure when the legend is placed outside the axes bounds usingbbox_to_anchor
. The problem is illustrated with images showing the initial incorrect layout and the expected outcome after several iterations, highlighting the need for a more efficient solution to achieve the desired layout without excessive iterations.- A commenter pings a developer for input, expressing concern about the inefficiency of the current solution and suggesting that increasing the default number of iterations is not a viable fix, while noting the lengthy convergence time for this specific case.
- Number of comments this week: 1
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 highlights 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, leading to miscalculated densities as the bin width isn't necessarily 1. Additionally, the issue points out the misalignment of labels, as the function does not position them precisely at the center of the bars, and suggests improvements such as reconsidering density calculations for categorical data and providing clear documentation on the category-to-integer conversion process. - [MNT]: Ease building just one Sphinx Gallery example file: This issue addresses the challenge of efficiently building a single Sphinx Gallery example file, which currently requires a lengthy process through
make html
ormake html-skip-subdirs
, often resulting in numerous unhelpful warnings. The proposed solution involves updating the documentation to provide clearer guidance on building individual files and potentially adding a new build target in the Makefile to streamline the process, thereby making it more accessible for developers, especially beginners, who need to frequently preview their work. - [ENH]: Parse "\limits" in mathtext: This issue pertains to a problem encountered in the matplotlib library's mathtext module, where the parsing of LaTeX expressions containing the "\limits" command fails, resulting in a ValueError. The "\limits" command is intended to adjust the positioning of subscripts and superscripts for certain mathematical operators, such as integrals, but currently leads to a parsing error when used, as demonstrated in the provided code example.
- [ENH]: Fix precision displayed by LogFormatter.format_data_short: This issue addresses the need to enhance the LogFormatter in a project by ensuring that it displays mouse cursor values with a precision that matches the cursor pointing accuracy, similar to what has been implemented for linear formatters. The problem has been open for a significant amount of time, indicating a need for a solution to align the precision of log formatters with that of linear formatters, although no specific solution has been proposed yet.
- [Bug]:
ax.transData
does not honor data limits: This issue highlights a bug in Matplotlib where theax.transData
transformation does not automatically update to reflect changes in data limits (xlim
andylim
) when new data is added to the axes, contrary to what the documentation suggests. The user reports that this discrepancy requires a manual update of data limits using methods likeset_xlim
orset_ylim
to ensureax.transData
uses the latest data limits, which is both confusing and counterintuitive.
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:
- Text Annotation Clipping in Matplotlib: A bug in Matplotlib causes text annotations clipped to a rectangular patch to remain visible beyond the new axis limits when the x-axis limits are set. This behavior is contrary to expectations, as the text should remain clipped by the rectangle even when it falls out of view.
- Text Rendering Discrepancies in Matplotlib: The Matplotlib library faces issues with text rendering, particularly with the PGF backend, due to inconsistencies in passing the
Text
object to theRenderer.draw_text
method. This results in misaligned text, especially for multiline strings, due to differences in handling the original position and alignment versus thex
/y
coordinates provided.
- Color Distortion in Matplotlib's
plot_surface
: Usingplot_surface
with manually specifiedfacecolors
in Matplotlib leads to color distortion because of the defaultshading=True
setting. It is suggested that the default should be changed toshade=False
whenfacecolors
are provided, or this behavior should be clearly documented to prevent user confusion.
- Deprecation Proposal for RadialLocator in Matplotlib: A proposal in the Matplotlib library suggests deprecating the 'axes' parameter in the RadialLocator constructor. Instead, it is recommended to access
self.axis.axes
directly to streamline the code.
- Legend Label and IndexError Bugs in Matplotlib: Matplotlib has a bug where the
labelcolor='linecolor'
keyword argument does not work correctly withhisttype='step'
histograms and scatter plots withfacecolor='None'
. This results in an invisible legend label for the histogram and an IndexError for the scatter plot, suggesting a need to checkget_edgecolor
in addition toget_facecolor
.
- Constrained Layout Iteration Bug in Matplotlib: The
_constrained_layout
function in Matplotlib requires multiple iterations to properly scale the axes and include the legend within the figure when the legend is placed outside the axes bounds usingbbox_to_anchor
. This results in an initially incorrect plot that only converges to the expected layout after repeated iterations.
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:
- Deprecation Warning in Matplotlib with Pillow 11.3: A deprecation warning is raised by Pillow 11.3 when using the TkAgg backend in Matplotlib due to the deprecated 'mode' parameter in the
Image.fromarray
function. This parameter is expected to be removed in Pillow 13, and the issue has been addressed in a subsequent pull request.
- Typo in Matplotlib's _axes.py File: A bug in the Matplotlib library's
_axes.py
file results in an error message lacking a necessary whitespace, causing a typo that reads "orsequence" instead of "or sequence." The reporter has offered to fix this typo as their first contribution to the project.
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. [ENH] Add data parameter in Axes3D.plot: This pull request enhances the Axes3D.plot
API in the Matplotlib library by introducing a data
parameter and requiring an explicit zs
argument, while also replacing positional argument parsing with a new fmt
keyword parameter to improve clarity, error handling, and compatibility with 2D-like plots, addressing issue #30238.
- URL: pull/30270
- Merged: No
- Associated Commits: b4686, 58a7d, b2f97, ca062, ef421, ece6b, 809e8, c451c, edb05, 93469, e75e1, 1d8d6, c0b2b, 688e1, 34cd2, 05981, 83157, 98b9c, 0c04c
2. Run subprocess-starting tests on separate runners: This pull request addresses issues with test timeouts in the Matplotlib project by running subprocess-starting tests on separate runners without pytest-xdist parallelization, due to suspected process ID exhaustion or scheduler limitations, particularly affecting Python 3.14 tests, and includes changes such as adding a new pytest marker, setting environment variables to handle buffering issues, and adjusting test configurations for improved performance and output visibility.
- URL: pull/30278
- Merged: No
3. Migrate to Pybind11 v3: This pull request aims to migrate the Matplotlib project to Pybind11 version 3 by testing new options without maintaining backward compatibility, including updates such as fixing build issues with the new Pybind11 version, bumping the minimum required version to 3.0.0, removing outdated workarounds, converting to py::native_enum
, and switching to smart holders for C++ classes.
- URL: pull/30291
- Merged: No
Other Open Pull Requests
- Type Hinting Enhancements in Matplotlib: This topic involves improving type hinting and IDE support by introducing Literal and TypeAlias for configuration-related functions and parameters. The pull requests update type hints for specific functions and add new TypeAlias entries, ensuring backward compatibility.
- Backporting Changes for Matplotlib Methods: These pull requests focus on backporting changes to the Matplotlib library, including adding explicit parameters to methods and reducing pause time in tests. The changes ensure consistency and improved functionality across different versions.
- Logging and Warning Improvements: This pull request addresses the issue of logging a warning when the selected font weight differs from the requested one. It incorporates feedback from a previous pull request and ensures compliance with documentation and testing standards.
- Code and Functionality Corrections: This pull request corrects a typo affecting the
mlab
fallback functionality for 32-bit systems. It ensures compatibility across systems by adding a test for thecsd
function and verifying on WASM.
- Shell Script and Artifact Management: This pull request resolves the issue of overdeletion of source images for failing tests by rewriting a shell script. It ensures that expected and actual PDF files are retained and uploaded as artifacts, fixing previous implementation flaws.
- Documentation Updates for Annotation Method: This pull request updates the documentation for the
Annotation.__init__()
method to clarify potential misalignment issues when using.set_clip_path()
. It advises users on setting axis limits before applying the clip path to maintain correct visual behavior.
- Legend Label Color Correction: This pull request addresses an issue where the legend label color was incorrectly displayed for plots with transparent face colors. It implements checks to skip transparent colors and ensures the legend text uses the edge or line color, adding a visual test for verification.
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: 15
Key Closed Pull Requests
1. Create events type and update plt.connect and mpl_connect: This pull request introduces new literal types for various event categories such as MouseEventType
, KeyEventType
, DrawEventType
, PickEventType
, ResizeEventType
, and CloseEventType
, updates the mpl_connect
function and its pyplot
wrapper plt.connect
to incorporate these types, and adds an overload for DrawEvent
, thereby enhancing the event handling capabilities in the Matplotlib library.
- URL: pull/30275
- Merged: Yes
2. changed the FAQ link to point to the correct path: This pull request updates the FAQ link in the Matplotlib project to direct users to the correct page, addressing an issue where the link was previously incorrect, and includes two commits that fix both instances of the wrong link, ultimately closing issue #30169.
- URL: pull/30283
- Merged: Yes
3. Backport PR #30233 on branch v3.10.x (Check that stem input is 1D): This pull request involves backporting changes from PR #30233 to the v3.10.x branch of the Matplotlib project, ensuring that the stem input is verified to be one-dimensional.
- URL: pull/30268
- Merged: Yes
- Associated Commits: dd24d
Other Closed Pull Requests
- Backporting Changes: This topic involves backporting various changes to different branches of the Matplotlib project. The changes include fixing a figure legend issue in stackplots, updating FAQ links, and ensuring documentation compatibility with pybind11 version 3. These backports ensure that the v3.10.x and v3.10.3-doc branches remain up-to-date with important fixes and updates.
- Documentation Updates: Several pull requests focus on updating documentation to reflect recent changes and ensure compatibility. These updates include addressing pybind11 modifications, correcting typographical errors, and updating docstrings to provide better guidance on using certain features. These changes help maintain the accuracy and usability of the Matplotlib documentation.
- Configuration and Error Message Fixes: This topic covers pull requests that address configuration issues and error message formatting. Fixes include replacing invalid configuration values and ensuring error messages are correctly formatted with appropriate whitespace. These changes prevent errors and improve the clarity of error messages for users.
- CI and Testing Improvements: Pull requests under this topic aim to improve the CI process and testing efficiency. Changes include reducing pause times in tests to prevent timeouts and fixing variable quoting errors during image preloading. These improvements help streamline the testing process and ensure reliable CI performance.
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 | 16 | 9 | 1 | 14 |
jkseppan | 27 | 6 | 0 | 1 |
timhoffm | 4 | 1 | 1 | 20 |
CorenthinZ | 25 | 0 | 0 | 0 |
ayshih | 10 | 3 | 0 | 4 |
anntzer | 2 | 0 | 0 | 12 |
jklymak | 5 | 0 | 0 | 9 |
livlutz | 13 | 0 | 0 | 1 |
rcomer | 1 | 1 | 0 | 8 |
No author found | 9 | 0 | 0 | 0 |