Я полагаю, вы запускаете свой код в записной книжке Jupyter. В этом случае вы должны добавить %matplotlib notebook
в начале вашего кода. В качестве справки попробуйте запустить код, который вы можете найти в этом ответе , чтобы проверить, работает ли он для вас.
EDIT
Я реализовал часть вашего кода в записной книжке. Поскольку я не знаю, что такое self.percentages
, self.window_size
, self.get_distributions
и self.bucket_length
и какие у них значения, я установил labels = ['a', 'b', 'c']
и trimmed_dist = [3*i, 2*i, i**2]
для простоты, чтобы запустить простую анимацию. Это мой код:
%matplotlib notebook
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
def animation_frame(i):
plt.gca().cla()
labels = ['a', 'b', 'c']
trimmed_dist = [3*i, 2*i, i**2]
label_no = len(trimmed_dist)
colors = plt.cm.Dark2(range(label_no))
plt.xticks(rotation=90)
plt.bar(x=labels, height=trimmed_dist, color=colors)
plt.title(f'i = {i}') # this replaces print(i)
plt.ylim([0, 100]) # only for clarity purpose
fig = plt.figure()
frames_no = 877
print('frames_no:', frames_no)
animation = FuncAnimation(fig, animation_frame, frames=frames_no, interval=1000)
И это результат.
Я добавил plt.gca().cla()
, чтобы стирать предыдущий кадр на каждой итерации. Оператор print(i)
у меня тоже не работает, поэтому я заменяю его на plt.title(f'i = {i}')
, чтобы написать i
в заголовке. Напротив, print('frames_no:', frames_no)
работает правильно.
Как видите, моя анимация работает, поэтому попробуйте реализовать изменения, которые я внес в ваш код. Если анимация по-прежнему не запускается, попробуйте проверить значения и типы self.percentages
, self.window_size
, self.get_distributions
и self.bucket_length
, чтобы убедиться, что labels
и trimmed_dist
вычисляются правильно.