历史#
备注
以下介绍性文本由 Matplotlib 的原作者 John D. Hunter(1968-2012)于2008年撰写。
Matplotlib 是一个用于在 Python 中制作数组二维图的库。尽管它起源于模仿 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 创建 可缩放矢量图形 硬拷贝,Agg 使用与 Matplotlib 一起提供的高质量 抗锯齿几何 库创建 PNG 输出,GTK 将 Matplotlib 嵌入到 Gtk+ 应用程序中,GTKAgg 使用抗锯齿渲染器创建图形并将其嵌入到 Gtk+ 应用程序中,等等,对于 PDF、WxWidgets、Tkinter 等。
Matplotlib 被许多人在许多不同的场景中使用。有些人希望自动生成 PostScript 文件以发送给打印机或出版商。其他人将 Matplotlib 部署在 Web 应用服务器上,以生成 PNG 输出用于动态生成的网页中。有些人从 Windows 上的 Tkinter 中的 Python shell 交互式地使用 Matplotlib。我的主要用途是将 Matplotlib 嵌入到在 Windows、Linux 和 Macintosh OS X 上运行的 Gtk+ EEG 应用程序中。
Matplotlib 的原始标志(2003 -- 2008)。
(Source code
, 2x.png
, png
)

Matplotlib 标志(2008 - 2015)。
(Source code
, 2x.png
, png
)
