1 安装
Matplotlib 在 PyPI 上以 wheel 包的形式发布,适用于 macOS、Windows 和 Linux。
使用 pip 进行安装:
python -m pip install -U pip
python -m pip install -U matplotlib
或者使用conda进行安装:
conda install matplotlib
安装后,输入以下代码,查看版本:
import matplotlib as mpl
mpl.__version__
输出
'3.8.2'
表明matplotlib被正确安装;
本文中所有代码均在matplotlib的’3.8.2’版本中测试通过;
2 matplotlib配置中文
plt.rcParams
是 Matplotlib 中的一个配置对象,用于设置全局的图表参数。通过这个对象,你可以修改 Matplotlib 的默认配置,从而影响整个图表的外观和行为。这样可以方便地自定义图表的样式,使其符合特定的需求。
plt.rcParams
实际上是一个字典,其中包含了许多可以配置的选项,比如图表字体、图表大小、字体大小、线型、颜色等。
在默认情况下matplotlib使用字体不包含中文:
plt.rcParams['font.sans-serif']
# 输出
['DejaVu Sans',
'Bitstream Vera Sans',
'Computer Modern Sans Serif',
'Lucida Grande',
'Verdana',
'Geneva',
'Lucid',
'Arial',
'Helvetica',
'Avant Garde',
'sans-serif']
在默认配置下,绘制图表,如果使用中文字符,会出现中文显示异常:
# 绘制sin函数
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('正弦函数')
plt.plot(x, y)
plt.show()
因此我我们需要修改 plt.rcParams
的字体参数,使绘图可以正常显示中文:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 配置中文, 可以换成其余已安装中文字体,通常设置为黑体
plt.rcParams['axes.unicode_minus'] = False # 配置负号的显示,避免显示错误
配置完成后,使用matplotlib绘图即可正常显示中文:
# 绘制sin函数
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('正弦函数')
plt.plot(x, y)
plt.show()
3 matplotlib的两种api
Matplotlib提供了两种主要的API(应用程序编程接口):Stateful API(状态式API)和Object-Oriented API(面向对象API)。它们在使用上有一些区别,适用于不同的使用场景和个人偏好。
3.1 Stateful API(状态式API):
1. 也被称为MATLAB-style API,因为它的设计受到MATLAB绘图的启发。
2. 使用全局状态机,图表的状态(例如当前图表、当前坐标轴)被保存在全局变量中。
3. 使用`plt`模块进行绘图,例如 `plt.plot()`。
4. 适合快速绘图和简单的图形。
示例:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.title('Stateful API 示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
3.2 Object-Oriented API(面向对象API):
1. 基于面向对象的设计,使用显式创建和操作图表对象的方式。
2. 通过创建`Figure`和 `Axes`对象,所有的绘图操作都发生在这些对象上。
3. 更灵活和可控,适用于复杂的图表和需要更多自定义的场景。
示例:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Object-Oriented API 示例')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
plt.show()
选择哪个API:
- 如果你只是需要快速的、简单的图形,Stateful API可能更直观和方便。
- 对于更复杂、定制化的图形,以及需要在一个图表中显示多个子图的情况,Object-Oriented API更为强大和灵活。
一般来说,Object-Oriented API在大型项目和复杂图形的创建中更受欢迎,因为它提供了更多的控制和结构。
4 matplotlib快速入门
Matplotlib 将数据绘制在 “画布”(Figure)上,每个 "画布"可以包含一个或多个 “坐标轴”(Axes),即可以用 x-y 坐标(或极坐标图中的 theta-r,三维图中的 x-y-z,等等)指定点的区域。创建带坐标轴的图的最简单方法是使用 pyplot.subplots。然后,我们可以使用 Axes.plot 在坐标轴上绘制一些数据;
以下是 Matplotlib 图表的组成部分。
4.1 Figure(画布)
在Matplotlib中,Figure
是图表的顶层容器,它包含了所有绘图元素。Figure
对象是整个图表的最外层结构,可以包含一个或多个 Axes
对象(坐标轴),文本元素、线条、图像等。每个图表都至少包含一个 Figure
。
创建 Figure
的常用方式是使用 plt.figure()
函数
import matplotlib.pyplot as plt
# 创建一个空白的Figure
fig = plt.figure()
当然,也可以通过面向对象的方式使用 plt.subplots()
来创建包含一个或多个 Axes
的 Figure
:
fig = plt.figure() # 一个空的画布,没有坐标轴
fig, ax = plt.subplots() # 一个画布,带有一个坐标轴
fig, axs = plt.subplots(2, 2) # 一个画布带有2✖2的坐标轴
# 一个画布,带有一组自由排列的坐标轴
fig, axs = plt.subplot_mosaic([['left', 'right_top'],
['left', 'right_bottom']])
![]() | ![]() | ![]() |
---|
Figure
对象允许你对整个图表进行全局设置,例如设置图表的大小、背景色、边框等。通过 Figure
对象,你可以控制图表的外观和布局。
当你使用
plt
的函数直接绘制图表时(例如plt.plot()
),Matplotlib会在幕后自动为你创建一个默认的Figure
对象和一个Axes
对象。这种隐式创建的Figure
对象在绝大多数情况下足够使用,特别是对于快速绘制简单图形的任务。
Matplotlib在后台维护了一个当前图表(current figure)和当前坐标轴(current axes)的概念,当你使用plt.plot()
等函数时,它会自动在当前图表上进行绘制。
这种隐式创建的方式对于许多简单的绘图任务非常方便,因为你不需要显式创建Figure
对象。
4.2 Axes(坐标轴)
在Matplotlib中,Axes是一个非常重要的概念,它是绘图的基本单元。一个Axes对象基本上是一个容器,它包括了该坐标轴下的所有的绘图元素,例如轴线、刻度、标签、图例等。
Axes对象是Figure对象的子对象,每个Axes实例都有自己的坐标系统,通过这个坐标系统,我们可以确定数据在图上的位置。在Axes对象上,我们可以添加各种数据图像,例如散点图、线图、柱状图等。
fig, axs = plt.subplots(2, 2)
ax1, ax2, ax3, ax4 = axs.flatten() # 将Axes对象转换为一维数组
ax1.plot([1, 2, 3])
ax2.bar([1, 2, 3], [3, 1, 2])
ax3.scatter([1, 2, 3], [3, 1, 2])
ax4.hist([1, 2, 3])
fig
4.3 Axis(轴)
在Matplotlib中,“axis”(轴)是指在画布上(Figure)一个坐标轴(Axes)的轴线(Axis)如x轴, y轴等,用于标记和定位数据点。每个坐标轴由以下组成:
X轴(水平轴):表示水平方向上的数据范围。
Y轴(垂直轴):表示垂直方向上的数据范围。
通过控制坐标轴的范围、外观和标签,可以有效地可视化和解释数据。
4.4 Artist(图形元素)
基本上,Figure 上可见的一切都是图像元素(甚至是 Figure、Axes 和 Axis 对象)。这包括文本对象、Line2D 对象、集合对象、补丁对象等。渲染 Figure时,所有的图形元素都会绘制到画布上。大多数 图形元素都与一个坐标轴(Axes)绑定;这样的 图形元素不能被多个坐标轴(Axes)共享,也不能从一个坐标轴(Axes)移动到另一个坐标轴(Axes)。
常见的图形元素如:
- 图例(Legend):用于标识不同元素或数据系列的含义。它可以显示在图表的特定位置,并指示每个图例项与哪个元素或数据系列相关联。
- 网格(Grid):用于在坐标轴上添加网格线,以提供可视化参考。网格线可以水平和垂直跨越整个绘图区域,帮助读者更好地理解数据点的位置和分布。
- 标题(Title):用于为整个图表或特定坐标轴添加标题。标题可以说明整个图表的主题或坐标轴所表示的数据内容。
这些图形元素在Matplotlib中都有相应的方法和属性来控制它们的外观和位置,我们可以自定义它们的外观,以满足特定的需求和设计要求。
图形元素多种多样,具体的使用方法,在后续的系列中,当我们使用到的时候,再逐一说明;