matplotlib-动态更新显示内容

知识点

在matplotlib中画图有两种显示模式:

(1)阻塞模式,即必须利用plt.show()显示图片,且图片关闭之前代码将阻塞在该行。

(2)交互模式,即plt.plot()后立马显示图片,且不阻塞代码的继续运行。

Matplotlib中默认是使用阻塞模式。用到的matplotlib中的几个函数:

1
2
3
4
5
plt.ion():打开交互模式
plt.ioff():关闭交互模式
plt.clf():清除当前的Figure对象
plt.cla():清除当前的Axes对象
plt.pause():暂停功能

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from mpl_toolkits.mplot3d import Axes3D

# 解决中文乱码问题
myfont = fm.FontProperties(fname="simsun.ttc", size=14)
matplotlib.rcParams["axes.unicode_minus"] = False


def simple_plot():
"""
simple plot
"""
# 生成画布
plt.figure(figsize=(8, 6), dpi=80)

# 打开交互模式
plt.ion()

# 循环
for index in range(10):
# 清除原有图像
plt.cla()

# 设定标题等
plt.title("动态曲线图", fontproperties=myfont)
# 网格线
plt.grid(True)

# 生成测试数据
x = np.linspace(-np.pi + 0.1*index, np.pi+0.1*index, 256, endpoint=True)
y_cos, y_sin = np.cos(x), np.sin(x)

# 设置X轴
plt.xlabel("X轴", fontproperties=myfont)
plt.xlim(-4 + 0.1*index, 4 + 0.1*index)
plt.xticks(np.linspace(-4 + 0.1*index, 4+0.1*index, 9, endpoint=True))

# 设置Y轴
plt.ylabel("Y轴", fontproperties=myfont)
plt.ylim(-1.0, 1.0)
plt.yticks(np.linspace(-1, 1, 9, endpoint=True))

# 画两条曲线
plt.plot(x, y_cos, "b--", linewidth=2.0, label="cos示例")
plt.plot(x, y_sin, "g-", linewidth=2.0, label="sin示例")

# 设置图例位置,loc可以为[upper, lower, left, right, center]
plt.legend(loc="upper left", prop=myfont, shadow=True)

# 暂停
plt.pause(0.1)

# 关闭交互模式
plt.ioff()

# 图形显示
plt.show()
return


simple_plot()