数据源来国家统计局的数据,小栈下载最近36个月的房地产投资数据,这个网站还有很多数据可以下载,如消费数据,国家产业结构数据,人口数据等,但是要注册后才能下载。
拿到数据后进行处理:
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.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