这个教程包含一些基本使用模式和好的实例来帮助你开始使用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

图形的部分

../../_images/anatomy.png

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子轴

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 (甚至 FigureAxes, 和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.xlabelplt.ylabelplt.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()
../../_images/sphx_glr_usage_003.png

pylab 是一个方便的模块,批量导入matplotlib.pyplot (为了绘图) 和numpy (为了数学运算和数组操作) 在一个空间中. pylab是不推荐使用的,并且强烈反对使用它,因为命名空间会被污染. 使用pyplot 代替.

非交互式的绘图时建议使用 pyplot 创建图形,然后用OO接口绘图。

发表回复