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

时间:2017-01-10 16:49:04

标签: 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.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()

我尝试创建一个单独的子图,而不是p1p2,并将这两个图绘制在该单个子图中。这只是绘制一个图而不是两个图。据我所知,这是因为其中一个在绘制之后就被清除了。

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

但是为了回答如何在同一轴(子图)中设置两条线的动画的问题,我们可以摆脱clear()命令并更新线,而不是为每一帧生成一个新的图(哪个更有效率。)

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()