绘制动画时间

时间:2017-02-03 15:02:18

标签: python python-3.x animation matplotlib plot

我正在策划一个动画,我想看看动画在观看时的时间/步骤。

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()

我只想出了这个解决方案,它应该在直方图上显示迭代编号,但什么都没有出现。我想知道什么是错的,而有一种更简单的方法可以在动画中看到计时器。

非常感谢先进。

1 个答案:

答案 0 :(得分:1)

我想你已经确定annotate的坐标实际上并不在图中,这也可能是对未显示文本的解释。

打开blitting时出现问题。有两种可能导致不显示文本的相同效果:
1.如果文本在轴内,则它将被matshow对象隐藏 2.如果文本在轴外,则根本不会显示。

现在有两种解决方案。

(a)不要使用blitting。

简单地关闭blitting:

anim = animation.FuncAnimation(fig, animate, ...., blit=False) 

(b)使用其他轴。

如果您确实需要使用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()