Проблема с анимацией броуновского движения с помощью matplotlib - PullRequest
0 голосов
/ 11 ноября 2018

Я действительно новичок в программировании на Python, и в моем последнем проекте мне нужно создать эту анимацию, где 10 точек беспорядочно движутся в пространстве (броуновское движение).

Мой учитель привел мне несколько примеров, но я просто не могу понять, почему моя программа работает неправильно. Ошибка говорит:

"_ includes_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 голосов
/ 11 ноября 2018

Есть две основные проблемы с вашим кодом.

  1. x, y и z пытаются изменить локально в вашей функции.Однако вы действительно хотите изменить переменные, определенные вне области действия функции.Вы можете легко сделать это, объявив их глобально: Добавьте global x,y,z в вашу функцию.
  2. Вы пытаетесь сохранить анимацию в HTML-файл.Это не правильный формат видео.Я не знаю, на какой формат вы ориентируетесь, но распространенным вариантом будет анимированный GIF, который может быть создан с помощью

    anim.save('MovimientoBrowniano.gif', writer = "pillow", fps=5 )
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...