爱心动画python_Python爱心动画GIF
之前写过一个在终端打印心形的程序,虽然看起来有点诡异。。。这次写一个爱心的GIF动画。
使用一个库gif, 可以制作matplotlib图表的gif动画。上面那个gif动画,是隐去了坐标轴了后的动画了。
正文
下面三个库,没安装的可以通过命令安装:
$pip install matplotlib
$pip install numpy
$pip install gif
实际代码:
import gif
import numpy as np
from matplotlib import pyplot as plt
# formula see https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427edn0q2vrnts
t = np.linspace(0, 6, 100)
x = 16 * np.sin(t) ** 3
y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)
## 绘制每一帧的图片
@gif.frame
def plot_love(x, y):
plt.scatter(x, y, 60, c="g", alpha=0.7, marker=r$heartsuit$)
plt.axis("off")
frames = []
for i in range(1, len(x)):
of = plot_love(x[:i], y[:i])
frames.append(of)
gif.save(frames, love.gif, duration=80)
代码解析
绘制心形的函数,可以见https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427edn0q2vrnts
通过心形函数,算出x,y对应的坐标值,plot_love函数本身是个普通的绘制散点图的函数,marker是设置成心形,通过plt.axis("off")用于去除坐标轴。如果一次性将所有数据(例子程序中共100个坐标数据)传入该函数,作图出来是完整的一张心形图,就向下面这样:
动画中的从一个小爱心,慢慢变成大爱心,实际就是第一次传一个坐标的数据去作图,然后依次增加直到所有数据都用完。把所有的图按照顺序合在一起做成gif动画,就是呈现了动画效果了。
@gif.frame装饰器是把将每个图片作图加载到内存中,通过for循环,确定每一帧的图片,保存到frames列表里,最后通过gif.save函数合在一起做成gif动画。
参考
之前写过一个在终端打印心形的程序,虽然看起来有点诡异。。。这次写一个爱心的GIF动画。 使用一个库gif, 可以制作matplotlib图表的gif动画。上面那个gif动画,是隐去了坐标轴了后的动画了。 正文 下面三个库,没安装的可以通过命令安装: $pip install matplotlib $pip install numpy $pip install gif 实际代码: import gif import numpy as np from matplotlib import pyplot as plt # formula see https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427edn0q2vrnts t = np.linspace(0, 6, 100) x = 16 * np.sin(t) ** 3 y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t) ## 绘制每一帧的图片 @gif.frame def plot_love(x, y): plt.scatter(x, y, 60, c="g", alpha=0.7, marker=r$heartsuit$) plt.axis("off") frames = [] for i in range(1, len(x)): of = plot_love(x[:i], y[:i]) frames.append(of) gif.save(frames, love.gif, duration=80) 代码解析 绘制心形的函数,可以见https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427edn0q2vrnts 通过心形函数,算出x,y对应的坐标值,plot_love函数本身是个普通的绘制散点图的函数,marker是设置成心形,通过plt.axis("off")用于去除坐标轴。如果一次性将所有数据(例子程序中共100个坐标数据)传入该函数,作图出来是完整的一张心形图,就向下面这样: 动画中的从一个小爱心,慢慢变成大爱心,实际就是第一次传一个坐标的数据去作图,然后依次增加直到所有数据都用完。把所有的图按照顺序合在一起做成gif动画,就是呈现了动画效果了。 @gif.frame装饰器是把将每个图片作图加载到内存中,通过for循环,确定每一帧的图片,保存到frames列表里,最后通过gif.save函数合在一起做成gif动画。 参考