如果初始帧中的所有条目都包含相同的值,我似乎无法获得图像的TimedAnimation
动画来显示任何内容。例如,如果指示的行仍然被注释掉,则以下内容不显示任何内容。更改第一帧以包含np.ones(self.shape)
也不会产生任何影响。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
class MyAnimation(anim.TimedAnimation):
def __init__(self):
fig = plt.figure()
self.shape = (10, 10)
data = np.zeros(self.shape)
# data.flat[0] = 1 # uncomment this to get the animation to display
self.ax = plt.imshow(data)
super(self.__class__, self).__init__(fig, interval=50, blit=True)
def _draw_frame(self, framedata):
data = np.random.rand(*self.shape)
self.ax.set_data(data)
def new_frame_seq(self):
return iter(range(100))
ani = MyAnimation()
关闭blitting似乎没有任何效果。改变后端似乎也没有任何区别;我尝试了Qt4Agg和nbagg(后者通过Jupyter笔记本4.1.0)得到了相同的结果。我使用numpy 1.10.4和matplotlib 1.5.1和Python 2.7.11。
是否有预期的上述行为?如果没有,当第一帧是空白或实心图像时,我是否应该采取措施让动画显示?
答案 0 :(得分:1)
设置数据不会重新计算颜色限制。在所有输入值相同的情况下,min / max被自动缩放到相同的值,因此您永远不会看到数据被更新。您可以在init
上明确设置限制import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
class MyAnimation(anim.TimedAnimation):
def __init__(self, ax=None):
if ax is None:
fig, ax = plt.subplots()
self.shape = (10, 10)
data = np.zeros(self.shape)
self.im = ax.imshow(data, vmin=0, vmax=1)
super(self.__class__, self).__init__(ax.figure, interval=50, blit=True)
def _draw_frame(self, framedata):
data = np.random.rand(*self.shape)
self.im.set_data(data)
def new_frame_seq(self):
return iter(range(100))
ani = MyAnimation()
或在self.im.set_clim
方法中使用_draw_frame
。
我也不确定子类TimedAnimation
是否是您尝试做的最简单方法(FuncAnimation
非常灵活)。