1、Matplotlib生成动画
Matplotlib 不仅可以绘图, 还可以生成动画。负责生成动画的函数是 FuncAnimation, 使用前需先将其导入:
from matplotlib.animation import FuncAnimation
指定位置嵌入图片
控制图片的位置和大小是由 origin 和 extent 两个参数来实现的。origin 有 “upper” 和 “lower” 两个取值,决定了图片是正着的还是倒着的。extent=(L, R, B, T) 则决定了图片的边界坐标,L, R, B, T 分别代表了图片的最左端,最右端,最底端,最上端的坐标。
下面一个 demo 演示了如何设置图片的指定位置。超级马里奥位于一个 10x10的格子中,他需要从左下角走到右上角,从而吃到能让自己变大变强的蘑菇。
1 import matplotlib.pyplot as plt 2 from matplotlib.animation import FuncAnimation 3 import numpy as np 4 from PIL import Image 5 6 # 读取图片 7 mario_img = Image.open('mario.png') 8 mushroom_img = Image.open('mushroom.png') 9 10 # 设置画布 11 fig, ax = plt.subplots() 12 plt.axis('off') 13 14 ax.set_xlim(-0.5, 10.5) 15 ax.set_ylim(-0.5, 10.5) 16 17 ax.vlines(np.arange(11), 0, 10) 18 ax.hlines(np.arange(11), 0, 10) 19 20 # 画蘑菇 21 mushroom = ax.imshow(mushroom_img, extent=(9, 10, 9, 10)) 22 23 # 画马里奥 24 mario_x = 1 25 mario_y = 1 26 mario = ax.imshow(mario_img, extent=(mario_x - 1, mario_x, mario_y - 1, mario_y)) 27 28 29 def move(): 30 global mario_x, mario_y 31 if mario_x == 10 == mario_y: # 吃到蘑菇了噢 32 mario_x = mario_y = 1 33 return True 34 elif mario_x == 10: 35 mario_y += 1 36 elif mario_y == 10: 37 mario_x += 1 38 else: 39 if np.random.random() < 0.5: 40 mario_x += 1 41 else: 42 mario_y += 1 43 44 return False # 还没吃到蘑菇呢! 45 46 47 def init(): 48 pass 49 50 def update(frame): 51 mario.set_extent((mario_x - 1, mario_x, mario_y - 1, mario_y)) 52 53 # 若吃到蘑菇则隐藏蘑菇,避免两张图片重叠,更好看一点 54 if move(): 55 mushroom.set_alpha(0) 56 else: 57 mushroom.set_alpha(1) 58 59 60 61 ani = FuncAnimation(fig, update, frames=range(180), blit=False, interval=300, 62 repeat=False, init_func=init) 63 64 ani.save('mario_like_mushroom.gif')
效果如下:
可用图片:
标签:10,set,mushroom,mario,蘑菇,ax,有趣,马里奥 From: https://www.cnblogs.com/Zhouce/p/18006176