基于pyecharts实现地理信息可视化
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
对于“交通狗”来说,有时会因为找不到免费地图而暗自伤神,而 pyecharts 附带的地图可以满足大多数人的地图需求。话不多说,直接进入正题……
1. 安装
使用 Win+R 打开“运行”对话框,输入 cmd ,进入DOS环境,输入代码:
pip install pyecharts
坑1:自从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表,可自行安装对应的地图文件包。下面介绍如何安装:
pip install echarts-countries-pypkg # 全球国家地图
pip install echarts-china-provinces-pypkg # 中国省级地图
pip install echarts-china-cities-pypkg # 中国市级地图
pip install echarts-china-counties-pypkg # 中国县区级地图
pip install echarts-china-misc-pypkg # 中国区域级地图,如华南、华北
pip install echarts-united-kingdom-pypkg
坑2:存在会因为墙的原因速度较慢或者是出现断线的情况,此时建议使用清华的镜像来安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-countries-pypkg
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-provinces-pypkg
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-cities-pypkg
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-counties-pypkg
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-misc-pypkg
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-united-kingdom-pypkg
坑3:如果您用的是jupyter notebook,笔者建议使用Anaconda prompt 安装,同样输入代码即可。
2. 小试牛刀
首先,通过一个小实例,简单认识一下 pyecharts。
# 首先导入柱状图的包
from pyecharts.charts import Bar
# 使用链式规则调用方法(当然如果不习惯链式的话,也可以单独调用)
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
)
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()
注:如果您使用的是jupyter notebook,而且想让结果输出到notebook中时,可以使用bar.render_notebook()
运行代码,打开HTML文件,得到可交互的柱状图。
3. 大展身手
总的来说,pyecharts的地理图表包括三类:Geo(地理坐标系);Map(地图);BMap(百度地图)。
Demo1.绘制北京市地铁站点散点图
数据准备:关注【交通科研Lab】公众号,回复“地铁站点”,即可得到数据
第一步:导入包及相关数据
from pyecharts.charts import Geo
from pyecharts import options as opts
with open(r"文件路径.txt") as f:
data=[[line.strip().split(",")[1]+’X’+line.strip().split(",")[2],\
float(line.strip().split(",")[4]),float(line.strip().split(",")[5])] for line in f]
生成的data数据示例如下:
[['1X3', 116.17802432179747, 39.92624856649407],……]
'1X3'表示1号线的3号站,116.17802432179747为经度,39.92624856649407为纬度。
**注:
1. 笔者使用的是txt文件,因此和公众号获取的csv文件略有不同,我的数据格式为(线路名称,线路编号,站点编号,站点名称,站点经度,站点纬度);
2. 笔者经过测试,认为pyecharts的坐标是百度坐标系,如果您用的数据是火星坐标系或者WGS 84坐标系,需要进行转换,具体方法网上很多,就不在此赘述了。**
第二步:绘图
stationmap = Geo()
# 打点
for i in data:
(stationmap
.add_schema(maptype="北京") # 底图为北京市
# 加入自定义的点,格式为
.add_coordinate(i[0],i[1],i[2])
# 为自定义的点添加属性:点的名称,[(点的特征,点的颜色)],点的大小
.add("station", [(i[0],80)],symbol_size=10)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #设置系列配置项中的标签配置项
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(is_show=False), #设置全局配置项中的视觉映射配置项
title_opts=opts.TitleOpts(title="北京轨道站点分布图"), #设置全局配置项中的标题配置项
)
)
# 在 Jupyter Notebook 中渲染图表
stationmap.render_notebook()
** 小结一下:
-
Pyecharts所有方法均支持链式调用;
-
使用 options 配置项,在 pyecharts 中,一切皆 Options。
-
配置项分为全局配置项(set_global_opts)和系列配置项(set_series_opts)。**
Demo2.绘制世界地图
数据集:使用pyecharts 的Faker 模块生成模拟数据
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.country, Faker.values())], "world") # 以列表形式存放数据
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-世界地图"),
visualmap_opts=opts.VisualMapOpts(max_=200), # 设置视觉映射配置项的组件最大值为200,最小值默认为0
)
.render("map_world.html")
)
Demo3.添加时间轴
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline
from pyecharts.faker import Faker
tl = Timeline()
for i in range(2014, 2019):
map0 = (
Map()
.add("", [list(z) for z in zip(Faker.provinces, Faker.values())], "china") # 以列表形式存放数据
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-{}年某些数据".format(i)),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
tl.add(map0, "{}年".format(i))
tl.render_notebook()
pyecharts 的作图功能十分强大,其简洁的界面,方便的互动机制,高可读性的代码,以及自带的地图数据……等等优点,并不是能在一篇推送中全部介绍到的。
因此,如果读者在使用pyecharts时遇到问题,欢迎评论区交流,建议小伙伴们阅读 pyecharts 官方文档:
https://pyecharts.org/#/zh-cn/intro