背景介绍:
Sugar 上次写过一篇《MATLAB 动画没有秘密》,这次是其姐妹篇:Python 动画也没有秘密。
但这个妹篇比姐姐要成熟很多,不仅说了如何用 Python 绘图、做动画,还由浅入深丰富了更多的知识内容。
想知道丰富了什么就请往下看吧!
Python 基本绘图
在做动画之前,先用下面的例子来看下 Python 是怎样绘图的:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
fig = plt.figure(tight_layout=True)
plt.plot(x,y)
plt.grid(ls="--")
plt.show()
Sugar 在 Thonny IDE 下的效果是这样的:
【解读】
1、linspace()
函数与 MATLAB 的同名函数作用相同,可以参考《MATLAB 动画没有秘密》;
2、tight_layout = True
是让绘图自动紧凑布局,以免文字遮挡图线,详细请参考《matplotlib 进阶之Tight Layout guide》
3、ls="--"
这个 ls 指的是 linestyle
,指定图线的线型(与 MATLAB 非常类似),详细请参考《matplotlib绘图线条样式和线条颜色》、《Python可视化中Matplotlib(线条的详细样式及线型、保存图片、plot的详细风格和样式)、背景色、点和线的详细设置》
需要注意的是本例的 ls="--"
设定提网格线型,这一点 Sugar 觉得比 MATLAB 要灵活。
Python 基本动画
试一试下面的例子:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def update_points(num):
'''
更新数据点
'''
point_ani.set_data(x[num], y[num])
return point_ani,
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
fig = plt.figure(tight_layout=True)
plt.plot(x,y)
point_ani, = plt.plot(x[0], y[0], "ro")
plt.grid(ls="--")
# 开始制作动画
ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=100, blit=True)
# ani.save('sin_test2.gif', writer='imagemagick', fps=10)
plt.show(