【发布时间】:2020-07-30 23:08:49
【问题描述】:
我一直在尝试使用matplotlib.animation 为一系列情节制作动画,但无济于事。我的数据当前存储在 Pandas 数据框中,我想遍历一个类别(在本例中为颜色)并绘制与每种颜色对应的数据,如下所示:
import pandas as pd
import seaborn as sns
import matplotlib.animation as animation
def update_2(i):
plt.clf()
fil_test = test[test['color'] == iterations[i]]
sns.scatterplot(x = 'size',y = 'score',hue = 'shape',ci = None,
palette = 'Set1',data = fil_test)
ax.set_title(r"Score vs. Size: {} Shapes".format(
iterations[i]),fontsize = 20)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5),prop={'size': 12})
test = pd.DataFrame({'color':["red", "blue", "red",
"yellow",'red','blue','yellow','yellow','red'],
'shape': ["sphere", "sphere", "sphere",
"cube",'cube','cube','cube','sphere','cube'],
'score':[1,7,3,8,5,8,6,2,9],
'size':[2,8,4,7,9,8,3,2,1]})
iterations = test['color'].unique()
i = 0
fig2 = plt.figure(figsize = (8,8))
ax = plt.gca()
plt.axis()
ax.set_xlabel("size",fontsize = 16)
ax.set_ylabel("score",fontsize = 16)
ax.set_xlim(0,10)
ax.set_xlim(0,10)
ax.set_xticks(np.linspace(0,10,6))
ax.set_yticks(np.linspace(0,10,6))
ax.tick_params(axis='both', which='major', labelsize=15)
ani = animation.FuncAnimation(fig2,update_2,frames = len(iterations))
ani.save("test.mp4", dpi=200, fps=1)
但是,此代码产生了 4 个问题:
-
即使我将动画保存到
ani变量中,它似乎也没有显示与每种不同颜色相关的数据。 -
标题没有为每种颜色正确显示/更新。
-
调用
ax.legend会产生以下错误/警告:No handles with labels found to put in legend. -
尝试保存动画会产生以下错误:
MovieWriterRegistry' object is not an iterator
有人能解释一下为什么目前会出现这些问题吗?有没有更好的方法来编写/格式化我的动画代码?
【问题讨论】:
标签: python matplotlib animation plot seaborn