历史#

备注

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

Matplotlib 是一个用于在 Python 中创建数组 2D 图的库.虽然它起源于模仿 MATLAB 图形命令,但它独立于 MATLAB,并且可以以 Pythonic 的面向对象的方式使用.虽然 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 接口是由 pylab 提供的一组函数,允许用户使用与 MATLAB 图形生成代码非常相似的代码创建绘图 ( Pyplot 教程 ).Matplotlib 前端或 Matplotlib API 是一组类,它们承担了繁重的工作,创建和管理图形,文本,线条,绘图等等 ( 艺术家教程 ).这是一个抽象接口,它不知道任何关于输出的信息.后端是设备相关的绘图设备,也称为渲染器,它们将前端表示转换为硬拷贝或显示设备 ( 什么是后端? ).例如:PS 创建 PostScript® 硬拷贝,SVG 创建 Scalable Vector Graphics 硬拷贝,Agg 使用 Matplotlib 附带的高质量 Anti-Grain Geometry 库创建 PNG 输出,GTK 将 Matplotlib 嵌入到 Gtk+ 应用程序中,GTKAgg 使用 Anti-Grain 渲染器创建一个图形并将其嵌入到 Gtk+ 应用程序中,等等,对于 PDF , WxWidgets , Tkinter 等.

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


Matplotlib 的原始 logo (2003 -- 2008).

(Source code)

Matplotlib logo (2008 - 2015).

(Source code, png)