参数配置
为了让图片可以显示中文,需要有必要的参数配置
plt.rcParams['font.sans-serif'] = 'SimHei' # 可以显示中文
plt.rcParams['axes.unicode_minus'] = False # 可以显示负号
1. plt.figure()创建画布
x = np.linspace(-1,1,20)
y = 2*x + 1
plt.figure(num = "figure1") # 创建名为figure1的画布
plt.plot(x, y,linestyle = ":",marker = "o") # 绘制图像
plt.figure(num = "figure2", # 创建名为figure2的画布
figsize=(50,50))
plt.plot(x, x**2,":",marker = "o") # 绘制图像
plt.show() # 展示两个画布
-
上述代码完成的工作为: 将
y = 2*x+1
在画布figure1中进行展示,y=x**2
在画布figure2中进行展示 -
plt.figure()
的参数设置num
设置画布的名称figsize(a, b)
设置画布的尺寸
-
使用
plt.figure()
方法就是创建了画布,后续的画图操作都是在这个画布上进行的。代码中出现多个plt.figure()
方法就会创建多个画布,使用plt.show()
时,会呈现多个画布。
2.绘制多子图
-
使用
plt.subplot(a, b, c)
绘制子图plt.figure('image') plt.subplot(2, 2, 4) # 将画布视作2*2子画布,在第四个中作画 plt.plot([0, 1]) plt.title('title 1 ') plt.subplot(2, 1, 1) # 将画布视作2*1子画布,在第一个中作画 plt.plot(np.arange(10)) plt.title('title 2 ') plt.subplot(2, 2, 3) # 将画布视作2*2子画布,在第三个中作画 plt.plot(np.arange(10)) plt.title('title3') plt.suptitle('subplot') # 设置画布的总标题 plt.show()
plt.subplot(a, b, c)
用于选中画布, 后续操作在选中的画布中进行a , b
: 表示将整个画布分为 a*b个子画布,并按照从左到右,从上到下的顺序为各子画布依次编号为 $ 1, 2, 3, \dots, a*b $c
: 表示选中第几号画布进行作画- 每一次选中字画布时的分割方法并不影响下一次画布分割,从而可以实现不同的子画布拥有不同的大小尺寸,不同的坐标轴属性
-
使用
gridspec.GridSpec(a ,b)
绘制子图import matplotlib.gridspec as gridspec plt.figure() gs = gridspec.GridSpec(3, 3) # 创建3x3的图框 ax1 = plt.subplot(gs[0, :]) # 第一行的所有列设为第一个图区域 ax2 = plt.subplot(gs[1, :2]) # 第二行的0,1两列为第二个图区域 ax3 = plt.subplot(gs[2, 2]) # 第三行第三列为第三个图区域 plt.show()
-
gridspec.GridSpec(a, b)
: 创建了一个a * b的图框,并返回matplotlib.gridspec.GridSpec
类 -
plt.subplot(gs[x, y])
:用于选中要使用的区域-
gs[x-1, y-1]
: 表示选中第x行 第y列为画图区域 -
gs[x-1, :y]
: 表示选中第x行 前y列为画图区域gs[x, y]选中区域时,x表示行选中,y表式列选中,行列都支持切片操作
-
-
3. 绘制次坐标轴
x = np.arange(0,10,0.1)
y1 = 0.05*x**2
y2 = -y1 # 准备数据
fig, ax1 = plt.subplots()
# 获取一个画布对象和一个Axes对象,ax1为主坐标轴
ax2 = ax1.twinx()
# 创建次坐标轴
# 对ax1进行绘制
ax1.plot(x,y1,'g')
ax1.set_ylabel('y1',color = 'g')
# 对ax2进行绘制
ax2.plot(x,y2,'r')
ax2.set_ylabel('y2',color = 'r')
plt.show() #显示
-
plt.subplots()
: 有两个返回值,一个是Figure对象,一个是Axes对象 -
ax.twinx()
: 返回一个Axes对象,该对象同ax使用同一个x轴,可自定义y轴 -
ax.twiny()
: 返回一个Axes对象,该对象同ax使用同一个y轴,可自定义z轴在三维坐标系中的 Axes3D对象有着类似的用法
4. 动态数据展示
-
使用
plt.cla() plt.pause()
实现动态数据展示import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) y = np.sin(x) for i in x: plt.scatter(i, np.sin(i)) plt.plot(x, y) plt.pause(0.1) # 图片显示0.1秒 plt.cla() #清空画布
plt.pause()
: 暂停显示图片的当前状态plt.cla()
: 清空画布- 上述代码的实现逻辑是:暂定0.1秒展示当前的状态,然后清空画布更新数据点,再暂停展示如此以往复循环,实现动态展示的效果
- 如果不使用
plt.cla()
, 显示的结果是数据点不断加入图画中,plt.pause()
只是对这个加入过程进行放慢展示而已
Matplotlib提供Animation模块进行动画展示,比较复杂,灵活运用plt.pause() 以及 plt.cla()足够应对多数问题
如有错误,还请指正,持续更新ing