Как использовать matplotlib.animation при вызове из внешней функции - PullRequest
0 голосов
/ 10 июля 2019

Я решаю уравнение, используя методы конечных разностей, и хотел бы оживить решение.При настройке анимации формы:

import numpy as np
import matplotlib.animation as animation

dx = 0.1
x = np.linspace(0, 10, dx)
def time_step(p, dt, dx):
    return p + dt*f(p, dx)

def f(p, dx):
    ... #some spatial discretisation function 
    return p_updated

fig, ax = plt.subplots()
line, = ax.plot(x, p)

def update(i):
    global p, dt, dx
    p = time_step(p, dt dx)
    return line, 

ani = animation.FuncAnimation(fig, update, frames=np.arange(0, 10000, 1), blit=False, interval= 10, repeat = False)
plt.show()

, тогда она работает и правильно отображает анимацию.Однако мне нужно иметь возможность вызывать функцию из отдельного файла, и тогда она больше не работает.то есть:

import numpy as np
import matplotlib.animation as animation
from file1 import time_step

def anim(p, D, dt, dx, animate_now, x):
    if animate_now:
        fig = plt.figure(figsize=(15,9))
        ax = fig.add_subplot(111)

        line, = ax.plot(x, p)

        def animate(i):
            global p
            p = time_step(p, dt, D, dx)
            line.set_ydata(p)
            return line,

        ani = animation.FuncAnimation(fig, animate, np.arange(1, 200),
            interval=50)

        plt.show()
    return ani

и вызов функции anim из другого файла, тогда сообщение об ошибке будет просто «UnboundLocalError: локальная переменная« p », на которую ссылается перед присваиванием».Как исправить код так, чтобы это работало?

...