超火动态价格面积图：手把手教你！

近期热文

2万字干货： 利用深度学习最新前沿预测股价走势

`df = pd.read_csv('BTC_price_history.csv')df['date']=[datetime.strptime(d, '%Y/%m/%d').date() for d in df['date']]df['price']=(df['high']+df['low'])/2df.head(5)`

`def draw_areachart(Num_Date):    Span_Date=180    ax.clear()    if Num_Date<Span_Date:        df_temp=df.loc[0:Num_Date,:]        df_span=df.loc[0:Span_Date,:]        plt.fill_between(df_temp.date.values, y1=df_temp.price.values, y2=0,alpha=0.75, facecolor='r', linewidth=1,edgecolor ='none',zorder=1)        plt.plot(df_temp.date, df_temp.price, color='k',zorder=2)        plt.scatter(df_temp.date.values[-1], df_temp.price.values[-1], color='white',s=150,edgecolor ='k',linewidth=2,zorder=3)        plt.text(df_temp.date.values[-1], df_temp.price.values[-1]*1.18,s=np.round(df_temp.price.values[-1],1),size=10,ha='center', va='top')        plt.ylim(0, df_span.price.max()*1.68)        plt.xlim(df_span.date.values[0], df_span.date.values[-1])        plt.xticks(ticks=df_span.date.values[0:Span_Date+1:30],labels=df_span.date.values[0:Span_Date+1:30],rotation=0,fontsize=9)    else:        df_temp=df.loc[Num_Date-Span_Date:Num_Date,:]        plt.fill_between(df_temp.date.values[:-2], y1=df_temp.price.values[:-2], y2=0,alpha=0.75, facecolor='r', linewidth=1,edgecolor ='none',zorder=1)        plt.plot(df_temp.date[:-2], df_temp.price[:-2], color='k',zorder=2)        plt.scatter(df_temp.date.values[-4], df_temp.price.values[-4], color='white',s=150,edgecolor ='k',linewidth=2,zorder=3)        plt.text(df_temp.date.values[-1], df_temp.price.values[-1]*1.18,s=np.round(df_temp.price.values[-1],1),size=10,ha='center', va='top')        plt.ylim(0, df_temp.price.max()*1.68)        plt.xlim(df_temp.date.values[0], df_temp.date.values[-1])        plt.xticks(ticks=df_temp.date.values[0:Span_Date+1:30],labels=df_temp.date.values[0:Span_Date+1:30],rotation=0,fontsize=9)            plt.margins(x=0.2)    ax.spines['top'].set_color('none') # 设置上‘脊梁’为红色    ax.spines['right'].set_color('none') # 设置上‘脊梁’为无色    ax.spines['left'].set_color('none') # 设置上‘脊梁’为无色    plt.grid(axis="y",c=(217/256,217/256,217/256),linewidth=1) #设置网格线    plt.text(0.01, 0.95,"BTC平均价格(\$)",transform=ax.transAxes, size=10, weight='light', ha='left')    ax.text(-0.07, 1.03, '2013年到2019年的比特币BTC价格变化情况',transform=ax.transAxes, size=17, weight='light', ha='left')    fig, ax = plt.subplots(figsize=(6,4), dpi=100)plt.subplots_adjust(top=1,bottom=0.1,left=0.1,right=0.9,hspace=0,wspace=0)draw_areachart(180)`

a

b

`import matplotlib.animation as animationfrom IPython.display import HTMLfig, ax = plt.subplots(figsize=(6,4), dpi=100)plt.subplots_adjust(left=0.12, right=0.98, top=0.85, bottom=0.1,hspace=0,wspace=0)animator = animation.FuncAnimation(fig, draw_areachart, frames=np.arange(0,df.shape[0],1),interval=100)#HTML(animator.to_jshtml())`

matplotlib 包和 plotnine 包都可以实现动态数据的可视化演示。其中，在 matplotlib 包中： 函数 FuncAnimation(fig,func,frames,init_func,interval,blit) 是绘制动图的主要函数，其参数如下：

1、fig 表示绘制动图的画布名称(figure)；

2、func为自定义绘图函数，如draw_barchart()函数；

3、frames为动画长度，一次循环包含的帧数，在函数运行时，其值会传递给函数draw_barchart (year)的形参“year”；

4、init_func为自定义开始帧，即初始化函数init，可省略；

5、interval表示更新频率，计量单位为ms；

6、blit表示选择更新所有点，还是仅更新产生变化的点，应选择为True，但mac用户应选择False，否则无法显示。

—End—