一、pyecharts—地图快速入门
假设我们要将6个地区的某种数量在地图上标注出来,首先导入pyecharts包内地图相关模块,然后准备地图数据(数据类型是列表,列表的元素类型为元组),然后把准备好的数据添加进地图。补充细节,设置全局选项,不同的数量段用不同颜色标注出来,使效果更加直观。最后,生成地图。
代码示例:
#导包
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
#构建地图
map=Map()
#准备地图数据
data=[ #数据类型:元素类型为元组的列表
('北京市',99),
('上海市',199),
('湖南省',299),
('山东省',199),
('安徽省',499),
('河南省',366),
('湖北省',599)
]
#添加地图数据
map.add('地图',data,'china') #不输入地图类型'China'也默认是'China'
#设置全局选项
map.set_global_opts(
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True, #手动校准范围
pieces=[ #范围定义是一个列表
{'min': 1, 'max': 9, 'label': '1-9人', 'color': '#CCFFFF'}, #'color': '#CCFFFF'颜色值,详见RGB颜色对照表
{'min': 10, 'max': 99, 'label': '10-99人', 'color': '#FFFF99'},
{'min': 100, 'max': 299, 'label': '100-299人', 'color': '#6699FF'},
{'min': 300, 'max':499, 'label': '300-499人', 'color': '#F38F24'},
{'min': 500, 'max': 599, 'label': '500-599人', 'color': '#CC3333'},
{'min': 600, 'label': '600人以上', 'color': '#990033'},
]
)
)
#生成地图
map.render()
运行代码后会产生新文件render.html,用Edge浏览器打开,即可看到生成的地图。
关于Map_visualmap_piecewise的详细说明,可访问官网:
DocumentDescriptionhttps://gallery.pyecharts.org/#/Map/map_visualmap_piecewise在设置全局选项时,用到了颜色值,颜色值是6位,什么值对应什么颜色,可通过RGB颜色对照表一一对应。
可访问如下网站进行了解RGB颜色对照表:RGB颜色对照表-RGB颜色查询对照表-颜色代码表-颜色的英文名称大全-懒人工具|www.ab173.com懒人站长工具提供RGB颜色对照表,RGB颜色查询对照表、常见的网页颜色代码表,常见颜色的英文名称颜色表查询!http://www.ab173.com/gongju/ui/rgb.php
二、进阶-全国疫情地图
2.1分析文件数据
文件“ 疫情.txt ”记录了全国各个地区的疫情数据(确诊人数,治愈人数等等),文件链接:
链接:https://pan.baidu.com/s/1Q9az5lIKuWbMTIxzXRtX_A?pwd=1yts
提取码:1yts
文件“ 疫情.txt ”是标准的json格式,我们通过网站(如下所示)可以更直观地看出数据层级。在线JSON校验格式化工具(Be JSON)在线,JSON,JSON 校验,格式化,xml转json 工具,在线工具,json视图,可视化,程序,服务器,域名注册,正则表达式,测试,在线json格式化工具,json 格式化,json格式化工具,json字符串格式化,json 在线查看器,json在线,json 在线验证,json tools online,在线文字对比工具https://www.bejson.com/
使用步骤如图:
数据层级如下:
通过在线网站工具,点击“+",一级一级展开,体验展开过程,也许会更容易理解。
简单分析完数据层级后,我们决定要做一个反映各个省份疫情确诊人数的地图,则地图类型默认中国,地图数据类型为列表,列表内元素类型为元组,一个元组就包括:一个省份名称+确诊人数。
2.2处理数据
我们要处理一下文件“ 疫情.txt ”中的数据,数据本身就是标准的json格式,不再需要处理开头与结尾,步骤如下:
- 首先,我们要读取数据文件。
- 然后将json数据转换为python字典。
- 然后从字典中取出children列表内的数据(即包括省份名称+确诊人数的数据)。
- 最后利用for循环组装每个省份名称+确诊人数为元组,将所有元组封装在列表内。
代码如下所示:
#准备地图数据
#读取数据文件
f=open('E:/可视化案例数据/地图数据/疫情.txt','r',encoding='UTF-8')
data=f.read() #获取文件内全部数据
#取完数据后就用不到文件了,关闭文件即可
f.close()
#将json数据转换为python字典
data_dict=json.loads(data)
#从字典中取出省份数据
province_data_list=data_dict['areaTree'][0]['children']
#组装每个省份名称和确诊人数为元组,将所有元组封装在列表内
data_list=[] #绘图要用到的数据列表
for province_data in province_data_list:
province_name=province_data['name']+'省' #省份名称,拼接字符串的原因在代码下方
province_confirm=province_data['total']['confirm'] #确诊人数
data_list.append((province_name,province_confirm)) #放入列表中
第三步:从字典中取出children列表内的数据(即包括省份名称+确诊人数的数据),我们需要先访问字典data_dict中的列表'areaTree',然后访问列表'areaTree'中第一个元素,其类型为字典,然后访问此字典内的列表'children',结合数据层级图,更容易理解。
第四步:利用for循环组装每个省份名称+确诊人数为元组,将所有元组封装在列表内,在获取省份名称的时候,我在后面拼接了字符串'省',因为现在pyecharts包要求,地区后面添加上相应后缀:省,市,行政区,最后生成的地图才会显示数据,而我们现在用的这份文件没有相应后缀,所以我拼接了字符串'省',至于市和行政区,我没有再去添加,最后生成的地图也没有市和行政区的数据,还望读者见谅。还有一个需要注意的问题:append函数的参数只有1个,我们在此处追加的是元组类型的元素,追加了一个元组,元组内是省份名称+确诊人数2个参数,不要忽略元组的括号。
回顾append函数:http://t.csdnimg.cn/kKNQE 3.3.2在列表尾部添加指定元素。回顾元组知识:http://t.csdnimg.cn/XIMOe 。
2.3构建地图
构建地图的步骤如下所示:
- 首先构建地图对象map
- 添加上一步处理好的数据
- 设置全局配置选项(标题,地区颜色)
- 生成地图
代码如下:
#构建地图
map=Map()
#添加地图数据
map.add('全国各省份确诊人数',data_list) #最后一个参数没写,默认地图类型为中国
#设置全局配置选项
map.set_global_opts(
title_opts=TitleOpts(title='全国疫情地图'), #设置地图标题
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True, #是否分段
pieces=[ #定义分段范围
{'min': 1, 'max': 99, 'label': '1-99人', 'color': '#CCFFFF'}, #'color': '#CCFFFF'颜色值,详见RGB颜色对照表
{'min': 100, 'max': 999, 'label': '100-999人', 'color': '#FFFF99'},
{'min': 1000, 'max': 4999, 'label': '1000-4999人', 'color': '#6699FF'},
{'min': 5000, 'max':9999, 'label': '5000-9999人', 'color': '#F38F24'},
{'min': 10000, 'max': 99999, 'label': '10000-99999人', 'color': '#CC3333'},
{'min': 100000, 'label': '10万人以上', 'color': '#990033'},
]
)
)
#生成地图
map.render('全国疫情地图.html') #控制生成的文件名
运行代码后会产生新文件 “ 全国疫情地图.html ” ,用Edge浏览器打开,即可看到生成的地图。