Weekly Project News

Subscribe
Archives

Weekly GitHub Report for Matplotlib: September 08, 2025 - September 15, 2025 (12:05:39)

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 positioning, adjustments to polar plot titles, and added version gating for GTK4 calls, alongside documentation enhancements. Notably, it also introduces a warning when both color parameters are used in scatter plots, reflecting a focus on stability and user guidance.

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. [ENH]: Zooming single axis: This issue discusses enhancing the zoom functionality in a plotting library to support zooming along a single axis using keyboard modifiers combined with the mouse wheel. It explores different approaches, including using modifier keys like Ctrl, Shift, Alt, or x/y keys to control zoom behavior on specific axes, and considers the usability and consistency of these options with existing interaction patterns.

    • The comments debate the best modifier key combinations for single-axis zooming, weighing pros and cons of Ctrl, Shift, Alt, and x/y keys, with concerns about conflicts and user expectations. Participants emphasize maintaining internal consistency with existing pan/zoom controls, the importance of explicit user intent for interactions, and the practicality of one-key modifiers, while also discussing potential visual cues and edge cases for axis detection.
    • Number of comments this week: 13
  2. [MNT]: Replace TextPath by Text().to_path(): This issue discusses replacing the TextPath class, which is a subclass of Path with a unique constructor and mutable size, by using a method like Text().to_path() to generate a Path object instead. The motivation includes simplifying the API, avoiding subclassing complications related to deep-copying, and encouraging users to regenerate paths when text size changes rather than mutating an existing path, which aligns better with optical sizing principles.

    • The comments clarify that the deepcopy problem with TextPath has been addressed and is not a major issue, but the discussion focuses on whether subclassing Path is necessary. Participants consider naming conventions, API consistency, and user impact, generally favoring adding a Text.get_path() method over maintaining TextPath, while acknowledging that users would need to regenerate paths for size changes, and debating the best approach to deprecate or replace the existing functionality.
    • Number of comments this week: 7
  3. JupyterLab kernel dies when plotting: This issue describes a problem where the JupyterLab kernel crashes or dies when running a plotting function that processes and visualizes images using a custom image preprocessor module along with Matplotlib and OpenCV. The user reports that the kernel dies mostly when running all cells at once, despite attempts to isolate the cause, and suspects a possible conflict or bug involving OpenCV or the plotting pipeline, but has not yet provided a minimal reproducible example.

    • The comments focus on troubleshooting steps, with suggestions to create a minimal, self-contained example to isolate the issue and reduce dependencies. The user clarifies that the image preprocessor is a custom module, not a third-party library, and mentions attempts to downgrade dependencies and check memory usage, but no definitive cause or solution has been identified yet.
    • Number of comments this week: 7
  4. [Bug]:: This issue reports a problem with rendering Arabic text correctly in a 3D matplotlib plot, specifically in the plot title that includes Arabic script. The user provides a detailed code example showing the 3D building model with Arabic labels, but the displayed text does not appear as expected, likely due to current limitations in matplotlib’s text rendering for complex scripts.

    • The comments clarify that the issue is related to text rendering rather than the 3D plotting code itself, with maintainers requesting a clearer description of the actual versus expected outcomes. They confirm the problem is known and tied to ongoing improvements in matplotlib’s text handling, particularly the upcoming text-overhaul branch expected in version 3.11, which should fix Arabic and other complex script rendering issues.
    • Number of comments this week: 6
  5. [Bug]: Mypy stubtest failure on disjoint_base: This issue reports a bug where the MyPy stubtest fails due to newly introduced support for PEP 800, which requires marking disjoint base classes with the @disjoint_base decorator in type stubs. The failure occurs because certain classes in the matplotlib project, such as Text and Container, are disjoint bases at runtime but are not marked accordingly in their stub files, causing errors in continuous integration checks.

    • The comments provide a link to a specific commit demonstrating the error and suggest a temporary workaround by passing the --ignore-disjoint-bases flag to MyPy to bypass the stubtest failures until the stubs are updated.
    • Number of comments this week: 2

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 internal conversion of categories to integers and improper consideration of bin widths. Additionally, the issue highlights a misalignment of x-axis labels because the function does not clearly document or handle the mapping from categories to integer bins, making it difficult to position labels accurately at the center of the histogram bars.
  2. [MNT]: Ease building just one Sphinx Gallery example file: This issue addresses the difficulty and inefficiency of building a single Sphinx Gallery example file during documentation development, 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—such as modifying include_patterns, suppress_warnings, and gallery_dirs in conf.py—to streamline the process, and suggests adding a dedicated build target in the Makefile to facilitate easier single-file builds.
  3. [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 involving integrals. The user reports that while "\limits" is intended to control the placement of subscripts and superscripts on operators like "\int," the current parser raises a ValueError and fails to render the expression correctly, highlighting a need for enhanced support for this command.
  4. [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.
  5. [Bug]: ax.transData does not honor data limits: This issue reports a bug in Matplotlib where the transformation ax.transData does not respect the current data limits set by xlim and ylim, 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 ensure transData always uses 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: 12

Summarized Issues:

  • Bivariate and Multivariate Colormaps Enhancements: Multiple issues focus on extending Matplotlib's plotting capabilities by introducing new classes and normalization methods to support bivariate and multivariate colormaps. These enhancements include updating top-level plotting functions, creating colorbar equivalents, expanding the variety of colormaps, and providing comprehensive examples to demonstrate the new functionality.
  • issues/30526, issues/30527, issues/30528, issues/30529
  • GTK Warning Fix: There is a need for a permanent fix to a warning caused by upstream changes to gtk in GioUnix imports, which currently breaks tests and was only temporarily mitigated by a stop-gap solution. This issue highlights the importance of a targeted resolution to maintain test stability.
  • issues/30537
  • Zoom Functionality Improvement: An enhancement is proposed to allow zooming along a single axis using modifier keys combined with the mouse wheel, aiming to improve user control and interaction consistency in Matplotlib's zoom feature. Discussions include possible key bindings and interaction designs.
  • issues/30541
  • Arabic Text Rendering Bug: A bug is reported where Arabic text in 3D plot titles is rendered incorrectly or not as expected, despite the code correctly setting the title with Arabic characters. This issue points to a problem in text rendering for non-Latin scripts in 3D plots.
  • issues/30544
  • TextPath API Replacement: There is a proposal to replace the existing TextPath class with a simpler and more consistent API using a method like Text.get_path() that generates a path from text without allowing size mutation. This change aims to reduce complexity, improve documentation, and align with other artist-to-path conversion patterns in Matplotlib.
  • issues/30546
  • draw_path_collection() API Revamp: The current draw_path_collection() API is proposed to be revamped by replacing its signature with a vectorized graphics context dataclass. This aims to simplify adding new vectorized attributes while maintaining compatibility with third-party backends.
  • issues/30547
  • PolyCollection Line Anti-Aliasing Bug: A bug in PolyCollection causes inconsistent line anti-aliasing depending on the order of points in polygons with fewer than four points, resulting in visually different images and unreliable image-based tests. This issue affects rendering consistency.
  • issues/30549
  • JupyterLab Kernel Crash: Running a plotting function within JupyterLab intermittently causes the kernel to die, especially when executing all cells at once. The issue may be related to interactions between Matplotlib, OpenCV, and custom image preprocessing code, despite attempts to isolate the problem across environments and library versions.
  • issues/30550
  • MyPy Stubtest Failures: The MyPy stubtest fails in continuous integration due to certain runtime disjoint base classes in Matplotlib not being marked with the @disjoint_base decorator in their type stubs. This causes type checking errors following the recent MyPy 18.1 update supporting PEP 800.
  • issues/30551

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:

  • 3D Bar Chart Rendering Bug: This issue describes a problem with Matplotlib's 3D bar chart rendering when using the axlim_clip parameter together with set_zlim. The clipping of data to the axes view limits does not work as intended, resulting in incorrect visualization of bars outside the specified z-axis limits.
  • issues/30524
  • GioUnix Import Warning in Pipelines and Tests: Multiple issues report warnings caused by importing GioUnix without specifying its version first, which leads to failures in Azure Pipelines and pytest runs on Python 3.11 and 3.12. This problem is related to changes in GLib 2.86.0 and requires explicitly calling gi.require_version('GioUnix', '2.0') before import to prevent these failures.
  • issues/30525, issues/30534
  • Segmentation Fault in FT2Font on Windows with Python 3.13: A segmentation fault occurs in the FT2Font.set_text(...) method when using Matplotlib 3.10.6 with Python 3.13 on Windows. This crash is triggered by calling fm.get_font(...) on a specific font file and is likely caused by issues in the conda-forge packaging or environment.
  • issues/30538
  • Readme Preview Image Resolution Enhancement: There is a request to improve the resolution of the readme_preview image in the repository, debating whether to update the image to showcase new features or simply enhance its quality. The discussion also considers the image's historical significance and its role in both GitHub and PyPI contexts.
  • issues/30552

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: 8

Key Open Pull Requests

1. Implement full 3D box clipping: This pull request implements a full 3D box clipping algorithm by extending the existing 2D clipping approach to work independently along each axis, applying it to Poly3DCollection and Patch3D in Matplotlib, while addressing related issues such as masking, handling empty polygons for depth shading, and integrating the feature under a feature flag.

  • URL: pull/30553
  • Merged: No
  • Associated Commits: 2bdc7, 6d5dd, 5ba39, 3f920, b64f3, a55ad, 34180, 2fda0

2. MNT: Pending-deprecate setting colormap extremes in-place: This pull request proposes the pending deprecation of in-place modifications to colormap extremes in Matplotlib, aligning with a long-term plan to make colormaps immutable by gradually removing this functionality over multiple minor releases to allow users ample time to migrate.

  • URL: pull/30531
  • Merged: No
  • Associated Commits: e2090, 4c334, bf856

3. gtk: Add more explicit version requirements: This pull request adds explicit version requirements for all Gdk, GdkPixbuf, Gio, GLib, and GObject components before their usage, similar to the existing requirements for Gtk, to ensure compatibility and address issue #30525.

  • URL: pull/30533
  • Merged: No
  • Associated Commits: f9ac5, f2b87, 93a5b

Other Open Pull Requests

  • Zoom functionality enhancements: These pull requests improve zooming capabilities in Matplotlib by allowing zoom along individual axes using keyboard modifiers and mouse wheel, as well as enabling zooming by dragging the zoom rectangle in a single direction. These changes enhance interactive plot navigation and provide more precise control over zooming behavior.
  • pull/30543, pull/30554
  • PowerNorm scaling parameter: This pull request adds a scale parameter to the PowerNorm class, which automatically pre-scales input data before applying power normalization. The normalization and inverse methods are updated to maintain backward compatibility and improve user convenience.
  • pull/30542
  • Violinplot error message improvement: This pull request enhances the error message in the violinplot function to clearly instruct users to pass widths as datetime.timedelta or numpy.timedelta64 when using datetime or date values as positions. It addresses a type mismatch issue without converting the position and width values.
  • pull/30545
  • Colormap by_index parameter addition: This pull request introduces a new by_index parameter to the cmap function, allowing users to specify whether inputs are treated as normalized values or as indices into the colormap. This change resolves surprising behavior caused by the previous type-dependent default and prepares for a future deprecation of the current by_index='auto' setting.
  • pull/30548

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: 5

Key Closed Pull Requests

1. MNT: Change default name of ListedColormaps: This pull request changes the default name of ListedColormaps from "from_list" to "unnamed" to improve logical clarity, acknowledging it as a technically breaking change but one unlikely to affect users, and is part of issue #29141.

  • URL: pull/30532
  • Merged: Yes
  • Associated Commits: 2dd81, c6210

2. Fix: pytest warning - GioUnix was imported without specifying version: This pull request fixes a pytest warning by ensuring that GioUnix is imported with a specified version, addressing issue #30525.

  • URL: pull/30535
  • Merged: Yes
  • Associated Commits: 918f7, 2bef9

3. DOC: Cleanup/restructure PR guidelines: This pull request reorganizes the pull request guidelines by moving the "Approval" section into a new "Merging" section, relocating the "Number of commits and squashing" content into a new "Review" section, and updating the summary for pull request reviewers to prepare for reviving and codifying the discussion on squashing.

  • URL: pull/30536
  • Merged: Yes
  • Associated Commits: 3b29f

Other Closed Pull Requests

  • Quiver plot documentation typo fix: These pull requests address a typo in the quiver plot documentation by correcting the parameter name from "scale_unit" to "scale_units." The first pull request fixes the typo in the main branch, while the second backports this fix to the v3.10.x branch of the Matplotlib project.
  • pull/30539, pull/30540

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 5 1 38
timhoffm 16 7 6 35
LangQi99 7 3 3 13
tacaswell 6 0 1 15
trygvrad 6 1 4 9
jklymak 1 1 1 15
anntzer 8 2 2 5
ksunden 14 0 0 0
rcomer 4 0 2 5
story645 1 0 0 8

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