Matplotlib 绘制一条螺旋曲线

使用Matplotlib绘制一条螺旋曲线,如下图:

Matplotlib 绘制一条螺旋曲线

跟前面的例子是一样的,采用回调函数的方式来实现,首先要导入动画库:

from matplotlib import animation

这样就可以使用animation的功能了,最重要的是使用animation.FuncAnimation和animation.FFMpegWriter函数。

接着定义重复时的清空函数:

def init():
global xdata, ydata
xdata, ydata = [], []
line.set_data([], [])
return line,

每次重复开始时,需要把全局变量xdata和ydata清空,否则绘图数据已经在变量里,就看不到绘图更新了,因为一次性就已经把整个图绘完了。这里调用set_data函数来清空绘图区域。

再定义动画更新函数:

def animate(i):

# t 帧序号
t = 0.1 * i

# x, y 绘图
x = t * np.sin(t)
y = t * np.cos(t)

# 增加到列表,连接起所有点。
xdata.append(x)
ydata.append(y)
line.set_data(xdata, ydata)

return line,

在这段代码里,通过帧号的改变来计算参数t,而参数t用来计算圆的坐标,再把这个坐标添加全局变量里保存,最后根据所有坐标点进行绘图,就可以不断地更新图案。

anim = animation.FuncAnimation(fig, animate, init_func = init,

frames = 500, interval = 20, blit = True)

这行代码是设置动画回调函数,fig是绘图区域,animate是回调更新函数,init是重复时调用的函数,frames是500帧长度,interval是间隔20毫秒更新一帧。

把前面的代码进行综合,就可以构造成完整的例子:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

plt.rcParams['animation.ffmpeg_path'] = r'D:\ffmpeg-2020-12-20\bin\ffmpeg.exe'


# 创建绘图轴对象,创建一个空白窗口
fig = plt.figure() 
axis = plt.axes(xlim =(-50, 50), ylim =(-50, 50)) 
line, = axis.plot([], [], lw = 2) 
#创建全局数据保存列表
xdata, ydata = [], []
#定义每次重复清空函数
def init():
    global xdata, ydata
    xdata, ydata = [], []
    line.set_data([], []) 
    return line,
#每帧动画更新函数
def animate(i): 
    # t 帧序号
    t = 0.1 * i 

    # x, y 绘图 
    x = t * np.sin(t) 
    y = t * np.cos(t) 

    # 增加到列表,连接起所有点。
    xdata.append(x) 
    ydata.append(y) 
    line.set_data(xdata, ydata) 

    return line, 

anim = animation.FuncAnimation(fig, animate, init_func = init,
                               frames = 500, interval = 20, blit = True) 

#保存的动画视频文件名为当前文件夹下的ani-055.mp4,帧率为20帧每秒,格式为MP4。
FFwriter = animation.FFMpegWriter(fps=20, extra_args=['-vcodec', 'libx264'],
                                  metadata = {'title':'demo', 'artist':'蔡军生'})
anim.save('ani-055.mp4', writer = FFwriter)

plt.show()  # 会一直循环播放动画

当你运行完成时,就可以到源码所在的目录找到ani-055.mp4文件,点击播放就可以看到整个动画过程的视频了。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程