【发布时间】:2020-11-17 08:12:25
【问题描述】:
我正在尝试为同一情节上的两条线设置动画。在四处搜索之后,我遇到了this post,这似乎让我走上了正轨。当我运行此代码时,停滞图显示没有动画,给我一个错误AttributeError: 'AxesSubplot' object has no attribute 'set_data'。我查了set_data,它说它“接受:二维数组(行是x,y)或两个一维数组”。由于我将line1 和line2 分配给绘图而不是二维数组,因此动画是否不起作用?我将不胜感激任何帮助让这些线条在我的情节上制作动画,我尝试并尝试无济于事。谢谢!
fig, ax = plt.subplots(figsize=(16,8))
#Plot Lines
line1 = sns.lineplot('game_seconds_remaining', 'away_wp', data=game, color='#4F2683',linewidth=2)
line2 = sns.lineplot('game_seconds_remaining', 'home_wp', data=game, color='#869397',linewidth=2)
#Add Fill
ax.fill_between(game['game_seconds_remaining'], 0.5, game['away_wp'], where=game['away_wp']>.5, color = '#4F2683',alpha=0.3)
ax.fill_between(game['game_seconds_remaining'], 0.5, game['home_wp'], where=game['home_wp']>.5, color = '#869397',alpha=0.3)
#Plot Aesthetics - Can Ignore
plt.ylabel('Win Probability %', fontsize=16)
plt.xlabel('', fontsize=16)
plt.axvline(x=900, color='white', alpha=0.7)
plt.axvline(x=1800, color='white', alpha=0.7)
plt.axvline(x=2700, color='white', alpha=0.7)
plt.axhline(y=.50, color='white', alpha=0.7)
plt.suptitle('Minnesota Vikings @ Dallas Cowboys', fontsize=20, style='italic',weight='bold')
plt.title('Min 28, DAL 24 - Week 10 ', fontsize=16, style = 'italic',weight='semibold')
#Labels (And variable assignment for animation below)
x = ax.set_xticks(np.arange(0, 3601,900))
y1 = game['away_wp']
y2 = game['home_wp']
plt.gca().invert_xaxis()
x_ticks_labels = ['End','End Q3','Half','End Q1','Kickoff']
ax.set_xticklabels(x_ticks_labels, fontsize=12)
#Animation - Not working
def update(num, x, y1, y2, line1, line2):
line1.set_data(x[:num], y1[:num])
line2.set_data(x[:num], y2[:num])
return [line1,line2]
ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y1, y2, line1, line2],
interval=295, blit=False)
【问题讨论】:
-
只有当你使用
matplotlib函数来画线时它才会起作用——即。plt.plot()。seaborn可能需要更多代码才能从AxesSubplot获取线路 -
@furas plt.plot() 仍然返回非动画图
-
你是用
line1, = plt.plot(...)代替sns.lineplot()吗? -
@furas 正确。也试过
ax.plot(...)。 -
等一下,
line1, = plt.plot(...)和line1 = plt.plot(...)返回不同的东西。带逗号的那个把它搞砸了。两者都没有动画。
标签: python pandas dataframe matplotlib animation