我尝试在一个axis对象中设置粒子碰撞动画,同时在另一个axis对象中绘制一些数据(使用matplotlib.gridspec)。 我使用测试数据设置了一个测试环境,将碰撞简化为仅在轴1(matplotlib.patches.Circle对象)中出现的圆,并在轴2(matplotlib.lines.Line2D对象)中绘制正弦函数。 动画一次只能运行一个轴,但我无法同时运行两个轴的动画
我认为问题与init()和animate(I)函数中的返回对象有关。“matplotlib.patches”和“matplotlib.lines”对象在与动画结合时存在问题,但我不知道为什么。 这是我的密码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from matplotlib.animation import FuncAnimation
from matplotlib.gridspec import GridSpec
#%% setup test data
xy = (0.5, 0.5)
r = 0.02
i = np.arange(10,110)
#%% setup figure
fig = plt.figure(figsize = (8,8))
gs = GridSpec(6,4, figure=fig, wspace=0, hspace=0)
ax0 = fig.add_subplot(gs[0:4,0:4])
ax1 = fig.add_subplot(gs[5:6,0:4])
ax1.set_xlim(0,100)
# assigning labels
circles = []
ln1, = ax1.plot([],[], 'r')
def init():
ln1.set_data([],[])
circles = []
return circles, ln1
def animate(i):
xy = (np.random.random(), np.random.random())
circles.append(ax0.add_patch(Circle(xy,r)))
x = np.linspace(0,100,100)
y = np.sin(x)
mask1 = x < i
x1 = x[mask1]
y1 = y[mask1]
ln1.set_data(x1, y1)
return circles, ln1
ani = FuncAnimation(fig, animate, init_func=init, frames = i, blit=True, interval = 1)
plt.show()
这是我收到的错误消息:
Traceback (most recent call last):
File "C:\Users\flofr\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py", line 216, in process
func(*args, **kwargs)
File "C:\Users\flofr\anaconda3\lib\site-packages\matplotlib\animation.py", line 953, in _start
self._init_draw()
File "C:\Users\flofr\anaconda3\lib\site-packages\matplotlib\animation.py", line 1741, in _init_draw
a.set_animated(self._blit)
AttributeError: 'list' object has no attribute 'set_animated'
Traceback (most recent call last):
File "C:\Users\flofr\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py", line 216, in process
func(*args, **kwargs)
File "C:\Users\flofr\anaconda3\lib\site-packages\matplotlib\animation.py", line 1269, in _handle_resize
self._init_draw()
File "C:\Users\flofr\anaconda3\lib\site-packages\matplotlib\animation.py", line 1741, in _init_draw
a.set_animated(self._blit)
AttributeError: 'list' object has no attribute 'set_animated'
我试图测试init()的返回值是否正确,似乎是这样
输入:
def init():
ln1.set_data([],[])
circles = []
circles.append(ax0.add_patch(Circle(xy,r)))
return ln1, circles
a, b = init()
print(a)
print(b)
输出:
Line2D(_line0)
[<matplotlib.patches.Circle object at 0x000001E7DE16F548>]
以下是模拟的三种状态Imgage one显示布局,image two轴1模拟(圆圈)和image three轴2模拟(正弦)
目前没有回答
相关问题 更多 >
编程相关推荐