结果出来的那天,非常非常漫长。

通过这篇简短的文章,我想谈谈在那“天”之前发生的一切,我的经历、我的旅程,以及 Matplotlib 在其中的作用!

关于我#

我是一名三年级的本科生,目前在印度信息技术学院格瓦利尔攻读信息技术双学位(工学学士+工学硕士)。

在大二期间,我对机器学习领域的兴趣开始扩展,在那里我了解了各种令人惊叹的开源库,如NumPySciPypandasMatplotlib!逐渐地,在大三期间,我在一家初创公司实习期间探索了计算机视觉领域,我的大部分工作是通过 JNI 调用将他们的原生 C++ 代码库集成到 Android 中。

为了将我在实习中学到的知识付诸实践,我和一位来自我大学的朋友一起进行了自己的研究。该论文被 CoDS-COMAD’21 接收,并在 ACM 数字图书馆发表。(链接,如有兴趣可以查看)

在此期间,我还培养了对开源的兴趣,并开始关注各种库中的问题(和拉取请求),包括 OpenCV [贡献] 和 NumPy [贡献]。

我很快参与了 Matplotlib 的社区;它非常友好,也适合新手。

有趣的事实:我参加的第一次开发者电话会议就是它举办的,与来自世界各地的人们一起!

首次贡献#

我们都会犯错,我向类似 OpenCV 这样的组织提交的第一个 PR非常糟糕,至今看起来是这样的:OpenCV_PR

老实说,我添加了一个只包含几行差异的提交。

但是,我将来自上游master的所有更改拉取到我的工作分支,而 PR 应该在3.4分支上进行。

我确定我可以做很多事情来解决它,但在当时我什么也做不了——想象一下当时的焦虑!

现在回过头来看那些笨拙的 PR,我觉得它们对我的学习过程很重要。

有趣的事实:由于其中一个最初的贡献,我在 GitHub 上获得了一个闪亮的徽章 [火星 2020 直升机贡献者]!

开始使用 Matplotlib#

大约在去年 11 月初,我浏览了Good First IssueNew Feature标签,我发现了一个模式——大多数与Mathtext相关的问题都没有得到解决。

简单来说,Mathtext 是 Matplotlib 的一部分,它解析数学表达式并提供类似 TeX 的输出,例如:

我扫描了相关的源代码,试图弄清楚如何解决这些 Mathtext 问题。最终,在维护者审查 PR 和在 GitHub 问题/拉取请求以及 Gitter 频道上进行大量冗长的讨论的帮助下,我成功地将我的初始 PR 合并了!

整个过程中的学习#

我们大多数人在使用库时并不了解它们的底层结构,这有时会导致下游错误!

在研究 Matplotlib 的架构时,我发现可以将相同的思想应用于我的一个项目

Matplotlib 使用一个名为rcParams的全局字典式对象,我在swi-ml(我编写的一个小型 Python 库,实现了 ML 算法的子集,并具有可切换的后端)中使用了类似于 rcParams 的较小接口。

GSoC 在哪里发挥作用?#

大约在 1 月份,我和其中一位维护者(嘿Antony!)谈到了库中处理文本/字体的当前方式存在的一长串问题。

在将它们整理成一个顺序后,经过维护者的几次调整,Matplotlib 的GSoC 项目想法列表诞生了。我的构建一个强有力提案的旅程也由此开始!

关于项目#

重新审视文本/字体处理#

该项目的目标分为 3 个子目标

  1. 字体回退:重新设计的文本优先字体接口 - 本质上是在渲染“豆腐块”之前解析所有字体族。

    (类似于在CSS 中指定字体系列!)

  2. 字体子集化:每个导出的 PS/PDF 都将包含从整个字体中提取的嵌入式字形子集。

    (想象一个只包含单个字母“a”的绘图,您是否希望从 Matplotlib 导出的 PDF在其内部嵌入整个字体文件?)

  3. 大多数 mpl 后端将使用统一的 TeX 导出机制

导师 Thomas A CaswellAntony LeeHannah

非常感谢您花时间阅读这篇博客!我将在后续文章中分享我的进度。

注意:这篇博文也发布在我的个人网站上!#