数据可视化智慧交通与自动驾驶数据可视化分析

基于pyecharts实现地理信息可视化

2020-03-29  本文已影响0人  交通科研Lab

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

对于“交通狗”来说,有时会因为找不到免费地图而暗自伤神,而 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()

** 小结一下:

  1. Pyecharts所有方法均支持链式调用;

  2. 使用 options 配置项,在 pyecharts 中,一切皆 Options。

  3. 配置项分为全局配置项(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

欢迎关注微信公众号【交通科研Lab】

交通科研Lab.png
上一篇下一篇

猜你喜欢

热点阅读