如果第一帧中的所有条目都相同,则不会显示 matplotlib 图像动画
matplotlib image animation not displayed if all entries in first frame are identical
如果初始帧中的所有条目都包含相同的值,我似乎无法获得图像的 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 notebook 4.1.0),结果相同。我正在使用 numpy 1.10.4 和 matplotlib 1.5.1 Python 2.7.11.
上述行为是否符合预期?如果不是,我是否应该做些什么来让动画在第一帧是空白或纯色图像时显示?
设置数据不会重新计算颜色限制。在所有输入值都相同的情况下,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()
或在_draw_frame
方法中使用self.im.set_clim
。
我也不确定子类化 TimedAnimation
是完成您想要做的事情的最简单方法(FuncAnimation
非常灵活)。
如果初始帧中的所有条目都包含相同的值,我似乎无法获得图像的 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 notebook 4.1.0),结果相同。我正在使用 numpy 1.10.4 和 matplotlib 1.5.1 Python 2.7.11.
上述行为是否符合预期?如果不是,我是否应该做些什么来让动画在第一帧是空白或纯色图像时显示?
设置数据不会重新计算颜色限制。在所有输入值都相同的情况下,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()
或在_draw_frame
方法中使用self.im.set_clim
。
我也不确定子类化 TimedAnimation
是完成您想要做的事情的最简单方法(FuncAnimation
非常灵活)。