根据XLS文件中的年份制作散点图

时间:2018-05-28 12:48:58

标签: python python-3.x matplotlib

我正在构建一个简单的散点图(预期寿命x人均GDP),它从xls文件中读取数据。这是代码:

Inner

xls文件: enter image description here

情节: enter image description here

现在我想从其他年份向这个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实现吗?

2 个答案:

答案 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函数的开头。