10.4 练习二:地图

前置知识

基础地图演示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts

map = Map()
data = [
    ('北京市',99),
    ('上海市',199),
    ('湖南省',299),
    ('台湾省',199),
    ('安徽省',299),
    ('广州省',399),
    ('湖北省',599)
]
map.add('地图',data,'china')
map.render()

这样只实现了基础的数据导入,看起来地图还不够直观,所以我们使用全局设置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True,
        is_piecewise=True,
        pieces=[
            {"min": 1, "max": 9, "label": "1-9人", "color": "#CCFFFF"},
            {"min": 10, "max": 99, "label": "10-99人", "color": "#FFFF99"},
            {"min": 100, "max": 499, "label": "99-499人", "color": "#FF9966"},
            {"min": 500, "max": 999, "label": "499-999人", "color": "#FF6666"},
            {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CC3333"},
            {"min": 10000,"label":"10000以上","color":"#990033"}
        ])
) 

成果展示:

实操部分

全国疫情地图

数据准备

之前贴出来的所用数据有问题,这里给出新的:百度网盘 请输入提取码,目测没有不符合json格式的地方

我们再次使用之前的json视图网站JSON在线视图查看器(Online JSON Viewer),把json内容粘贴进去可见其结构主要如下面所示:


制定主要任务列表:

  • 打开并读取文件
  • 取其中省份及其对应确诊人数
  • 将取出的数据转换为适当的格式
  • 将数据导入到地图中
  • 配置地图全局设置
  • 生成地图

开始(分块讲解)

我们直接开始读取文件

1
2
3
txt = open("T:/疫情.txt",'r',encoding="UTF-8")
data = txt.read()
txt.close()

现在txt中的内容已经加载到data变量中了,接下来我们取其中数据

1
2
3
import json
dict = json.loads(data)
pro_list = dict['areaTree'][0]['children']

由之前经验可得,需要将每个省份及其对应确诊人数写成一个元组,再将所有元组封装为一个列表才能导入到pyecharts模块中。

1
2
3
4
5
data_list=[]
for pro_data in pro_list:
    pro_name = pro_data['name']
    pro_confirm = pro_data['total']['confirm']
    data_list.append((pro_name,pro_confirm))

下面是制图部分

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
map = Map()
map.add('全国确诊情况',data_list,'china')
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True,
        is_piecewise=True,
        pieces=[
            {"min": 1, "max": 9, "label": "1-9人", "color": "#CCFFFF"},
            {"min": 10, "max": 99, "label": "10-99人", "color": "#FFFF99"},
            {"min": 100, "max": 499, "label": "99-499人", "color": "#FF9966"},
            {"min": 500, "max": 999, "label": "499-999人", "color": "#FF6666"},
            {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CC3333"},
            {"min": 10000,"label":"10000以上","color":"#990033"}
        ])
) 

整合完全版

 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
import json
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
txt = open("T:/疫情.txt",'r',encoding="UTF-8")
data = txt.read()
txt.close()
dict = json.loads(data)
pro_list = dict['areaTree'][0]['children']
data_list=[]
for pro_data in pro_list:
    pro_name = pro_data['name']
    pro_confirm = pro_data['total']['confirm']
    data_list.append((pro_name,pro_confirm))
map = Map()
map.add('全国确诊情况',data_list,'china')
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True,
        is_piecewise=True,
        pieces=[
            {"min": 1, "max": 9, "label": "1-9人", "color": "#CCFFFF"},
            {"min": 10, "max": 99, "label": "10-99人", "color": "#FFFF99"},
            {"min": 100, "max": 499, "label": "99-499人", "color": "#FF9966"},
            {"min": 500, "max": 999, "label": "499-999人", "color": "#FF6666"},
            {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CC3333"},
            {"min": 10000,"label":"10000以上","color":"#990033"}
        ])
) 
map.render()

结果展示:

附加小练习:江苏疫情地图

提示: 地图类型从’china’改为’江苏’,剩余请自行挑战。

数据准备

注意:原来的数据在地名上有问题(缺少“省”、“市”后缀),我只补全了省份名称和江苏省各市名称,如有需要请自行补全。

根据上面得到的数据结构确定如何取出数据

整合完全版

 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
import json
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
txt = open("T:/疫情.txt",'r',encoding="UTF-8")
data = txt.read()
txt.close()
dict = json.loads(data)
js_list = dict['areaTree'][0]['children'][1]['children']
data_list=[]
for js_data in js_list:
    js_name = js_data['name']
    js_confirm = js_data['total']['confirm']
    data_list.append((js_name,js_confirm))
map = Map()
map.add('江苏确诊情况',data_list,'江苏')
map.set_global_opts(
    visualmap_opts=VisualMapOpts(
        is_show=True,
        is_piecewise=True,
        pieces=[
            {"min": 1, "max": 9, "label": "1-9人", "color": "#CCFFFF"},
            {"min": 10, "max": 99, "label": "10-99人", "color": "#FFFF99"},
            {"min": 100, "max": 499, "label": "99-499人", "color": "#FF9966"},
            {"min": 500, "max": 999, "label": "499-999人", "color": "#FF6666"},
            {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CC3333"},
            {"min": 10000,"label":"10000以上","color":"#990033"}
        ])
) 
map.render()

成果展示:

Licensed under CC BY-NC-SA 4.0
已存在于互联网
发表了126篇文章 · 总计210.25k字
萌ICP备20267077号
Powered by ctOS