历史#

注意

以下引言由 Matplotlib 的原作者 John D. Hunter (1968-2012) 于 2008 年撰写。

Matplotlib 是一个库,用于在 Python 中绘制数组的二维绘图。尽管它起源于模拟 MATLAB 图形命令,但它独立于 MATLAB,并且可以以 Pythonic 面向对象的方式使用。尽管 Matplotlib 主要用纯 Python 编写,但它大量使用了 NumPy 和其他扩展代码,即使对于大型数组也能提供良好的性能。

Matplotlib 的设计理念是,你应该能够仅使用几个命令,甚至一个命令就能创建简单的绘图!如果你想查看数据的直方图,你不应该需要实例化对象、调用方法、设置属性等;它应该直接起作用。

多年来,我一直在使用 MATLAB 来进行数据分析和可视化。MATLAB 擅长制作精美的图表。当我开始使用脑电图数据时,我发现需要编写应用程序来与我的数据进行交互,并在 MATLAB 中开发了一个脑电图分析应用程序。随着应用程序变得越来越复杂,与数据库、http 服务器进行交互,操作复杂的数据结构,我开始感觉到 MATLAB 作为一门编程语言的局限性,并决定在 Python 中重新开始。Python 完全弥补了 MATLAB 作为一门编程语言的所有缺陷,但我很难找到一个二维绘图包(对于三维来说,VTK 完全超出了我的所有需求)。

当我开始寻找 Python 绘图包时,我有几个要求

  • 图表应该看起来很棒——出版质量。对我来说,一个重要的要求是文本看起来不错(抗锯齿等)。

  • Postscript 输出,以便与 TeX 文档一起包含

  • 可嵌入到图形用户界面中以进行应用程序开发

  • 代码应该足够简单,以便我可以理解并扩展它

  • 制作图表应该很容易

没有找到适合我的包,我做了任何自尊的 Python 程序员都会做的事情:挽起袖子,一头扎进去。由于没有计算机图形方面的实际经验,我决定模仿 MATLAB 的绘图功能,因为这是 MATLAB 做得非常好的事情。这还有一个好处,就是很多人都有 MATLAB 方面的经验,因此他们可以快速开始在 Python 中绘制图表。从开发人员的角度来看,拥有一个固定的用户界面(pylab 界面)非常有用,因为代码库的核心可以在不影响用户代码的情况下重新设计。

Matplotlib 代码在概念上分为三个部分:pylab 界面是由 pylab 提供的一组函数,允许用户使用非常类似于 MATLAB 图形生成代码的代码创建图表(Pyplot 教程)。Matplotlib 前端Matplotlib API是一组执行繁重任务的类,创建和管理图形、文本、线条、图表等(艺术家教程)。这是一个抽象接口,对输出一无所知。后端是与设备相关的绘图设备,又称渲染器,它将前端表示转换为硬拷贝或显示设备(什么是后端?)。后端示例:PS 创建 PostScript® 硬拷贝,SVG 创建 可缩放矢量图形 硬拷贝,Agg 使用随 Matplotlib 一起提供的 Anti-Grain Geometry 库创建 PNG 输出,GTK 将 Matplotlib 嵌入到 Gtk+ 应用程序中,GTKAgg 使用 Anti-Grain 渲染器创建图形并将其嵌入到 Gtk+ 应用程序中,依此类推,适用于 PDFWxWidgetsTkinter 等。

许多人都在各种不同的环境中使用 Matplotlib。有些人希望自动生成 PostScript 文件,以便发送到打印机或出版商。其他人则在 Web 应用程序服务器上部署 Matplotlib,以便生成 PNG 输出,以包含在动态生成的网页中。有些人使用 Tkinter 在 Windows 上的 Python shell 中交互式地使用 Matplotlib。我的主要用途是在 Windows、Linux 和 Macintosh OS X 上运行的 Gtk+ EEG 应用程序中嵌入 Matplotlib。


Matplotlib 的原始徽标(2003 年至 2008 年)。

( 代码, 2x.png, png)

Matplotlib 徽标(2008 年至 2015 年)。

( 代码, 2x.png, png)