pyecharts实现全省各市区县数据动态显示地图

前言

上一篇《pyecharts中显示浙江省所有县市区地图》实现了怎么通过自定义geojson来实现全省各市区县地图显示,这一篇我们就来实现怎么用我们创建的全省市区县地图将各县区数据指标动态的渲染上来。

注意: 一下两种情况需要从【准备 】阶段开始按步骤阅读

  1. 使用自定义geojson来创建地图
  2. pyecharts原生库中的地理信息、城市行政划分和目前实际划分不一致,需要我们重写assets/maps/中的js文件

准备

1、下载pyecharts-assets 源码包,并解压

pyecharts-assets解压

2、进入assets/maps/ 找到zhe4_jiang1_hang2_zhou1.js文件,接下来修改这个文件中的geojson信息。

这一步不是必须要做的。我这里做是因为杭州市重新划分了行政区域后,pyecharts官方没有及时更新zhe4_jiang1_hang2_zhou1.js中的geojson信息,所以我这里要做修改。如果其他地区有更新,同理只要修改对应地区的js中geojson信息即可

打开zhe4_jiang1_hang2_zhou1.js文件,使用最新的hangzhou_geojson.json (怎么得到最新的hangzhou_geojson.json,可以参考以前文章《pyecharts中自定义geojson创建地图》) 替换掉下图红色括号中的内容,保存文件。

替换掉红色括号中的内容

3、使用命令行工具进入pyecharts-assets,并启动服务

1
2
$ cd pyecharts-assets
$ python -m http.server

4、在代码顶部设置host

1
2
3
4
5
6
7
8
# 只需要在顶部声明 CurrentConfig.ONLINE_HOST 即可
from pyecharts.globals import CurrentConfig

CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"

# 接下来所有图形的静态资源文件都会来自刚启动的服务器
from pyecharts.charts import Map
map = Map()

编写代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import os.path
import random

import xlrd
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline, Geo
# 如果不涉及到更改assets/maps/文件夹下的js文件,则一下两行需要删除
from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"

# 生成全省动态图
def zhejiang_sync_data(path):
width = '1000px'
height = '900px'
tl = Timeline(init_opts=opts.InitOpts(width=width, height=height)) \
.add_schema(orient='horizontal', is_auto_play=True, is_timeline_show=True)
wb = xlrd.open_workbook(path)
for idx in range(len(wb.sheets())):
with open("./geojson/zhejiang_cities_districts_geojson.json", "r", encoding="utf-8") as file:
stream = file.read()
keys = []
values = []
for i in range(wb.sheet_by_index(idx).nrows):
if i > 0:
keys.append(wb.sheet_by_index(idx).cell(i, 1).value)
values.append(wb.sheet_by_index(idx).cell(i, 6).value)

map0 = Map(init_opts=opts.InitOpts(width=width, height=height)) \
.add_js_funcs("echarts.registerMap('浙江省',{});".format(stream)) \
.add("商家A", [list(z) for z in zip(keys, values)], "浙江", min_scale_limit=1) \
.set_global_opts(title_opts=opts.TitleOpts(title="Map-浙江省地图"),
visualmap_opts=opts.VisualMapOpts(max_=100, is_piecewise=True)
)
tl.add(map0, "{}年".format(idx))
tl.render("./html/timeline_map.html")
return

if __name__ == '__main__':
zhejiang_sync_data("data.xlsx")

如果不涉及到更改assets/maps/文件夹下的js文件,则一下两行需要删除

from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = “http://127.0.0.1:8000/assets/"

运行代码结果

代码运行结果

完整工程代码

工程代码在github 需要的可以自提。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信