Matplotlib绘制动图

数据源来国家统计局的数据,小栈下载最近36个月的房地产投资数据,这个网站还有很多数据可以下载,如消费数据,国家产业结构数据,人口数据等,但是要注册后才能下载。
Matplotlib绘制动图_第1张图片
拿到数据后进行处理:
Matplotlib绘制动图_第2张图片

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
#因为下载后的数据前面2行是一些简要信息,无用
df =df.T#原数据是日期在上面,所以进行转置
df = pd.read_csv(r'C:\Users\didi\Desktop\月度数据.csv',encoding ='gbk',skiprows =2)
df =df.rename(dict(zip(df.columns,df.iloc[0,])),axis = 1)
df.drop(['指标'],inplace =True)
#一定要进行日期的变化,要不然后面的动画不会根据日期变化
df.index =pd.to_datetime(df.index,format='%Y年%m月')
df = df.sort_index()

Matplotlib绘制动图_第3张图片
制作动画,主要使用的是matplotlib.animation功能:

import matplotlib.animation as animation
fig = plt.figure(figsize = (15,5))
ax1 = fig.add_subplot(111)
def animate(i):#i进行计数更新的动画函数
    i = int(i)
    data =df.iloc[:i]
    line = ax1.plot(data.index,data['房地产投资累计值(亿元)'],'co-',label ='房地产投资累计值(亿元)',linewidth =2,ms =3)
    return line
#frames是指动画点数,windows用户blit一定要有True,要不然图列出不来,mac要用False
ani = animation.FuncAnimation(fig,animate,frames= len(df),blit=True)
ax1.legend(loc='upper right')
ani.save('1.gif',fps =8)


那么怎么在后面加另一个指标的动画呢?只需在自定义函数里面加入另一个图形就行。

def animate(i):
    i = int(i)
    data =df.iloc[:i]
    line = ax1.plot(data.index,data['房地产投资累计值(亿元)'],'co-',label ='房地产投资累计值(亿元)',linewidth =2,ms =3)
    line =ax1.plot(data.index,data['房地产住宅投资累计值(亿元)'],'r*-',label ='房地产住宅投资累计值(亿元)',)
    #不要用scatter去画散点图,因为scatter不支持日期型数据,可以用plot改变线型或者用plot_date
    line = ax1.plot(data.index,data['90平方米及以下住房投资累计值(亿元)'],'+',label ='90平方米及以下住房投资累计值(亿元)',ms =6)
    return line


已开通微信账号,欢迎关注数据分析小栈交流:
Matplotlib绘制动图_第4张图片

你可能感兴趣的:(Matplotlib绘制动图)