历史#

笔记

以下介绍性文字由 Matplotlib 的原作者 John D. Hunter (1968-2012) 于 2008 年编写。

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

Matplotlib 的设计理念是您应该能够只用几个命令或一个命令来创建简单的绘图!如果您想查看数据的直方图,则不需要实例化对象、调用方法、设置属性等;它应该可以工作。

多年来,我曾经专门使用 MATLAB 进行数据分析和可视化。MATLAB 擅长使漂亮的绘图变得简单。当我开始处理 EEG 数据时,我发现我需要编写应用程序来与我的数据进行交互,并在 MATLAB 中开发了一个 EEG 分析应用程序。随着应用程序变得越来越复杂,与数据库、http 服务器交互、操作复杂的数据结构,我开始克服 MATLAB 作为编程语言的局限性,并决定使用 Python 重新开始。Python 不仅弥补了 MATLAB 作为编程语言的所有缺陷,但我很难找到 2D 绘图包(对于 3D VTK来说,超过了我的所有需求)。

当我去寻找 Python 绘图包时,我有几个要求:

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

  • 包含在 TeX 文档中的 Postscript 输出

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

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

  • 制作情节应该很容易

没有找到适合我的包,我做了任何有自尊的 Python 程序员都会做的事情:卷起袖子潜入水中。没有任何真正的计算机图形经验,我决定模仿 MATLAB 的绘图功能,因为那是 MATLAB做得很好。这还有一个额外的好处,那就是许多人都拥有大量的 MATLAB 经验,因此他们可以快速掌握 Python 中的蒸汽绘图。从开发人员的角度来看,拥有固定的用户界面(pylab 界面)非常有用,因为可以重新设计代码库的核心而不影响用户代码。

Matplotlib 代码在概念上分为三个部分: pylab 接口是一组函数 ,允许用户使用与 MATLAB 图形生成代码( Pyplot 教程pylab)非常相似的代码创建绘图。Matplotlib前端Matplotlib API是一组完成繁重工作、创建和管理图形、文本、线条、绘图等的类(艺术家教程)。这是一个对输出一无所知的抽象接口。后端是依赖于设备的绘图设备,也称为渲染器,它将前端表示转换为硬拷贝或显示设备(什么是后端?)。后端示例:PS 创建PostScript®硬拷贝,SVG 创建Scalable Vector Graphics 硬拷贝,Agg 使用 Matplotlib 附带的高质量Anti-Grain Geometry 库创建 PNG 输出,GTK 将 Matplotlib 嵌入 Gtk+ 应用程序,GTKAgg 使用 Anti-Grain 渲染器创建一个图形并将其嵌入到 Gtk+ 应用程序中,等等用于PDFWxWidgetsTkinter等。

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


Matplotlib 的原始标志 (2003 -- 2008)。

源代码png

../../_images/history-1.png

Matplotlib 徽标(2008 - 2015)。

源代码png

../../_images/history-2.png