Weekly GitHub Report for Matplotlib: July 21, 2025 - July 28, 2025 (12:02:59)
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.
-
[Bug]: violinplot with nan values fails silently: This issue reports that creating a violin plot with data containing NaN values results in the plot failing silently, showing no violin for the NaN-containing dataset and only producing a runtime warning from numpy. The user expects either a clear error or warning indicating the presence of NaNs or automatic filtering of NaN values so that the plot can still be displayed without silent failure.
- The comments confirm that violin plots currently do not display violins for datasets with NaN values and suggest that silently discarding invalid data is not ideal. It is proposed to improve the behavior by either issuing a clear warning or filtering out NaNs before plotting, with some noting that violin plots should behave similarly to histograms by warning and discarding NaNs rather than failing silently.
- Number of comments this week: 2
-
[ENH]: Add ax.violinboxplot() for combined statistical visualization: This issue proposes adding a new helper function, ax.violinboxplot(), to matplotlib that combines a violin plot and a box plot into a single, easy-to-use visualization. The goal is to simplify the current manual process of overlaying these plots, improving alignment and styling automatically to enhance statistical data visualization capabilities.
- The comments suggest that the existing violin plot function already supports displaying key statistics, questioning whether improved documentation might suffice. Additionally, concerns were raised about the suitability of adding this as a built-in function due to limited evidence of its popularity, potential redundancy, and the complexity of accommodating numerous customizable parameters, with a recommendation to instead provide this visualization as an example rather than a core feature.
- Number of comments this week: 1
-
[Bug]: Recent test_determinism_check flakiness: This issue reports flakiness in the recent test_determinism_check for Matplotlib, where the visual output differs between test runs, as demonstrated by simplified diffs of EPS files and accompanying images showing discrepancies. The user highlights that the test produces inconsistent graphical results, such as missing elements and renumbered paths, which complicates verifying deterministic behavior in the rendering.
- The comment notes that in a subsequent test run, the diff changed, with the star in the bottom left Axes missing and some path names renumbered, indicating ongoing variability in the test output and confirming the flakiness described.
- 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 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 expects the "\limits" command to properly format the integral limits as in standard LaTeX, but instead encounters a ValueError indicating an unknown symbol, highlighting a need for enhanced parsing support for this command.
- [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.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
) of the axes, causing it to use outdated limits when transforming data coordinates. The user highlights that although the documentation implies data limits update automatically when new data is added, 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: 3
Summarized Issues:
- Data Limits Handling in Axes: This topic covers the refactoring of data limit operations in Matplotlib's Axes by introducing a new
_DataLimits
class to solve issues like manual updates and synchronization problems with shared axes. It also addresses the challenge that data limits are currently an individual property of each Axes, complicating clearing and sharing behavior. - issues/30342
- Plotting with NaN Values: This topic discusses the problem where violin plots fail silently when data contains NaN values, resulting in missing violins and only a runtime warning from NumPy without explicit user notification. This silent failure can mislead users about the completeness of their plots.
- issues/30355
- Test Flakiness in Determinism Check: This topic highlights the flakiness in the
test_determinism_check
for Matplotlib, where output diffs vary between test runs, causing inconsistent and unstable test results. Such instability undermines confidence in test reliability. - issues/30360
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: 3
Summarized Issues:
- Type Annotation Bugs: This topic covers issues related to incorrect or misleading type annotations in Matplotlib's API, which cause confusion or errors when using type checkers like mypy. Specifically, the default value for the
squeeze
parameter inFigure.subfigures
is documented incorrectly, leading to inaccurate revealed types. - issues/30313
- Plot Behavior Regression: This topic involves regressions in plot rendering behavior across Matplotlib versions, where repeated use of certain functions causes unintended changes in axis limits. For example, using
fill_between()
withget_xaxis_transform()
repeatedly in version 3.10.0 causes the y-axis limits to increase incrementally, squeezing the original plot, a problem not present in version 3.8.0. - issues/30320
- Feature Proposals and Rejections: This topic includes proposed new features aimed at improving plotting convenience, such as adding a 'last' keyword for color reuse in plotting functions, which was intended to simplify styling multiple lines. However, concerns about ambiguity, consistency, and implementation complexity led to the proposal being closed without adoption.
- issues/30338
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: 5
Key Open Pull Requests
1. PR commit Issue 30159 for fixing Axes.clear(): This pull request provides a targeted fix for issue #30159 by modifying the Axes.clear() method to prevent resetting axis limits and scales on shared axes—especially with log scales—thereby avoiding invalid limit resets and warnings, while ensuring that .clear() only removes data-like elements without affecting layout or shared state.
- URL: pull/30354
- Merged: No
2. Correct typo of "buttons" to "button" in webagg backend: This pull request corrects a typo by changing "buttons" to "button" in the webagg backend of Matplotlib, fixing a visualization break in interactive plots caused by a previous commit and addressing issues reported in related GitHub discussions.
- URL: pull/30337
- Merged: No
- Associated Commits: aa794
3. Keep default minor log ticks if there's 1 major & 1 minor tick.: This pull request updates the logic for minor log ticks in Matplotlib to retain the default minor ticks when there is one major and one minor tick present, instead of switching to AutoLocator, correcting the previous behavior that only accounted for cases with two minor ticks.
- URL: pull/30348
- Merged: No
- Associated Commits: 315c4
Other Open Pull Requests
- Code of Conduct update: This pull request changes the Code of Conduct from the Contributor Covenant to the NumFOCUS Code of Conduct and updates the reporting structure from the Matplotlib-specific CoC committee to the NumFOCUS Code of Conduct Working Group. This ensures alignment with NumFOCUS policies and centralizes the reporting process.
- pull/30358
- AnchoredOffsetbox borderpad enhancement: This pull request enhances the
AnchoredOffsetbox
to allow theborderpad
parameter to accept a tuple for separate horizontal and vertical padding values. It provides finer control over positioning while maintaining backward compatibility and includes updated tests and documentation. - pull/30359
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: 22
Key Closed Pull Requests
1. [fix] Spine.set_bounds() does not take parameter None as expected: This pull request fixes the behavior of the Spine.set_bounds()
method in Matplotlib to correctly handle None
parameters by modifying the get_bounds()
function so that when self._bounds
is None
, it returns the original axis view limits instead of None
, preventing spines from disappearing unexpectedly.
- URL: pull/30330
- Merged: 2025-07-22T11:52:26Z
2. Fix broken/deprecated documentation links in MEPs and testing guides: This pull request fixes broken and deprecated external links in the Matplotlib developer documentation, specifically updating references in MEP10.rst, MEP11.rst, and testing.rst to ensure accuracy and accessibility by replacing outdated URLs with current and reliable sources.
- URL: pull/30343
- Merged: 2025-07-23T19:38:51Z
3. Backport PR #30237: Add explicit **options: Any
for add_subplot
m…: This pull request backports the addition of an explicit **options: Any
parameter to the add_subplot
method in Matplotlib, improving type clarity and compatibility.
- URL: pull/30292
- Merged: 2025-07-24T18:29:56Z
Other Closed Pull Requests
- Logging level capitalization and typing improvements: These pull requests update the preferred logging level literals to be capitalized in line with Python's logging standard and introduce stricter typing for the
set_loglevel
function using a Literal-based LogLevel type alias. This enhances both API consistency and static type checking for valid logging levels.
pull/30339, pull/30302
- Fractional HiDPI scaling support in GTK4 backend: These pull requests add and backport support for fractional HiDPI scaling in the GTK4 backend by handling a new property on the backing surface introduced since GTK 4.12. This improves display scaling accuracy on supported platforms.
pull/30344, pull/30350
- Backporting wheel build and CI improvements for Windows-on-ARM and Python 3.14: These pull requests backport changes enabling wheel builds for Windows-on-ARM platforms and Python 3.14 to the v3.10.x branch, ensuring compatibility and continuous integration support for these environments.
pull/30352, pull/30356
- PyPy build fixes and cibuildwheel update: This pull request fixes PyPy build sections by adding support for Python 3.10 and 3.11, correcting an incorrect label that caused PyPy builds to mistakenly build CPython 3.10, and updates the cibuildwheel version to 3.0.1 on the 3.10.x release branch to resolve merge conflicts.
pull/30357
- Test efficiency improvement by reducing pause time: This pull request backports a change to reduce the pause time in the interactive timer test on the v3.10.x branch, improving test efficiency.
pull/30277
- Typing corrections for Figure.subfigures: This pull request corrects the typing overloads for the
Figure.subfigures
attribute to improve type accuracy and consistency within the Matplotlib project.
pull/30314
- Deprecation of text kerning factor setting: This pull request deprecates the ability to set the text kerning factor to any non-None value, fixing it at 0 to preserve test images and preparing for future libraqm adoption, with warnings moved to the
FT2Font
constructor.
pull/30322
- Fix for Axes limits update with add_collection and autolim: These pull requests fix and backport the update of Axes limits when using
Axes.add_collection
withautolim=True
by recalculating limits separately for each direction only if that direction uses data coordinates.
pull/30327, pull/30351
- GitHub Actions CI security hardening and Dependabot configuration: This pull request improves the GitHub Actions continuous integration setup by pinning actions to specific SHAs, restricting token permissions, setting default permissions, and adding a Dependabot configuration file for GitHub Actions.
pull/30332
- AppVeyor build fix by pinning vs2022 package version: This pull request attempts to resolve AppVeyor build issues by pinning an older version of the vs2022 conda-forge package due to missing MSVC and fallback to a broken clang compiler.
pull/30341
- Qt backend improvement for devicePixelRatio detection: These pull requests improve the Qt backend by using a new window event introduced in Qt 6.6 to detect changes in
devicePixelRatio
more accurately, replacing the previous QScreen-based method and backporting this change to the v3.10.x branch.
pull/30345, pull/30353
- Code style and terminology cleanups: This pull request implements small code cleanups including correcting terminology from "back end" to "backend," removing unnecessary fallback checks, eliminating redundant operations, and improving mathtext code style for clarity and PEP8 compliance.
pull/30346
- Clarification on Axes.set_navigate_mode method: This pull request clarifies that
Axes.set_navigate_mode
is a private method that is ineffective on its own and recommends using the associated toolbar to handle navigation mode changes.
pull/30349
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 | 28 | 11 | 2 | 17 |
timhoffm | 5 | 2 | 2 | 44 |
nrnavaneet | 17 | 5 | 0 | 21 |
rcomer | 2 | 1 | 0 | 26 |
dstansby | 9 | 1 | 1 | 6 |
story645 | 2 | 0 | 1 | 12 |
tacaswell | 5 | 2 | 0 | 8 |
livlutz | 13 | 0 | 0 | 1 |
lukashergt | 6 | 1 | 1 | 5 |
anntzer | 3 | 3 | 0 | 6 |