import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
#导入第三方库numpy、pandas、seaborn、matplotlib
#numpy是性能科学计算和数据分析的基础包,里面包含了许多对数组进行快速运算的标准数学函数
#pandas是基于numpy构建的,使得数据分析工作变得更快更简单的高级数据结构和操作工具
#seaborn是基于Matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形
#Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形
overdoses = pd.read_excel('A:\overdose_data_1999-2015.xls',sheet_name='Online',skiprows=6)
#用pandas读入excel数据
def get_data(table,rownum,title):
data = pd.DataFrame(table.loc[rownum][2:]).astype(float)
data.columns={title}
return data
#get_data函数用于只读取表格中的一行数据
#%matplotlib notebook
title = 'Heroin Overdoses'#初始化一个title字符串
d = get_data(overdoses,18,title)
x = np.array(d.index)
y = np.array(d['Heroin Overdoses'])
def augment(xold,yold,numsteps):
xnew=[]
ynew=[]
for i in range(len(xold)-1):
difX=xold[i+1]-xold[i]
stepsX=difX/numsteps
difY=yold[i+1]-yold[i]
stepsY=difY/numsteps
for s in range(numsteps):
xnew=np.append(xnew,xold[i]+s*stepsX)
ynew=np.append(ynew,yold[i]+s*stepsY)
return xnew,ynew
(x,y)=augment(x,y,numsteps=10)
overdose = pd.DataFrame(y,x)
overdose.columns = {title}
Writer = animation.writers['ffmpeg']
writer = Writer(fps=20,metadata=dict(artist='Me'),bitrate=1800)
fig = plt.figure(figsize=(10,6))
plt.xlim(1999,2016)
plt.ylim(np.min(overdose)[0],np.max(overdose)[0])
plt.xlabel('Year',fontsize=20)
plt.ylabel(title,fontsize=20)
plt.title('Heroin Overdoses per Year',fontsize=20)
def animate(i):
data=overdose.iloc[:int(i+1)]
p=sns.lineplot(x=data.index,y=data[title],data=data,color="r")
sns.set(rc={'axes.facecolor':'lightgrey', 'figure.facecolor':'lightgrey','figure.edgecolor':'black','axes.grid':False})
p.tick_params(labelsize=17)
plt.setp(p.lines,linewidth=7)
ani=matplotlib.animation.FuncAnimation(fig,animate,frames=160,repeat=True)
ani.save('A:/HeroinOverdosesJumpy.mp4',writer=writer)
python学习笔记——动态图表
最新推荐文章于 2024-04-11 08:59:42 发布