
结果出来的那天,非常非常漫长。
通过这篇简短的文章,我想谈谈在那“天”之前发生的一切,我的经历、我的旅程,以及 Matplotlib 在其中的作用!
关于我#
我是一名三年级的本科生,目前在印度信息技术学院格瓦利尔攻读信息技术双学位(工学学士+工学硕士)。
在大二期间,我对机器学习领域的兴趣开始扩展,在那里我了解了各种令人惊叹的开源库,如NumPy、SciPy、pandas和Matplotlib!逐渐地,在大三期间,我在一家初创公司实习期间探索了计算机视觉领域,我的大部分工作是通过 JNI 调用将他们的原生 C++ 代码库集成到 Android 中。
为了将我在实习中学到的知识付诸实践,我和一位来自我大学的朋友一起进行了自己的研究。该论文被 CoDS-COMAD’21 接收,并在 ACM 数字图书馆发表。(链接,如有兴趣可以查看)
在此期间,我还培养了对开源的兴趣,并开始关注各种库中的问题(和拉取请求),包括 OpenCV [贡献] 和 NumPy [贡献]。
我很快参与了 Matplotlib 的社区;它非常友好,也适合新手。
有趣的事实:我参加的第一次开发者电话会议就是它举办的,与来自世界各地的人们一起!
首次贡献#
我们都会犯错,我向类似 OpenCV 这样的组织提交的第一个 PR非常糟糕,至今看起来是这样的:
老实说,我添加了一个只包含几行差异的提交。
但是,我将来自上游
master
的所有更改拉取到我的工作分支,而 PR 应该在3.4
分支上进行。
我确定我可以做很多事情来解决它,但在当时我什么也做不了——想象一下当时的焦虑!
现在回过头来看那些笨拙的 PR,我觉得它们对我的学习过程很重要。
有趣的事实:由于其中一个最初的贡献,我在 GitHub 上获得了一个闪亮的徽章 [火星 2020 直升机贡献者]!

开始使用 Matplotlib#
大约在去年 11 月初,我浏览了Good First Issue
和New Feature
标签,我发现了一个模式——大多数与Mathtext相关的问题都没有得到解决。
简单来说,Mathtext 是 Matplotlib 的一部分,它解析数学表达式并提供类似 TeX 的输出,例如:
我扫描了相关的源代码,试图弄清楚如何解决这些 Mathtext 问题。最终,在维护者审查 PR 和在 GitHub 问题/拉取请求以及 Gitter 频道上进行大量冗长的讨论的帮助下,我成功地将我的初始 PR 合并了!
整个过程中的学习#
我们大多数人在使用库时并不了解它们的底层结构,这有时会导致下游错误!
在研究 Matplotlib 的架构时,我发现可以将相同的思想应用于我的一个项目!
Matplotlib 使用一个名为rcParams
的全局字典式对象,我在swi-ml(我编写的一个小型 Python 库,实现了 ML 算法的子集,并具有可切换的后端)中使用了类似于 rcParams 的较小接口。
GSoC 在哪里发挥作用?#
大约在 1 月份,我和其中一位维护者(嘿Antony!)谈到了库中处理文本/字体的当前方式存在的一长串问题。
在将它们整理成一个顺序后,经过维护者的几次调整,Matplotlib 的GSoC 项目想法列表诞生了。我的构建一个强有力提案的旅程也由此开始!
关于项目#
提案链接:Google Docs(将在 GSoC 结束后继续有效),GSoC 网站(不太确定)#
重新审视文本/字体处理#
该项目的目标分为 3 个子目标
-
字体回退:重新设计的文本优先字体接口 - 本质上是在渲染“豆腐块”之前解析所有字体族。
(类似于在CSS 中指定字体系列!)
-
字体子集化:每个导出的 PS/PDF 都将包含从整个字体中提取的嵌入式字形子集。
(想象一个只包含单个字母“a”的绘图,您是否希望从 Matplotlib 导出的 PDF在其内部嵌入整个字体文件?)
-
大多数 mpl 后端将使用统一的 TeX 导出机制
导师 Thomas A Caswell,Antony Lee,Hannah。
非常感谢您花时间阅读这篇博客!我将在后续文章中分享我的进度。