我们使用
2013
年
-2019
年比特币
(BTC)
的价格数据绘制面积图动画,其
HTML
交互效果页面如图
11-4-6
所示。该数据集包括四列数据:年份
(year)
、城市名称
(name)
及所在的洲
(group)
、人口密度数值
(value)
,转置的数据集如图
11-4-7
所示,包括
2013
年
04
月
28
日起每天的开盘、最高、最低和收盘的价格。
图
11-4-6.
动态面积图的
HTML
交互页面效果图
图
11-4-7. 2013
年
-2019
年比特币
(BTC)
的价格数据集
我们先导入数据集'BTC_price_history.csv',然后将date列转换成日期型数据。
我们选择一天的最高和最低价的均值作为这一天比特币的价格Price。
其具体代码如下:
我们设置图表每次展示
Span_Date=180
天的比特币价格数据,所以得到
180
天的数据集
df_temp
后,如果使用
plt.fill_between()
函数可以实现红色填充的面积图,如图
11-4-8(a)
所示;如果使用
plt.bar()
函数可以实现
Spectral_r
颜色映射的面积图,如图
11-4-8(b)
所示。图
11-4-8
的代码具体如下所示。
(b)
渐变色填充
.
图
11-4-8.
静态面积图
.
我们将上面的静态面积图代码整合成函数。
当开始的日期天数据绘制面积图;当开始的日期≥时,就选择截止到当前日期的天数据绘制面积图。使用函数绘制的不同日期的面积图如图所示。
(b)Num_Date=150.
图
11-4-9.
不同日期
Num_Date
的面积图
.
使用
matplotlib
包的
animation.FuncAnimation()
函数,调用
draw_areachart(Num_Date)
函数,其中输入的参数
Num_Date = np.arange(0,df.shape[0],1)
,最后使用
Ipython
包的
HTML()
函数将动画转换成
HTML
页面的形式演示,其动画不同日期下的演示效果如图
11-4-10
所示。
其中,函数
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
,否则无法显示。
另外,也可以使用
animator.save(‘
animation.gif
’)
或者
animator.save(‘
animation.mp4
)
导出
gif
或者
mp4
格式的动画。但是如果要导出
mp4
,需要先安装已经安装
ffmpeg
或者
mencoder
。
图
11-4-10.
面积图动画不同时间下的演示效果
但是由于动画默认的最大体积为
20971520.0 bytes
,所以图
11-4-10
只生成了
2013
年
04
月
-2014
年
07
月数据绘制的面积图动画。如果需要调整生成的动画最大体积,需要更改参数
animation.embed_limit:
https://github.com/EasyChart/Beautiful-Visualization-with-python
本文来源即将出版的新书《python数据可视化之美》之动态图表的绘制,除此之外,书中还介绍了动态条形图和动态三维柱形地图的绘制。
matplotlib
包和
plotnine
包都可以实现动态数据的可视化演示。其中,在
matplotlib
包中,函数
FuncAnimation(fig,func,frames,init_func,interval,blit)
是绘制动图的主要函数,其参数如下:
(1) fig
为绘制动图的画布名称;
(2) func
为自定义动画函数
update()
,比如
11-4-1
的
draw_barchart(year)
和
11-4-2
的
draw_areachart(Num_Date)
;
(3) frames
为动画长度,一次循环包含的帧数,在函数运行时,其值会传递给函数
update(n)
的形参
“n”
;
(4) init_func
为自定义开始帧,即初始化函数,可省略;
(5) interval
为更新频率,以
ms
计算;
(5) blit
为选择更新所有点,还是仅更新产生变化的点。应选择
True
,但
mac
用户请选择
False
,否则无法显示。
plotnine
包的
PlotnineAnimation()
函数也可以绘制动态图表,但是对于不断更新的数据绘制动态图表时,动态图表生成速度很慢。
自从9月份出版《R语言数据可视化之美》,很多读者问我能不能出一本python版的数据可视化教程。写书真的呕心沥血,但是在撰写过程中能系统性地总结所学的知识,可以查漏补缺,也是受益匪浅。R语言这本书是2017年5月断断续续写了1年半多,到今年5月份才修改出版。后来又花了3个多月增加了三章图表内容
所谓“大道相通”,不同软件的数据可视化原理都是相通的。python数据可视化这本书就是2018年对照着R语言那本书翻译而成。所以亲爱的读者请不必诧异于、我现在这么快就撰写完成《python数据可视化之美》。
在这里,首先要感谢我的读者,感谢你们对我的支持与包容。也非常感谢我的大学好友金伟(现为职腾讯高级研究员)引导我入门python,也感谢香港理工大学的姚鹏鹏博士、清华大学的赵建树博士对我在学习python时的帮助。
最后,我觉得我还应该感谢的就是我自己。蓦然回首,四年弹指一挥间,从大学毕业到香港做学术研究这几年,经历过很多次的失望,也差点就抑郁,感谢我自己有一颗积极阳光乐观的心,终于守得云开见月明,如我所愿能坚持做我自己喜欢的事情。
小时候,读到课本里普希金说:“假如生活欺骗了你,不要悲伤,不要心急!忧郁的日子里需要镇静:相信吧,快乐的日子将会来临。”到现在才明白这确实是一条生活的潜规则。月有阴晴圆缺,人有悲欢离合。人不仅有趋利避害、喜甜厌苦的本能反应,还有趋欢避悲、求乐脱苦的本能调节。所以,悲伤的日子后面就是快乐的日子。