例1.实现移动的正弦曲线
from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
fig, ax = plt.subplots()
x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))
def animate(i):
line.set_ydata(np.sin(x + i/10.0))
return line,
def init():
line.set_ydata(np.sin(x))
return line,
ani = animation.FuncAnimation(fig=fig,
func=animate,
frames=None,
init_func=init,
interval=1,
blit=False)
plt.show()
注意ani虽然用不到,但不知道为什么不赋值不会实现动画效果。
例2.闪烁的散点图
from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
fig, ax = plt.subplots()
x = np.arange(0, 2*np.pi, 0.5)
line = ax.scatter(x, np.sin(x), c='black')
def animate(i):
if i%2:
color = 'black'
else:
color = 'white'
next_line = ax.scatter(x, np.sin(x), c=color)
return next_line
def init():
return line
ani = animation.FuncAnimation(fig=fig,
func=animate,
frames=None,
init_func=init,
interval=1000,
blit=False)
def save_as_gif():
import os
writer = animation.FFMpegWriter()
ani.save('line.mp4',writer = writer)
os.system("ffmpeg -i line.mp4 line.gif")
save_as_gif()
plt.show()
每隔1000毫秒,颜色在白与黑间变换一次,实现闪烁效果。
要保存图片需要安装ffmpeg并且配置到环境变量中。
line.gif
例3.多个子图实现动画效果
from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
fig = plt.figure()
ani_list = []
def paint(index):
ax = fig.add_subplot(3,1,index)
x = np.arange(0, 2*np.pi, 0.5)
line = ax.scatter(x, np.sin(x), c='black')
def animate(i):
if (i+index) % 2:
color = 'black'
else:
color = 'white'
next_line = ax.scatter(x, np.sin(x), c=color)
return next_line
def init():
return line
ani = animation.FuncAnimation(fig=fig,
func=animate,
frames=None,
init_func=init,
interval=1000,
blit=False)
ani_list.append(ani)#no animation if this line removed
for i in range(3):
paint(i+1)
plt.show()
网友评论