我正在策划一个动画,我想看看动画在观看时的时间/步骤。
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
cax1 = ax1.matshow(coherence_matrices[0], cmap='YlOrRd')
time = ax1.annotate(0, xy=(1, 8), xytext=(1, 8))
def animate(i):
cax1.set_array(coherence_matrices[i])
time.set_text(i)
return time, cax1
anim = animation.FuncAnimation(fig, animate,
frames=int((4000-window_size)/window_step), interval=80, blit=True)
plt.show()
我只想出了这个解决方案,它应该在直方图上显示迭代编号,但什么都没有出现。我想知道什么是错的,而有一种更简单的方法可以在动画中看到计时器。
非常感谢先进。
答案 0 :(得分:1)
我想你已经确定annotate
的坐标实际上并不在图中,这也可能是对未显示文本的解释。
打开blitting时出现问题。有两种可能导致不显示文本的相同效果:
1.如果文本在轴内,则它将被matshow对象隐藏
2.如果文本在轴外,则根本不会显示。
现在有两种解决方案。
简单地关闭blitting:
anim = animation.FuncAnimation(fig, animate, ...., blit=False)
如果您确实需要使用blitting(因为动画太慢了),您可以使用另一个轴来放置文本标签。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
coherence_matrices = np.random.rand(80,3,3)
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
# add another axes at the top left corner of the figure
axtext = fig.add_axes([0.0,0.95,0.1,0.05])
# turn the axis labels/spines/ticks off
axtext.axis("off")
cax1 = ax1.matshow(coherence_matrices[0], cmap='YlOrRd')
# place the text to the other axes
time = axtext.text(0.5,0.5, str(0), ha="left", va="top")
def animate(i):
cax1.set_array(coherence_matrices[i])
time.set_text(str(i))
return cax1, time,
anim = animation.FuncAnimation(fig, animate, frames=len(coherence_matrices),
interval=80, blit=True)
plt.show()