在下面的代码中,我有两个单独的动画,我将它们绘制在两个独立的子图中。我希望他们两个都在一个情节中运行而不是这个。我尝试了下面解释的方法,但它给了我下面解释的问题。请帮忙
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
,并将这两个图绘制在该单个子图中。这只是绘制一个图而不是两个图。据我所知,这是因为其中一个在绘制之后就被清除了。
如何解决这个问题?
答案 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()