Python语言程序设计|基于Python-matplotlib 的动画绘制问题

最最简单的操作

import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.subplots()x = np.linspace(0,10,100) y = np.sin(x)while True: ax.plot(x,y) plt.pause(1) ax.cla() x += np.pi/30 y = np.sin(x)

有人会问,为什么不能直接 用 plot 替代 ax 呢?
好问题,你可以一试,会发现这玩意没法关掉 。。 当然ctrl + C等暴力手段是任何时候都ok的

Animation类 FuncAnimation
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation


fig 显示动画的figure对象
func 更新动画的函数(你得自己写的那一部分)
func函数的第一个参数为帧序号。
返回值是更新后的图形对象列表。
frames 由帧序号组成的列表
frames是数值时,相当于range(frames)
默认值为itertools.count 表示一个从0开始,步长为1的无限递归序列
init_func 开始帧序号
fargs 其他需要传递给func函数的参数
interval 以毫秒为单位的动画更新周期
repeat 布尔值,默认为True
repeat_delayint 默认为0,单位为毫秒,表示动画循环间隔。
blit 更新所有点或更新发生变化的点
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation fig = plt.figure() ax = fig.subplots()x = np.linspace(0,10,100) y = np.sin(x) ax.set_aspect(3) ax.plot(x,y,'-.',c='red',label="the old one") line = ax.plot(x,y,c='green') plt.legend()def fun(i): global x x += 0.1 y = np.sin(x) line[0].set_ydata(y) return lineanimation = FuncAnimation(fig,fun,interval=100) plt.show()

这就有两个问题需要解决一下
第一个:line到底是什么类型的东西
type(line)

明显,这就是。。列表。
第二个:set_data; set_xdata; set_ydata
你可以自己更改一下试试看,结果是显而易见的

ArtistAnimation 它的好处是你不要费尽心机去想一个可能 勾八 的函数了
它的坏处是
一个能用函数表示的动画 为什么要在新增一个列表才能表达呢?
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation fig = plt.figure() ax = fig.subplots()frames = [] x = np.linspace(0,np.pi*2,10) for i in range(20): x += np.pi*2/20 y = np.sin(x) frames.append(ax.plot(y,'-.',c='red'))animation = ArtistAnimation(fig,frames,interval=100) plt.show()

很好
现在只需要保存动画就圆满了
动画保存 .save()函数
filename 画文件名+后缀
fps 动画每秒的帧数默认值为 原动画的帧数
dpi 动画每英寸的点数 默认值为 原动画的点数
codec 编码格式 默认值为’h264’
animation.save("1.gif")

Python语言程序设计|基于Python-matplotlib 的动画绘制问题
文章图片

【Python语言程序设计|基于Python-matplotlib 的动画绘制问题】

    推荐阅读