历史#
注意
以下介绍性文本由 Matplotlib 的原始作者 John D. Hunter(1968-2012)于 2008 年撰写。
Matplotlib 是一个用于在 Python 中绘制数组二维图形的库。尽管它起源于模仿 MATLAB 图形命令,但它独立于 MATLAB,并且可以以符合 Python 习惯的、面向对象的方式使用。虽然 Matplotlib 主要用纯 Python 编写,但它大量使用了 NumPy 和其他扩展代码,即使对于大型数组也能提供良好的性能。
Matplotlib 的设计理念是,您应该能够用少量命令,甚至只需一个命令,就能创建简单的绘图!如果您想查看数据的直方图,您不应该需要实例化对象、调用方法、设置属性等等;它应该能直接工作。
多年来,我曾专门使用 MATLAB 进行数据分析和可视化。MATLAB 擅长轻松制作美观的绘图。当我开始处理脑电图 (EEG) 数据时,我发现我需要编写应用程序来与我的数据交互,并用 MATLAB 开发了一个脑电图分析应用程序。随着应用程序复杂性的增加,与数据库、HTTP 服务器交互,以及操纵复杂数据结构,我开始受到 MATLAB 作为一种编程语言的限制困扰,并决定在 Python 中重新开始。Python 完全弥补了 MATLAB 作为一种编程语言的所有不足,但我当时很难找到一个二维绘图包(对于三维绘图,VTK 完全超出了我的所有需求)。
当我寻找 Python 绘图包时,我有几个要求:
绘图应该看起来很棒——达到出版质量。对我来说,一个重要的要求是文本显示良好(抗锯齿等)。
Postscript 输出,用于包含到 TeX 文档中
可嵌入图形用户界面中,用于应用程序开发
代码应该足够简单,以便我能够理解和扩展它
制作绘图应该很容易
没有找到完全适合我的软件包,我做了任何一个有自尊的 Python 程序员都会做的事情:撸起袖子,投入其中。由于没有真正的计算机图形学经验,我决定模仿 MATLAB 的绘图功能,因为那是 MATLAB 做得非常好的地方。这还有一个额外的好处,那就是许多人有丰富的 MATLAB 经验,因此他们可以快速上手 Python 绘图。从开发人员的角度来看,拥有一个固定的用户界面(pylab 接口)非常有用,因为代码库的核心可以在不影响用户代码的情况下重新设计。
Matplotlib 代码在概念上分为三个部分:pylab 接口是由 pylab
提供的一组函数,允许用户使用与 MATLAB 图形生成代码非常相似的代码创建绘图(Pyplot 教程)。Matplotlib 前端或 Matplotlib API 是执行繁重工作的一组类,负责创建和管理图形、文本、线条、绘图等等(Artist 教程)。这是一个抽象接口,不了解输出。后端是依赖于设备的绘图设备,又称渲染器,它们将前端表示转换为硬拷贝或显示设备(什么是后端?)。后端示例: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+ 脑电图应用程序中。
Matplotlib 的原始标志(2003-2008)。

Matplotlib 标志(2008-2015)。
