В настоящее время я использую функцию FuncAnimation matplotlib и столкнулся с проблемой. Мой код следует аналогичной логике с кодом ниже
import matplotlib.animation as animation
import matplotlib.pyplot as plt
class Example:
def __init__(self):
self.fig = plt.figure()
def update(self, num):
print("This is getting called")
def animate(self):
ani = animation.FuncAnimation(self.fig, update, interval=100)
def main():
obj = Example()
obj.animate()
if __name__ == "__main__":
main()
На данный момент мой код не печатает "Это вызвано". Я попытался передать в self.update вместо обновления в FuncAnimation, но безрезультатно. Я также попытался написать глобальное обновление перед вызовом функции FuncAnimation, которая также не работает. Мне интересно, может ли кто-нибудь помочь мне.
Ответ @ReblochonMasque верен, говоря, что вам нужно фактически показать фигуру, используя plt.show()
.
Однако вам не нужно ничего возвращать из анимационной функции (если вы не хотите использовать blitting, и в этом случае вам нужно будет вернуть итерабельность Artists
для blit).
А также, если вы сделаете свою FuncAnimation
класса FuncAnimation
переменной (self.ani
), она гарантирует возможность вызова show()
в любой точке, а не только внутри функции анимации.
import matplotlib.animation as animation
import matplotlib.pyplot as plt
class Example:
def __init__(self):
self.fig, self.ax = plt.subplots()
def update(self, i):
print("This is getting called {}".format(i))
self.ax.plot([i,i+1],[i,i+2])
def animate(self):
self.ani = animation.FuncAnimation(self.fig, self.update, interval=100)
def main():
obj = Example()
obj.animate()
plt.show()
if __name__ == "__main__":
main()
Ваш метод анимации (self) должен возвращать кортеж.
Вам также нужно показать сюжет.
import matplotlib.animation as animation
import matplotlib.pyplot as plt
class Example:
def __init__(self):
self.fig = plt.figure()
def update(self, num):
print(f"This is getting called {num}")
return num,
def animate(self):
ani = animation.FuncAnimation(self.fig, self.update, interval=100)
plt.show()
def main():
obj = Example()
obj.animate()
if __name__ == "__main__":
main()
update
. Однако возвращатьnum
не имеет никакого смысла, либо возвращать итерируемое изmatplotlib.artist.Artist
s, либо ничего, но не случайную вещь. Суть в том, чтобы действительно показать сюжет. Кроме того, я бы посоветовал сделать переменную классаani
, которая позволяет вызыватьplt.show()
также вне метода экземпляра.