matplotlib可以有效实现数据可视化,但是为了提供更加直观的理解,我们往往需要动态可视化,本文即介绍如何利用matplotlib实现动态可视化。
matplotlib.animation是一个使能在matplotlib中绘制动图的模块,FuncAnimation 是animation 的用于绘制动图的类,要让静态图表动起来就需要用到这个FuncAnimation类,它能够通过重复调用绘图函数产生动图。
详细信息可以参考 官方文档
动态可视化实现方式解析
调用的一般形式:
from matplotlib.animation import FuncAnimation
animator = FuncAnimation(fig, func)
fig :用于绘制、缩放图表的figure对象;
func :在每一帧调用的用于绘图的函数。第一个参数是帧中的下一个值,表示时间序列上的时间。
其他参数参见官方文档
由此可知,要实现动态可视化必需要有两部分工作:
一是必须要传入的第一个参数fig,也就是说我们需要预先创建一个figure对象,并在调用FuncAnimation时传入,最简单的创建方式如下:
fig, ax = plt.subplots()
也可以先创建画布,再添加轴:
fig = plt.figure()
ax = fig.add_axes()
需要注意的是,如果有需要应该设置各个轴的上下限,确保图像显示的完整和连贯,代码如下:
ax.set_xlim(-np.pi,np.pi)#x轴显示区间(-3.14,3.14)
ax.set_ylim(-1, 1)#y轴显示区间(-1,1)
二是必须传入的第二个参数func,这要求我们自己创建绘图的函数,输入必须包含帧数据,创建的应该是图像关于时间的函数,本处创建的函数为:
def update(frame):
'''绘制y = sin(x)图像'''
xdata.append(frame)#改变x轴数据
ydata.append(np.sin(frame))#随之改变y轴数据
ln.set_data(xdata, ydata)#绘图
return ln,#必须返回plot对象
动态可视化实现代码
一个简单的绘制y = sin(x)实现如下(原代码出处):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots() #创建画布
xdata, ydata = [], []
ln, = plt