Matplotlib之animation动画
程序员文章站
2022-02-16 19:22:56
...
用animation画一个y=sin(x)的动画函数。
代码如下:
-
from numpy import *
-
import matplotlib.pyplot as plt
-
from matplotlib import animation
-
-
fig,ax=plt.subplots() #相当于fig=plt.figure(),ax=plt.subplot();ax=plt.subplot也可以是ax=fig.add_subplot()
-
x=arange(0,2*pi,0.01)
-
line,=ax.plot(x,sin(x))
-
-
def update(i):
-
line.set_ydata(sin(x+i/10))
-
return line,
-
def init():
-
line.set_ydata(sin(x))
-
return line,
-
-
ani=animation.FuncAnimation(fig=fig,func=update,frames=100,init_func=init,interval=20,blit=False)
-
plt.show()
注:
- fig,ax=plt.subplots() #相当于fig=plt.figure(),ax=plt.subplot();ax=plt.subplot也可以是ax=fig.add_subplot():
fig=plt.figure()表示为当前这个画布命名为fig
ax=plt.subplot()或ax=fig.add_subplot()表示将当前画布进行分割,默认分割成1行1列,ax在第一个画布。
- line,=ax.plot(x,sin(x)) ;接收这个函数的返回值是为什么要加个逗号:
plot()函数的返回值是一个列表,列表中只有一个元素,‘line,’表示取列表中的第一个值。‘line,’这种形式只能用于序列长度为1的情况下,其他情况会报错,请看下面的例子:
-
>>> #例一
-
>>> list1=[1]
-
>>> a1=list1 #a1为一个列表
-
>>> a2,=list1 #a2为列表中的元素
-
>>> a1
-
[1]
-
>>> a2
-
1
-
-
>>> #例二
-
>>> list2=[1,2]
-
>>> a,b=list2
-
>>> a
-
1
-
>>> b
-
2
-
>>> e,=list2
-
Traceback (most recent call last):
-
File "<pyshell#11>", line 1, in <module>
-
e,=list2
-
ValueError: too many values to unpack (expected 1)
line,=ax.plot(x,sin(x))这个语句相当于:line=ax.plot(x,sin(x)),line=line[0]。这样line就表示这个2D函数线,可以通过line.set_ydata()和line.set_xdata()来修改原来定义的这个函数。例如:
-
import matplotlib.pyplot as plt
-
from numpy import *
-
x=linspace(0,3)
-
y=x**3
-
plt.xlim(0,3)
-
plt.ylim(0,2)
-
line=plt.plot(x,y)
-
line[0].set_xdata(y) #修改自变量x
-
line[0].set_ydata(x) #修改y值
-
plt.show()
运行结果如下:
- FuncAnimation函数:ani=animation.FuncAnimation(fig=fig,func=update,frames=100,init_func=init,interval=20,blit=False):
1.fig:绘制动画的画布
2.func:动画函数
3.frams:动画长度,一次循环包含的帧数,在函数运行时,其值会传给动画函数update(i)的形参i
4.init_func:动画的起始状态
5.interval:更新频率,interval=20表示每隔20ms从头来一次
6.blit:是否更新整张图,False表示更新整张图,True表示只更新有变化的点。mac用户请使blit=False。
原文链接:https://blog.csdn.net/beautiful77moon/article/details/97559622
上一篇: 十一、Matplotlib——Animation 动画
下一篇: 倍道而行:选择排序