尝试使用matplotlib动画布朗运动时出现问题

时间:2018-11-11 05:21:50

标签: python matplotlib

我对使用Python编程真的很陌生,在我的最终项目中,我需要创建一个动画,其中10个点在空间中随机移动(布朗运动)。

我的老师给了我一些例子,但是我无法弄清楚为什么我的程序不能正常工作。错误提示:

  

“ _ included_frames frame_dir = os.path.dirname(frame_list [0]),

     

IndexError:列表索引超出范围”

对不起,如果我没有正确表达自己的意思,但是英语不是我的母语。

from math import *
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
import matplotlib.animation as animation

fig = plt.figure()
ax = plt.axes(projection='3d')

N=10
x=500*np.random.random(N)
y=500*np.random.random(N)
z=500*np.random.random(N)

def frame(w):
    ax.clear()


    x=x+np.random.normal(0.0,50.0,10)
    y=y+np.random.normal(0.0,50.0,10)
    z=z+np.random.normal(0.0,50.0,10)

    mensaje="Movimiento Browniano"
    plt.title(mensaje)
    ax.set_xlim3d(-500.0,500.0)
    ax.set_ylim3d(-500.0,500.0)
    ax.set_zlim3d(-500.0,500.0) 

    plot=ax.scatter3D(x, y, z, c='r')


    return plot


anim = animation.FuncAnimation(fig, frame, frames=100, blit=False)

anim.save( 'MovimientoBrowniano.html', fps=5 )

1 个答案:

答案 0 :(得分:0)

您的代码有两个主要问题。

    试图在您的函数中本地更改
  1. xyz。但是,您确实想更改在功能范围之外定义的变量。您可以通过全局声明它们来轻松地做到这一点:在函数中添加global x,y,z
  2. 您正在尝试将动画保存到html文件。那不是有效的视频格式。我不知道您在此定位的是哪种格式,但是常见的选择是动画gif,它可以由

    生成
    anim.save('MovimientoBrowniano.gif', writer = "pillow", fps=5 )