Возможно ли создавать анимацию наложенных графиков в matplotlib? - PullRequest
1 голос
/ 09 октября 2019

Я пытаюсь создать программу, которая позволит пользователям строить графики на нескольких вспомогательных участках вместе с большим графиком, который накладывается на все вспомогательные участки. Теперь у пользователя есть возможность анимировать свои графики, если они этого хотят. Кажется, что анимация работает хорошо, когда анимация выполняется на нескольких маленьких вспомогательных участках, а также при анимации большого графика с неподвижными фигурами на меньших вспомогательных участках. Проблема возникает, однако, в том случае, если пользователь хочет разместить анимацию как на меньших, так и на больших общих участках (это не должно происходить часто, но может возникнуть по любой причине). Вот пример того, что у меня есть:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def animate_graph(fig, ax, x, y):
    line, = ax.plot([], [])

    def init():
        line, = ax.plot([], [])
        return line,     

    def animate(i, x, y):
        x = x[:int(i+1)]
        y = y[:int(i+1)]
        line.set_data(x, y)
        line.axes.axis([0, 5, -1, 1])

        return line, 

    ani = animation.FuncAnimation(fig, animate, init_func= init, interval = 20, fargs = [x, y], blit = True)                         

#create figure and subplots
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.4])
ax2 = fig.add_axes([0.1, 0.5, 0.8, 0.4])

#create axis in front with dimensions that span both subplots
ax_full = fig.add_axes([0.1, 0.1, 0.8, 0.8])
#make background of large axis transparent
ax_full.patch.set_alpha(0)

#create data arrays
x = np.linspace(0, 5, 100)
y1 = np.sin(2*np.pi*x)
y2 = np.cos(2*np.pi*x)
y_full = [0.5 if i < 2.5 else -0.5 for i in x]

#call animation function
animate_graph(fig, ax1, x, y1)
animate_graph(fig, ax2, x, y2)
animate_graph(fig, ax_full, x, y_full)

Это работает, когда я вызываю animate_graph первые два раза, но если я добавлю третий вызов animate_graph, анимация станет очень нервной и не синхронизированной по времени. Я предполагаю, что это потому, что matplotlib сталкивается с проблемой синхронизации между синхронизацией анимации и отображением графиков друг над другом, но я не уверен, как бы я решил эту проблему. Любая помощь будет отличной, спасибо!

...