Weekly GitHub Report for Matplotlib: September 15, 2025 - September 22, 2025 (12:07:40)
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 compliance, fixes for pyplot.matshow and Axes positioning, adjustments to polar plot titles, GTK4 version gating, and warnings for scatter plot color conflicts, alongside various documentation enhancements.
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]: Backend versioning: This issue addresses the challenge of evolving the backend API in a way that avoids breaking third-party backends by introducing explicit backend versioning. The proposed solution involves defining backend versions that clearly specify the expected interface functionality, allowing multiple versions to be supported simultaneously and enabling smoother transitions when API changes occur.
- The comments discuss the complexity of changes affecting third-party backends beyond direct backend API modifications, debating the merits and drawbacks of recommending version pinning for backends. They also emphasize the importance of raising awareness among core developers about potential breakages, propose creating a centralized list or tracking issue for known backends to improve communication, and suggest using GitHub issues as a practical way to notify backend developers about breaking changes.
- Number of comments this week: 5
-
[Bug]: 3D text does not respect rotation to make it parallel with a given zdir axis: This issue reports a bug where 3D text in Matplotlib does not correctly respect the specified rotation to align parallel with a given z-direction axis, resulting in an incorrect default rotation of about 60 degrees regardless of the
rotation
argument. The user provides a minimal reproducible example demonstrating that therotation
parameter is ignored when setting text orientation along axes likezdir="x"
, and expects the text to align properly at 0 or 90 degrees as specified.- The comments clarify that the
rotation
androtation_mode
parameters are currently unsupported for 3D text in Matplotlib and only rotate text about the screen axis, not in true 3D space. It is suggested that this limitation should be documented and warnings added when these parameters are used. Implementing proper 3D rotation would require significant changes, possibly including new parameters like a rotation axis and leveraging AGG’s perspective transformations. Attempts to add warnings for unsupported parameters were made but caused excessive warning messages, and it was advised to place such warnings in theText3D
class initializer instead. - Number of comments this week: 5
- The comments clarify that the
-
[MNT]: Deferred colormap creation: This issue addresses the inefficiency in the current design where all colormaps are created at import-time, despite typical use cases requiring only a few. The proposed solution is to modify the
ColormapRegistry
to create and cache colormaps on demand, simplifying theColormap
class by removing deferred initialization.- The commenters discussed previous experiments with deferred colormap creation and shared a related pull request that implements lazy initialization but does not fully remove the deferred internal initialization. The main motivation remains simplifying the colormap initialization process, with no urgency to resolve the issue immediately.
- Number of comments this week: 3
-
[MNT]: Drop support for type3 embedding in pdf?: This issue discusses the possibility of dropping support for type 3 font embedding in PDF outputs within Matplotlib, as type 3 fonts are limited and lack features like kerning, which complicates font conversion and are sometimes rejected by publishers. The proposal suggests either deprecating type 3 font embedding entirely or at least changing the default font embedding format to type 42, which has more complete support and subsetting capabilities.
- The commenters recall previous discussions about the need for type 3 fonts but acknowledge the benefits of switching to type 42 as the default. They agree that defaulting to type 42 is a reasonable and necessary step toward eventually removing type 3 support.
- Number of comments this week: 2
-
[Bug]: unicode symbols encoded with
\u....
with mathtext raise ParseFatalException: This issue reports a bug where using unicode symbols encoded with the\u....
syntax inside raw strings for mathtext in matplotlib raises a ParseFatalException, contrary to what the documentation suggests. The user provides a minimal reproducible example showing that the error occurs when the unicode escape is used in a raw string, and expects the unicode character to render without exceptions.- The comments clarify that the
\u....
unicode escape works correctly when not used in a raw string, indicating the problem is likely a documentation error rather than a code bug. Both commenters agree that the documentation should be updated to reflect this behavior. - Number of comments this week: 2
- The comments clarify that the
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 labels and interpret the histogram. - [MNT]: Ease building just one Sphinx Gallery example file: This issue addresses the difficulty and inefficiency of building a single Sphinx Gallery example file, which currently requires either waiting for a full build or using a workaround that involves editing configuration files and still produces many warnings. The author proposes improving the documentation with practical tips and adjusting the Sphinx Gallery configuration to streamline this process, making it easier for developers—especially beginners—to preview individual gallery entries quickly and with fewer distractions.
- [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 reports that attempting to parse expressions like "\int \limits _ { v } ^ { \mu e } e d A" results in a ValueError due to an unknown symbol, and they expect the rendering to correctly position the limits as in standard LaTeX formatting.
- [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 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: 8
Summarized Issues:
- API Versioning and Compatibility: This topic covers the need for a versioning system in Matplotlib's backend API to manage interface expectations and maintain compatibility with third-party backends. Implementing this system would allow smoother API evolution and graceful transitions during breaking changes.
- issues/30559
- 3D Text Rotation Bug: This issue highlights a problem in Matplotlib 3.6.0 where 3D text rotated using the
zdir
parameter does not correctly apply therotation
argument, resulting in an incorrect default rotation of about 60 degrees instead of the expected alignment. This causes misaligned text in 3D plots. - issues/30563
- Font Embedding Format Deprecation: This topic discusses the proposal to deprecate type 3 font embedding in PDF outputs due to its limitations and compatibility issues. The suggested switch is to use type 42 font embedding as the default for better feature support.
- issues/30568
- Mathtext Unicode Parsing Error: This issue reports that using unicode symbols encoded with
\u....
inside raw strings for mathtext raises a ParseFatalException, which contradicts the documentation's claim that such encoding should work. This causes failures in rendering certain mathtext expressions. - issues/30574
- Widget Regression and AttributeError: This issue describes a regression that breaks widget behavior in MNE-Python tests due to the removal of the 'restore_region' method from FigureCanvasBase. The missing method triggers an AttributeError during widget blitting and simulated keypress events.
- issues/30575
- Colormap Creation Optimization: This proposal aims to improve colormap creation by modifying the ColormapRegistry to generate colormaps only on demand rather than at import-time. This change would reduce upfront costs and simplify the Colormap class by removing deferred initialization.
- issues/30578
- Bug Report Template Enhancement: This issue proposes adding PEP-723 metadata to the bug report template to improve debugging by enabling reproducible script execution and ensuring minimal examples are tested on the latest release. This would enhance the quality and reliability of bug reports.
- issues/30584
- Independent Axis Autoscaling Control: This proposal suggests enhancing autoscaling to allow independent control of the left and right limits of the x-axis (and similarly for the y-axis). This would enable scenarios like fixing the left x-limit to zero while allowing the right limit to autoscale, improving axis configuration flexibility.
- issues/30585
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:
- Right-to-left (RTL) text rendering support: Matplotlib currently lacks native support for right-to-left text rendering, causing Hebrew and Arabic text to be displayed incorrectly left-to-right. This issue requires users to rely on cumbersome external libraries, and the proposal is to add built-in automatic RTL detection and rendering to enhance usability and accessibility for RTL language users.
- issues/30557
- Dark mode icon visibility: The Qt5Agg backend icon in Matplotlib remains black and does not adapt to dark mode, making it blend into the background and difficult to see. This problem is likely caused by the way the icon's mask is created in the rendering code, affecting user experience in dark mode environments.
- issues/30564
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. fix: Qt5Agg support darkmode icon by using svg: This pull request addresses issue #27590 by fixing the Qt5Agg backend toolbar icon to properly support dark mode through the use of scalable SVG icons, improving icon rendering, scaling, and device pixel ratio handling to ensure visibility and consistency across different Qt versions and display settings.
- URL: pull/30565
- Merged: No
- Associated Commits: 3b0b2, f6063, 989ae, 5c5d6, 99265, c06e1, 3dba4, fa99c, 9a154, 462af, e94e9, a6e2b
2. tests: broaden QtAgg figureoptions test coverage: This pull request broadens the test coverage for the QtAgg figure options dialog in Matplotlib by adding parameterized tests for legend visibility scenarios, date axis handling, exclusion of lines labeled "nolegend" from legends, handling of mappables without array data, preservation of existing legends when regeneration is disabled, and strengthens assertions related to redraw and navigation stack updates to address coverage gaps identified in previous work.
- URL: pull/30587
- Merged: No
3. Deterministic Rendering: This pull request addresses the issue of non-deterministic rendering of polylines in Matplotlib by resolving inconsistencies caused by the SNAP_AUTO
setting and differing pixel translation methods based on line diagonality and vertex order, potentially closing issue #30549.
- URL: pull/30576
- Merged: No
Other Open Pull Requests
- Zoom rubber band box styling: This pull request standardizes the appearance of the zoom rubber band box across all Matplotlib backends by ensuring it is displayed as a dashed line. It also fixes the WebAgg backend where the box was not dashed and explicitly sets the black line color for the Tk backend to resolve an implicit color issue.
- pull/30560
- Font handling improvements: This update adds support for os.PathLike objects in the FT2Font constructor and FontManager by utilizing io.open compatibility. Additionally, it fixes the FT2Font.fname return value to correctly handle filenames initially provided as bytes.
- pull/30573
- Lazy colormap loading: The pull request introduces lazy loading for colormaps by recording all possible colormap names upfront but only loading the specific colormaps when requested. This optimization avoids unnecessary loading of all colormaps for plots that typically use only one or two.
- pull/30580
- Pyparsing version and code cleanup: This backport updates the minimum pyparsing version and adopts PEP8 style method and function names from pyparsing. It also adds an API note, cleans up code related to pyparsing versions below 3, removes unused imports, and sorts imports to improve code quality and consistency.
- pull/30589
- Animation event_source typing: This pull request proposes defining a Protocol for the
Animation.event_source
attribute to enforce it as a mandatory parameter that cannot be None. This is necessary because theAnimation.__init__
method callsevent_source.add_callback()
. - pull/30590
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: 14
Key Closed Pull Requests
1. Merge main back into text-overhaul branch to fix CI: This pull request merges the main branch back into the text-overhaul branch to fix continuous integration issues on macOS, addresses the disjoint bases problem in type checking by adding an ignore for GlyphIndexType
in stubtest, and includes various backported fixes and documentation updates to ensure CI stability and code correctness.
- URL: pull/30579
- Merged: Yes
- Associated Commits: 3b85b, d3c77, b8142, 3d46c, e1884, 5bdbb, 5359e, 34cca, 3950d, 7f8a4, 96512, 8b080, b1226, cdb39, 74d86, a474f, bc311, c718e, a38f9, eab4a, 2396e, b7a5c, c578e, 06b97, 1316b, b17b0, db30c, 1ea85, 0e078, 1784c, 6574e, 64d0b, bc2ed, 50541, 78275, 8b77f, 59b29, 1ddb1, c1c60, b00e0, c3323, ed12a, 6d1f6, 450db, f1c54, dab72, a617e, 1f8ff, 7b786, 32e30, 56a70, a3fcf, eee31, bbfa6, 671c0, 21cd3, e401f, d3491, a7e81, c6557, b78e4, 5906a, 54589, 63e03, 0056a, 83b8e, 0394f, 4383c, 5d89f, 4a797, d48b3, a6356, 2d524, 9b423, 553ce, 628a6, 4c817, 93f12, 5f8f9, 352b4, 6af90, 95773, 6b179, b42ce, 56911, 75e78, feecb, e93b7, 774d0, 81feb, f2a76, 799f2, b9884, c80e8, ccf19, 0e8cc, 623fe, 5b38f, 4dcf1, 22c3b, f05ec, 3373c, 56b9b, f2a9d, 3db41, 88fab, 31f68, c8532, ae472, b65c1, c18a1, 22a9c, 01cfc, ec72a, 554b9, 74beb, 1377f, 5cdd8, 9da20, c8369, b2364
2. MNT: Move all Colormap extremes setter logic into a single _set_extremes(): This pull request refactors the Colormap extremes setter logic by consolidating it into a single _set_extremes() method to simplify future deprecation handling and testing, while maintaining full backward compatibility with the public API.
- URL: pull/30577
- Merged: Yes
3. pdf/ps: Track full character map in CharacterTracker: This pull request enhances the CharacterTracker in the pdf/ps backend by tracking both character codes and glyph indices, enabling the production of multiple font subsets as required by different file formats.
- URL: pull/30566
- Merged: Yes
- Associated Commits: f192c
Other Closed Pull Requests
- PDF text output improvements: This pull request enhances the PDF text output process by merging loops to output single byte text chunks immediately, followed by multi-byte glyphs at the end, which improves the efficiency of text rendering. The change streamlines how text is processed and rendered in PDFs.
pull/30567
- Stubtest compatibility fixes for mypy 18: These pull requests address stubtest compatibility issues with mypy version 18 by disabling checks for disjoint bases and backporting the fix to the v3.10.x branch. The solution is a quick fix while alternative approaches involving decorators are still under evaluation.
pull/30558, pull/30570
- macOS 13 removal from CI workflows: These pull requests remove macOS 13 from the continuous integration configuration and workflows due to GitHub dropping support and compatibility issues with Homebrew dependencies. Testing is shifted to newer images aligned with the oldest supported macOS version tied to Python 3.10.
pull/30571, pull/30572
- Test backend and colormap updates: These pull requests force the use of the Agg backend in a specific test to avoid CI failures caused by invalid DISPLAY variables and update tests to avoid deprecated colormap setters by adopting modern methods. These changes prepare the codebase for upcoming deprecations and improve test reliability.
pull/30581, pull/30582
- Colormap deferred initialization streamlining: This pull request improves code maintainability and efficiency by streamlining the deferred initialization process of the Colormap in the project. The change simplifies how colormaps are initialized internally.
pull/30583
- CI Ubuntu ARM builder image update: This pull request updates the continuous integration setup by switching the Ubuntu ARM builder image from the mislabeled
ubuntu-22.04-arm
to the correct and newer Ubuntu 24.04 image. This ensures consistency and avoids confusion in the CI environment.
pull/30586
- Documentation improvements for boilerplate.py: This pull request enhances the documentation of the
boilerplate.py
file by clarifying its role and usage, while deliberately avoiding additions to the coding guidelines to keep complexity low for contributors. The update improves understanding without overcomplicating the guidelines.
pull/30562
- Fonts in PDF and PostScript table cleanup: This pull request improves the fonts table by removing irrelevant fractal rendering information and consolidating Type 42 and TrueType entries since they represent essentially the same technology. The change makes the table more relevant and concise for font designers.
pull/30569
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 |
---|---|---|---|---|
timhoffm | 50 | 12 | 7 | 62 |
QuLogic | 49 | 13 | 1 | 53 |
LangQi99 | 19 | 3 | 4 | 20 |
tacaswell | 18 | 1 | 1 | 21 |
melwyncarlo | 17 | 2 | 1 | 11 |
anntzer | 11 | 3 | 4 | 9 |
trygvrad | 6 | 1 | 4 | 9 |
ksunden | 17 | 0 | 0 | 0 |
jklymak | 1 | 1 | 1 | 14 |
story645 | 4 | 0 | 0 | 11 |