Weekly Project News

Subscribe
Archives

Weekly GitHub Report for Matplotlib: July 21, 2025 - July 28, 2025 (12:03:21)

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
    • 1.2. Other Noteworthy Updates
  • II. Issues
    • 2.1. Top 5 Active Issues
    • 2.2. Top 5 Stale Issues
    • 2.3. Open Issues
    • 2.4. Closed Issues
    • 2.5. Issue Discussion Insights
  • III. Pull Requests
    • 3.1. Open Pull Requests
    • 3.2. Closed Pull Requests
    • 3.3. Pull Request Discussion Insights
  • IV. Contributors
    • 4.1. Contributors

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.

  1. [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
  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
  3. [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.

  1. [Bug]: Misalignment of Labels and Incorrect Density Values in ax.hist() for Categorical Variables: This issue addresses a bug in the ax.hist() function of Matplotlib when used with categorical variables and the density=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.
  2. [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.
  3. [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.
  4. [Bug]: ax.transData does not honor data limits: This issue reports a bug in Matplotlib where the transformation ax.transData does not automatically respect the current data limits (xlim and ylim) 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 like set_xlim or set_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 in Figure.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() with get_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
  • Associated Commits: 0c2fe, 67715, 1c62c

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 the borderpad 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
  • Associated Commits: d14fe, ba4dc, 07cfd, f7926, 179dd

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
  • Associated Commits: c4cca, df17f, 6f013, 05d6d

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
  • Associated Commits: 6da96, 534dc, a8633

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 with autolim=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

Don't miss what's next. Subscribe to Weekly Project News:
Powered by Buttondown, the easiest way to start and grow your newsletter.