Первое, что касается блиттинга: блиттинг применяется только к содержимому осей. Это повлияет на внутреннюю часть осей, но не на внешние декораторы осей. Следовательно, при использовании blit=True
декораторы осей не обновляются. Или, наоборот, если вы хотите, чтобы шкала обновлялась, вам нужно использовать blit=False
.
Теперь в случае из вопроса это приводит к тому, что линия не проводится. Причина в том, что строка имеет атрибут animated
, установленный на True
. Однако «анимированные» художники не рисуются по умолчанию. Это свойство на самом деле предназначено для использования для блиттинга; но если блиттинг не выполняется, это приводит к тому, что художник не будет ни нарисован, ни моргнут. Возможно, было бы неплохо назвать это свойство blit_include
или что-то подобное, чтобы избежать путаницы с его именем.
К сожалению, похоже, что это также не очень хорошо задокументировано. Однако вы найдете комментарий в исходном коде , говорящем
# 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()