我正在构建一个简单的散点图(预期寿命x人均GDP),它从xls文件中读取数据。这是代码:
Inner
现在我想从其他年份向这个xls文件添加一些数据,并为气泡设置动画,使它们根据每年的GDP和人口数量移动和改变大小。 在愚蠢的尝试中,我已将代码更改为:
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
#ler a terceira sheet da planilha
data = pd.read_excel('sample.xls', sheet_name=0)
data.head()
plt.scatter(x = data['LifeExpec'],
y = data['GDPperCapita'],
s = data['PopX1000'],
c = data['PopX1000'],
cmap=cm.viridis,
edgecolors = 'none',
alpha = 0.7)
for state in range(len(data['State'])):
plt.text(x = data['LifeExpec'][state],
y = data['GDPperCapita'][state],
s = data['State'][state],
fontsize = 14)
plt.colorbar()
plt.show()
我认为这样做的方法可能是使用animate函数多次构建图表,每年一次迭代。但我无法弄清楚如何过滤"关于特定年份的行。
我太过分了?甚至可以使用matplotlib实现吗?
答案 0 :(得分:1)
您可以使用简单的if语句过滤行。列出你想要绘制年份的列表,即list = [2000,2001,2002]。 然后迭代列表
for i in range (0,2):
if x=list[i]:
#do whatever you want
其中x是F列中包含年份的数据。
您也可以根据年份名称
保存数字plt.savefig("{}.png".format(i))
然后只需使用此命令创建动画:
ffmpeg -framerate 25 -i %d.png -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4
然后,您可以使用rm *.png
您需要在脚本中导入操作系统,或者在脚本创建绘图后通过命令行手动执行操作。我认为这是解决问题的一种更简单的方法。
干杯
答案 1 :(得分:0)
使用Stylianos Nikas和ImportanceOfBeingErnest所说的起点我用数据框中的独特年份制作了一个列表,并将其长度用作FuncAnimation中的参数,如下所示:
def animate(frames):
ax.clear()
data = df[df['Ano'] == uniqueYears[frames]]
ax.scatter(y = data['lifeExpec'],
x = data['GPDperCapita'],
s = data['PopX1000']/40000,
c = data['Region'].astype('category').cat.codes,
cmap = cm.viridis,
edgecolors = 'none',
alpha = 0.5)
anim = FuncAnimation(fig, animate, frames = len(uniqueYears),interval = 200, repeat = False)
为了避免帧的重叠,我只是将ax.clear()添加到animate函数的开头。