我已经使用FuncAnimation
的{{1}}方法实现了动画。
代码中没有错误,但我不知道问题出在哪里!
代码:
matplotlib.animation
输出:
PS 1: def visualization(self):
fig = plt.figure()
def animation_frame(i):
print(i)
trimmed_dist = self.get_distributions(i, self.window_size + i)
# create labels
label_no = len(trimmed_dist)
labels = []
for index in range(label_no):
from_ = index * self.bucket_length
to_ = (index + 1) * self.bucket_length
label = '{:.2f} - {:.2f}'.format(from_, to_)
labels.append(label)
#create bar chart
colors = plt.cm.Dark2(range(label_no))
plt.xticks(rotation=90)
plt.bar(x=labels, height=trimmed_dist, color=colors)
frames_no = len(self.percentages) - self.window_size
print('frames_no:', frames_no)
animation = FuncAnimation(fig, animation_frame, frames=frames_no, interval=1000)
return animation
的值为877。
PS 2:我认为问题在于可视化方法的返回。因此,我更改了代码,但仍无法正常工作。
答案 0 :(得分:1)
我相信您正在Jupyter笔记本中运行代码。在这种情况下,您应该在代码的开头添加%matplotlib notebook
。
作为参考,请尝试运行在this answer中可以找到的代码,以查看它是否为您运行。
编辑
我在笔记本中实现了部分代码。由于我不知道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)
结果是this。
我添加了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
的计算正确。