可以允许不完美,但不能不做

Matplotlib

简介

简介

原文:Introduction

译者:飞龙

协议:CC BY-NC-SA 4.0

Matplotlib 是一个用于在 Python 中绘制数组的 2D 图形库。虽然它起源于模仿 MATLAB®[1] 图形命令,但它独立于 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 接口是由matplotlib.pylab提供的函数集,允许用户使用非常类似于 MATLAB 图生成代码(Pyplot 教程)的代码创建绘图。 Matplotlib 前端或 Matplotlib API 是一组重要的类,创建和管理图形,文本,线条,图表等(艺术家教程)。这是一个对输出无所了解的抽象接口。后端是设备相关的绘图设备,也称为渲染器,将前端表示转换为打印件或显示设备(什么是后端?)。后端示例:PS 创建 PostScript® 打印件,SVG 创建可缩放矢量图形打印件,Agg 使用 Matplotlib 附带的高质量反颗粒几何库创建 PNG 输出,GTK 在 Gtk+ 应用程序中嵌入 Matplotlib,GTKAgg 使用反颗粒渲染器创建图形并将其嵌入到 Gtk+ 应用程序中,以及用于 PDFWxWidgetsTkinter 等。

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

[1] MATLAB 是 MathWorks 公司的注册商标。