Я пытаюсь создать пакет, который позволяет пользователям создавать графики на нескольких вспомогательных участках, а также имеет большой прозрачный график, охватывающий все остальные вспомогательные участки. У пользователя могут быть анимации на вспомогательных участках, при этом на заднем плане отображается график, который имеет отношение ко всем другим вспомогательным участкам (например, граничным условиям). Он работает хорошо, за исключением случая, когда пользователю могут потребоваться анимации как на многих вспомогательных участках, так и на большом прозрачном графике. Это упрощенная версия того, что у меня сейчас есть:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def init():
line1, = ax1.plot([], [])
line2, = ax2.plot([], [])
line3, = ax3.plot([], [])
return line1, line2, line3
def animate(i):
#show moving sine function in lower subplot
line1.set_data(x, np.sin(2*np.pi*x + 10*i))
line1.axes.axis([0, 5, -1, 1])
#show moving sine function in upper subplot
line2.set_data(x, np.sin(2*np.pi*x + 10*i))
line2.axes.axis([0, 5, -1, 1])
#show moving cosine function in large transparent plot
line3.set_data(x, np.cos(2*np.pi*x + 10*i))
line3.axes.axis([0, 5, -1, 1])
return line1, line2, line3
#create figure and subplots
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.4])
line1, = ax1.plot([], [])
ax2 = fig.add_axes([0.1, 0.5, 0.8, 0.4])
line2, = ax2.plot([], [])
#create axis in front with dimensions that span both subplots
ax3 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
#make background of large axis transparent
ax3.patch.set_alpha(0)
line3, = ax3.plot([], [])
#create x-data
x = np.linspace(0, 5, 100)
ani = animation.FuncAnimation(fig, animate, init_func= init, interval = 200, blit = True)
Если вы запустите его, это может сработать. Но если вы попытаетесь запустить его снова и снова, предыдущий кадр все равно может остаться во время анимации (он довольно непоследователен в зависимости от того, будет он работать или нет). Я предполагаю, что это связано с временем анимации и временем отображения двух графиков друг над другом, которые не синхронизируются, но я не уверен, как это исправить. Я попытался увеличить интервал, который помогает в этом случае, но если я увеличу количество x-данных, которые у меня есть, он снова синхронизируется. и передние сюжеты редки, я также испытываю искушение просто вызвать ошибку, если кто-то попытается это сделать. Однако тогда возникает вопрос, как мне указать, применил ли кто-то анимацию к определенному набору осей?