这个教程包含一些基本使用模式和好的实例来帮助你开始使用Matplotlib。
通用概念
matplotlib有一个广泛的代码库,这可能会让许多新用户望而却步. 但是,大多数matplotlib都可以通过相当简单的概念框架和一些重要的知识来理解。
绘图需要在一系列层次上进行操作,从最一般的(例如,“ contour (等高线?)”这个二维数组”)到最具体的(例如,“将屏幕像素涂成红色”)。绘图包的目的是帮助您尽可能轻松地可视化数据,并提供所有必要的控制——也就是说,大部分时间使用相对高级的命令,并且在需要时仍然能够使用低级命令。
因此,matplotlib中的所有内容都组织在一个层次结构中。层次结构的顶部是matplotlib提供的“状态机环境”。pyplot模块。在这个级别,简单的函数用于向当前图中的当前轴添加绘图元素(行、图像、文本等)。
注意: Pyplot的状态机环境的行为类似于MATLAB,具有MATLAB经验的用户应该最熟悉它。
层次结构的下一层是面向对象接口的第一层,其中pyplot仅用于图形创建等少数函数,用户显式地创建并跟踪图形和axis对象。在这个级别,用户使用pyplot创建图形,通过这些图形,可以创建一个或多个axis对象。然后,这些axis对象用于大多数绘图操作。
对于更多的控制(这对于在GUI应用程序中嵌入matplotlib绘图之类的事情是非常重要的),pyplot级别可能被完全删除,只留下纯粹面向对象的方法。
# sphinx_gallery_thumbnail_number = 3 # 导入库 import matplotlib.pyplot as plt import numpy as np
图形的部分

Figure
整个图。 该图跟踪所有axes子轴 少数“特殊” artists (标题、图例等)和画布。(不要太担心画布,它非常重要,因为它是实际绘制图形的对象,以获得您的绘图,但是作为用户,它对您来说或多或少是不可见的)。一个图形可以有任意数量的轴,但要想有用,至少应该有一个轴。
创建新图形最简单的方法是使用pyplot:
fig = plt.figure() # 没有坐标轴的空图形 fig.suptitle('No axes on this figure') # 添加一个标题,这样我们就知道它是什么了 fig, ax_lst = plt.subplots(2, 2) # 带有2x2坐标轴网格的图形 plt.show() # 显示图形

Axes
坐标轴
这是你所认为的 ‘a plot’, 它是带有数据空间的图像区域, 一个给定的图形可以包含许多轴, 但一个给定的 Axes
object 只能在一个 Figure
. Axes 包含两个(或三个在3D情况下) Axis
objects (注意 Axes 和 Axis 之间的区别) 谁负责数据限制(还可以通过 set_xlim()
和 set_ylim()
Axes
方法控制数据限制). 每一个Axes
有一个标题(通过设置set_title()
), 一个 x-label (通过设置 set_xlabel()
), 和一个 y-label 通过设置 set_ylabel()
).
Axes
类 它的成员函数是使用OO接口的主要入口点。
Axis
轴线
这些是 number-line-like objects. 它们负责设置图形限制并生成刻度 (axis上的标记) 和ticklabels (标记刻度的字符串). 坐标网延长线的位置由 Locator
object ticklabel 决定,字符串通过 Formatter
格式化程序格式化. 正确的定位程序 Locator
和格式化程序 Formatter
的组合可以很好地控制标记位置和标签。
Artist
基本上,你在这幅图上看到的一切都是 artist (甚至 Figure
, Axes
, 和Axis
objects). 这包括Text
objects, Line2D
objects,collection
objects, Patch
objects … (你产生的想法). 当图形呈现时, 所有的 artists 都画在 画布canvas上. 大部分 Artists 与 Axes 绑定; 比如一个 Artist 不能由多个Axes共享, 或者从一个移动到另一个 。
用于绘制函数的输入类型
所有的绘图函数希望 np.array
或 np.ma.masked_array
作为输入. ‘类数组array’ 像 pandas
数据对象和 np.matrix
可能也可能不会按照预期工作. 最好将它们转换为 np.array
对象.
比如, 转换一个pandas.DataFrame
a = pandas.DataFrame(np.random.rand(4,5), columns = list('abcde')) a_asarray = a.values
转换np.matrix
b = np.matrix([[1,2],[3,4]]) b_asarray = np.asarray(b)
Matplotlib, pyplot 和pylab: 它们之间有什么关系?
Matplotlib 是整个包 ,matplotlib.pyplot
是 Matplotlib的一个模块.
用于 pyplot 模块中的函数, 总有一个 “current” figure图形 和axes轴 (根据请求自动创建的). 比如,在下面的例子, 第一个调用 plt.plot
创建 axes轴, 然后调用 plt.plot
在相同的axes添加额外的lines行, plt.xlabel
, plt.ylabel
, plt.title
和plt.legend
设置坐标轴标签和标题,并添加图例 .
x = np.linspace(0, 2, 100) plt.plot(x, x, label='linear') plt.plot(x, x**2, label='quadratic') plt.plot(x, x**3, label='cubic') plt.xlabel('x label') plt.ylabel('y label') plt.title("Simple Plot") plt.legend() plt.show()

pylab
是一个方便的模块,批量导入matplotlib.pyplot
(为了绘图) 和numpy
(为了数学运算和数组操作) 在一个空间中. pylab是不推荐使用的,并且强烈反对使用它,因为命名空间会被污染. 使用pyplot 代替.
非交互式的绘图时建议使用 pyplot 创建图形,然后用OO接口绘图。