首先是关于位块传送:位块传送仅应用于轴的内容。它将影响轴的内部部分,但不会影响外轴装饰器。因此如果使用blit=True
轴装饰器未更新。或者反过来说,如果你想要更新比例,你需要使用blit=False
.
现在,在问题的情况下,这会导致这条线未被绘制。原因是这条线有它的animated
属性设置为True
。但是,默认情况下不会绘制“动画”艺术家。该属性实际上是用于位块传输;但如果不执行位图传输,将导致艺术家既不被绘制也不被位图传输。将此属性称为blit_include
或类似的东西以避免与其名称混淆。
不幸的是,它看起来也没有很好的记录。然而你发现评论源代码 saying
# if the artist is animated it does not take normal part in the
# draw stack and is not expected to be drawn as part of the normal
# draw loop (when not saving) so do not propagate this change
因此总的来说,除非您使用位块传输,否则可以忽略此参数的存在。即使使用位块传送,它也可以被忽略在大多数情况下,因为该属性无论如何都是在内部设置的。
总结这里的解决方案是不使用animated
并不要使用blit
.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], '-o')
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
ax.set_xlim(np.amin(xdata), np.amax(xdata))
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init)
plt.show()