Animation 如何使用matplotlib在一个绘图中绘制两个动画?

Animation 如何使用matplotlib在一个绘图中绘制两个动画?,animation,matplotlib,graph,Animation,Matplotlib,Graph,在下面的代码中,我有两个单独的动画,并将它们绘制在两个单独的子图中。我希望他们两个都在一个单一的情节,而不是这个。我尝试了下面解释的方法,但它给了我下面解释的问题。请帮忙 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time as t x = np.linspace(0,5,100) fig = plt.figure() p1 = fig.

在下面的代码中,我有两个单独的动画,并将它们绘制在两个单独的子图中。我希望他们两个都在一个单一的情节,而不是这个。我尝试了下面解释的方法,但它给了我下面解释的问题。请帮忙

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

x = np.linspace(0,5,100)

fig = plt.figure()
p1 = fig.add_subplot(2,1,1)
p2 = fig.add_subplot(2,1,2)

def gen1():
    i = 0.5
    while(True):
        yield i
        i += 0.1


def gen2():
    j = 0
    while(True):
        yield j
        j += 1


def run1(c):
    p1.clear()
    p1.set_xlim([0,15])
    p1.set_ylim([0,100])

    y = c*x
    p1.plot(x,y,'b')

def run2(c):
    p2.clear()
    p2.set_xlim([0,15])
    p2.set_ylim([0,100])

    y = c*x
    p2.plot(x,y,'r')

ani1 = animation.FuncAnimation(fig,run1,gen1,interval=1)
ani2 = animation.FuncAnimation(fig,run2,gen2,interval=1)
fig.show()
我尝试创建一个单独的子图,而不是
p1
p2
,并将两个图绘制在该单独的子图中。这只是绘制一个图形,而不是两个图形。据我所知,这是因为其中一个在被策划后马上被清除了


如何解决此问题?

由于您没有显示实际产生问题的代码,因此很难判断问题所在

但是要回答如何在同一轴(子图)上设置两条线的动画的问题,我们可以去掉
clear()
命令并更新线,而不是为每一帧生成一个新的图(无论如何,这更有效)


谢谢!这是有效的。为了确保我正确地发布未来的问题,请您澄清我没有提供实际产生问题的代码是什么意思?我在这里发布了整个程序。我还应该补充什么?当然。你在这里发布的代码运行良好。它有两个子批次,并且都按预期进行了更新。但是,您询问的是使用不同代码时出现的问题,即“创建单个子批而不是p1和p2”。但是创建这个子图的代码仍然未知——因此很难说在这种情况下有什么问题。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

x = np.linspace(0,15,100)

fig = plt.figure()
p1 = fig.add_subplot(111)

p1.set_xlim([0,15])
p1.set_ylim([0,100])

# set up empty lines to be updates later on
l1, = p1.plot([],[],'b')
l2, = p1.plot([],[],'r')

def gen1():
    i = 0.5
    while(True):
        yield i
        i += 0.1

def gen2():
    j = 0
    while(True):
        yield j
        j += 1

def run1(c):
    y = c*x
    l1.set_data(x,y)

def run2(c):
    y = c*x
    l2.set_data(x,y)

ani1 = animation.FuncAnimation(fig,run1,gen1,interval=1)
ani2 = animation.FuncAnimation(fig,run2,gen2,interval=1)
plt.show()