查看原文
其他

数据呈现 | 用 pyecharts 绘制时间线动图

威武哥 数据Seminar 2021-06-03

关于Python数据可视化,我们前面向大家介绍了诸如matplotlib、seaborn、bokeh等绘图包的详细用法,也整理了常用的22个绘图包供大家收藏学习(点此回顾),不知道各位同学有没有及时学习。本着学以致用的原则,这期就为大家带来 pyecharts  绘制时间线动图详解。
首先 pyecharts 为何物?请看官方介绍——

简而言之——

pyecharts是一款将 python 与 echarts 结合的强大的数据可视化工具


你可能见过下面这种图(或视频),可以清楚的看见历年各地区的变化情况,有没有感觉很炫酷?

试想,在你的报告中或 PPT 中放上这样一幅图,会不会有一图胜千言的感觉。
怎么样,有没有勾起你想绘制这样一幅图的冲动。那么,就让今天的主人公 pyecharts 满足你的表现欲。




准备数据


本次作图数据采用的是2018年统计年鉴上分地区年末人口数,由于是图片格式,下载后需将其转换成 excel 格式文件。

然后你需要在电脑上安装 pyecharts 包,直接在 Jupyter notebook 上输入以下命令,等待安装即可。

!pip install pyecharts # 在cmd安装输入pip install pyecharts
左右滑动查看更多
此处需要注意的是,pyecharts 目前有两个版本,V0.5.x 与 V1,开发团队已决定不再对 0.5.x 版本进行维护,如有同学仍使用 0.5.x 版本,建议更换最新版本。本文采用的是V1版本。
之后,就是导入数据,并对数据进行格式上的微调。
import pandas as pdimport numpy as np data = pd.read_excel('C:/Users/yeahww/Desktop/CH0206.xlsx',sheet_name = 'Sheet2') df1=data.set_index("地区") #将“地区”设为索引df1.head(10) #显示前10行
左右滑动查看更多
这样,处理后的数据样式为:





条形图


在绘制动图前,我们先绘制静态的条形图,代码如下:
from pyecharts.charts import Barfrom pyecharts import options as optsfrom pyecharts.globals import ThemeType
def timeline_bar(df,year): #定义函数 df=df1.sort_values(year) x=list(df.index) y=list(df[year]) bar = ( Bar(init_opts = opts.InitOpts(theme = ThemeType.DARK, #主题为黑色,可选择WHITE height = "650px")) .add_xaxis(x) .add_yaxis("",y) .reversal_axis() .set_series_opts(label_opts = opts.LabelOpts(position = "right")) .set_global_opts(title_opts = opts.TitleOpts(title = year + "各省市人口数量" )) ) return bar
bar = timeline_bar(df1,'2017') #选择2017年的数据进行绘制bar.render_notebook()
左右滑动查看更多
所作图形如下图所示,可以清楚的看到2017年各省市人口数量的排名及具体数量。





条形时间线


在上图的基础上,我们利用循环将每年的情况绘制出来就可形成动图。
from pyecharts.charts import TimelineTL = (Timeline(init_opts = opts.InitOpts(theme = ThemeType.DARK, height = "650px")) .add_schema(play_interval = 300, #设置播放效果 is_auto_play = True, pos_left = 20, width = 800 ) )
for i in df1.columns: # 循环绘制每一年的条形图 bar = timeline_bar(df1,i) TL.add(bar,i) TL.render("timeline.html")TL.render_notebook()
左右滑动查看更多
几行代码,大家就可以看到心心念念的动图了,可以看到,广东省的人口数量一直位居全国首位。





地图


你也许在想,上面的条形图要是能展示到地图上就更好了。
你没有多想,你想要的 pyecharts 都给你!
照惯例,我们先画某一年的地图:
from pyecharts.charts import Map
def timeline_map(df,year): #定义函数 df = data.sort_values(year,ascending=False) series = np.array(data[['地区',year]]) max_value = int(data[year].max()) min_value = int(data[year].min()) map = ( Map() .add("",series , "china") .set_global_opts( title_opts = opts.TitleOpts(title = year + "各省市人口数量"), visualmap_opts = opts.VisualMapOpts(max_ = max_value ,min_ = min_value), ) ) return map
timeline_map(data,'2017').render_notebook()
左右滑动查看更多
运行后,你便可以看到一幅较为精美的地图了。


点击某个省份,会显示相应数值(大家可以在自己的 Jupyter notebook点击尝试),是不是很炫酷。

注意:如果你的数据中,省份是以“北京市”、“浙江省”、“西藏自治区”出现的,你需要将其转化成“北京”、“浙江”、“西藏”这样 pyecharts 地图可以识别的样式。你可以手动修改,毕竟只有31个数据量,也可以尝试运行以下代码进行修改。

def province_change(s): if len(s)==4 or s=="内蒙古自治区": r=s[:3] else: r=s[:2] return r

df['地区']=df['地区'].apply(lambda x:province_change(x))
左右滑动查看更多




时间线地图


接下来,我们再进一步,利用循环绘制每一年的图形,便可以看到地图动图了。
from pyecharts import options as optsfrom pyecharts.charts import Bar, Page, Pie, Timeline
tl = (Timeline(init_opts=opts.InitOpts(theme=ThemeType.WHITE,height="800px")) .add_schema(play_interval=300,is_auto_play=True,pos_left=20,width=800) )
for i in df1.columns: bar=timeline_map(df1,i) tl.add(bar, i) tl.render("timeline2.html") # 保存成html文件,你可以在自己的工作路径中找到timeline2这个文件tl.render_notebook()
左右滑动查看更多
最后形成的动图如下所示,可以看到每个省份的颜色随着时间的推移都有一定的变深,表明各省市人口都在增加。


到此,我们完成了时间线动图的绘制,几行简单的代码就可以绘制展示效果还不错的动图,大家快来学习吧。这里还是要重申下,pyecharts 是一个性价比极高的 python绘图包,它学习最好的资料就是官方文档了,只要你肯琢磨,学会这个不是难事。
点击阅读原文,查看官方教程。






►往期推荐

回复【Python】👉简单有用易上手

回复【学术前沿】👉机器学习丨大数据

回复【数据资源】👉公开数据

回复【可视化】👉你心心念念的数据呈现

回复【老姚专栏】👉老姚趣谈值得一看


►一周热文

中秋特刊 | R还可以绘图:八月十五招友玩“月”

特别推荐丨老姚专栏:遗漏变量偏差中的高估与低估

工具&方法丨经济学圈特供 使用Jupyter Notebook的12个小技巧

数据呈现 | 用R绘制箱线、散点图,揭示地区企业进退规律




数据Seminar

这里是大数据、分析技术与学术研究的三叉路口


作者:威武哥(叶武威)审阅:杨奇明编辑:青酱






    欢迎扫描👇二维码添加关注    


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存