python绘制三维GIF动图

最近利用 python 想绘制三维点的空间轨迹的增长的一个动图,于是到处去搜索好的方法。
想到两个办法,一是不断的刷新绘图曲的fig,每刷新一次就加入新增点的位置信息,但是没成功,可能是内存占用太大。
第二种办法就是参考了博客的二维gif图代码。
在他的基础上导入三维绘图包就可以了。

from mpl_toolkits.mplot3d import Axes3D

下面给出代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation
import numpy as np

fig=plt.figure(figsize=(10,10))
ax1 = Axes3D(fig)
ax1.plot3D([0,1],[0,1],[0,1], 'red')
x_track = np.zeros((1, 3))
x_track_s = np.array([.0,.0,.0])
theta = 0
def gen_path():
    global x_track_s,x_track,theta
    theta += 10*np.pi/180
    x = 6*np.sin(theta)
    y = 6*np.cos(theta)
    x_track_s +=[x,y,0.1]
    x_track = np.append(x_track, [x_track_s],axis=0)
    return x_track

def update(i):
    label = 'timestep {0}'.format(i)
    print(label)
    # 更新直线和x轴(用一个新的x轴的标签)。
    # 用元组(Tuple)的形式返回在这一帧要被重新绘图的物体
    x_track = gen_path()
    ax1.set_xlabel(label)

    ax1.plot3D(x_track[:, 0], x_track[:, 1], x_track[:, 2], 'blue')
    return ax1

if __name__ == '__main__':
    # FuncAnimation 会在每一帧都调用“update” 函数。
    # 在这里设置一个10帧的动画,每帧之间间隔200毫秒
    anim = FuncAnimation(fig, update, frames=np.arange(0, 10), interval=200)
    if len(sys.argv) > 1 and sys.argv[1] == 'save':
        anim.save('line.gif', dpi=80, writer='imagemagick')
    else:
        # plt.show() 会一直循环播放动画
        plt.show()

楼主是0.01基础代码学者,所以代码中肯定有一些不合理的内存浪费等等,还请见谅。运行效果:

你可能感兴趣的:(pyhton学习)