Я пытался создать анимацию, используя pcolormesh, но у моего кода были проблемы, поэтому я решил использовать один из ответов в этом посте в качестве отправной точки.В ответе было слишком много графиков, и мне нужна была только pcolormesh, поэтому я удалил ненужные графики.Загадочная вещь в том, что удаление графиков по какой-то причине нарушило анимацию.Я сделал минимальный пример, который содержит pcolormesh и текст.Код работает, пока я не комментирую обновление текста, но я не могу понять, почему.
Мои вопросы следующие: есть ли причина, по которой pcolormesh не будет обновляться в некоторых сценариях?Как я могу исправить анимацию без добавления других графиков или текста?
Примечание. Я использую OSX, у которого есть некоторые проблемы с опцией blit.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
y, x = np.meshgrid(np.linspace(-10, 10,100), np.linspace(-10, 10,100))
z = np.sin(x)*np.sin(x)+np.sin(y)*np.sin(y)
fig = plt.figure(figsize=(16, 8),facecolor='white')
ax = plt.subplot()
quad = ax.pcolormesh(x,y,z,shading='gouraud')
ax.set_xlabel('time')
ax.set_ylabel('amplitude')
cb = fig.colorbar(quad,ax=ax)
time_text = ax.text(0.02, 0.95, 'start', transform=ax.transAxes)
def animate(iter):
z = np.sin(x-iter/(2*np.pi))*np.sin(x-iter/(2*np.pi))+np.sin(y)*np.sin(y)
time_text.set_text(str(iter)) #comment this line to break the animation
quad.set_array(z.ravel())
anim = animation.FuncAnimation(fig,animate,frames=100,interval=50,blit=False,repeat=False)
plt.show()
Редактировать: как былоуказал в комментариях, это было связано с бэкэндом.Мои обновленные вопросы: почему этот код не работает для некоторых бэкэндов?Разве поведение pcolormesh не должно зависеть от добавленного текста?