专栏: Matplotlib
下一篇:
一、模块的导入
(一)Matplotlib 的导入
Matplotlib 库使用多是导入以下两个模块:
import matplotlib as mpl
import matplotlib.pyplot as plt
(二)NumPy的导入
NumPy 是使用 Python 进行科学计算的基础软件包。除其他外,它包括:
- 功能强大的 维数组对象。
- 精密广播功能函数。
- 集成 C/C++ 和 Fortran 代码的工具。
- 强大的线性代数、傅立叶变换和随机数功能。
Matplotlib 所使用的数据,通常由 NumPy 来提供。Python 本身的列表 list 和 数学库math 配合得并不是很好。math 库所作用的是单个值,而数据的生成大多是对整个数组进行操作。
import numpy as np
二、绘图类型
Matplotlib 中许多常见绘图命令的概述。
三、Matplotlib Figure的组成
下图给出了 Matplotlib 中只包含一个 Axes 的 Figure(图) 的组成结构,同时,一张图可以由多个子图组成。
(一)图形元素
Matplotlib 中所有可见的一切都被称作 Artist。当一张 图(Figure) 被绘制时,所有的 Artist 都会被绘制到一张 画布(Canvas) 上。大多数的 Artist 都会被绑定到一个 Axes 中,所以不能同时被多个 Axes 共享或者从一个 Axes 移动到 Axes。
1. Figure
Figure 在 Matplotlib 中表示一整张图,上面包含了所有的 Axes,以及一组特殊的 Artist ,如标题,图例,颜色条等,甚至是嵌套的子图(subfigure)。
2. Axes
Axes 是一个附加到 Figure 的 Artist,其中了包含用于绘制数据的区域。Axes除了包含一个绘图区域外,通常还包含两条坐标轴:轴 和 轴,绘制3D图形则多一个轴。并且每个 Axes 都会有一个 Title(标题) 和两个坐标轴标签: x-label 和 y-label。
下图为一个 Axes 的组成:
在下图所示的 Figure 中,包含了4个Axes,每个 Axes都有各自的标题,左下边缘有用于显示刻度的坐标轴。(每个Axes旁边还有绑定的 ColorBar 颜色条)
3. Axis
坐标轴 Axis 用于设置缩放比例、限值、生成刻度(坐标轴上的标记) 和 刻度标签(标记刻度的一串文本)。这些刻度的位置由 Locator 决定,标签文本则由一个Formatter 格式化。
在下图中可以看到 Axes左边 Y-Axis 和底边 X-Axis 上的刻度线和刻度上的标签文本。
四、编程风格
Matplotlib 有三种代码风格,分别是 Object-oriented(面向对象) , pyplot 接口 , pylab 接口。
其中, pylab接口 风格是模拟 MATLAB 的使用方式,导入了大量名称到全局命名空间中,对命名空间造成了污染,现在已经被认为是一种有害的方式而被官方强烈反对,现在基本只存在于旧代码示例中。目前推荐使用的只有 面向对象风格 和 pyplot 接口 风格。
Matplotlib 的文档和示例同时使用了 Object-oriented 和 pyplot 风格。 通常,我们建议使用 Object-oriented 风格,特别是对于绘图复杂的情况,以及打算作为更大项目的一部分重用的函数和脚本。 但是,pyplot风格对于快速交互工作非常方便。
下面就对同一个简单的绘图使用 Object-oriented 和 pyplot 两个不同的编程风格来绘制。
面向对象风格
面向对象风格即显式地创建 Figures 和 Axes ,并调用它们的方法。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100) # Sample data.
# Note that even in the OO-style, we use `.pyplot.figure` to create the Figure.
fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
ax.plot(x, x, label='linear') # Plot some data on the axes.
ax.plot(x, x**2, label='quadratic') # Plot more data on the axes...
ax.plot(x, x**3, label='cubic') # ... and some more.
ax.set_xlabel('x label') # Add an x-label to the axes.
ax.set_ylabel('y label') # Add a y-label to the axes.
ax.set_title("Simple Plot") # Add a title to the axes.
ax.legend() # Add a legend.
plt.show() # Show the figure.
pyplot 接口风格
pyplot 风格使用 pyplot的接口来进行绘图。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100) # Sample data.
plt.figure(figsize=(5, 2.7), layout='constrained')
plt.plot(x, x, label='linear') # Plot some data on the (implicit) axes.
plt.plot(x, x**2, label='quadratic') # etc.
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
专栏: Matplotlib
下一篇:
文章出处登录后可见!