欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!
文章目录
- 前言
- 一、基础绘图
- 二、视觉映射
- 三、案例分析
前言
随着地理信息系统(GIS)技术的迅猛发展和大数据时代的到来,数据可视化已经成为分析和理解数据的重要手段。而在众多的数据可视化形式中,地图以其独特的空间表现力,结合了数据与地理信息。本章结合案例分析详细讲解了地图的基础绘图以及视觉映射方面的内容。
本篇文章参考:黑马程序员
一、基础绘图
①基本流程
- 导入必要的模块:
- 创建地图对象
- 准备数据
- 设置全局选项
- 渲染或生成图像
②常见方法
方法 | 作用 | 示例 |
---|---|---|
add() | 添加地图数据 | map.add("系列名称", data, maptype="中国") |
set_global_opts() | 设置全局配置,如标题、视觉映射等 | map.set_global_opts(title_opts=opts.TitleOpts(title="地图标题")) |
set_series_opts() | 设置系列特定配置,如标签、样式等 | map.set_series_opts(label_opts=opts.LabelOpts(show=True)) |
render() | 渲染地图并保存为 HTML 文件 | map.render("map.html") |
set_colors() | 自定义颜色渐变 | map.set_colors(['#d48265', '#91c7ae']) |
add_geo_json() | 使用 GeoJSON 数据,支持自定义地图形状 | map.add_geo_json("地图名称", geo_json_data) |
set_tooltip() | 自定义 tooltip 的显示方式 | map.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")) |
visualmap() | 添加视觉映射组件,用于设置数据范围的颜色 | map.add("系列名称", data, is_map_symbol=True) |
set_series_opts() | 设置地图系列的样式,如区域高亮等 | map.set_series_opts(itemstyle_opts={"areaColor": "#ccc"}) |
set_js_resources() | 设置依赖的 JavaScript 资源(如地图文件) | map.set_js_resources([{"src": "地图文件的 URL"}]) |
from pyecharts.charts import Map
# 准备地图对象
map=Map()
# 准备数据
data=[
("北京市",99),
("上海市",199),
("湖南省",299),
("广东省",499),
]
# 添加数据
map.add("疫情地图",data,"china")
# 绘图
map.render()
打开render.html
文件,点击右上角的浏览器图标,可以在浏览器中查看创建的地图。
二、视觉映射
设置 Pyecharts 地图的全局选项中的视觉映射(visualmap)配置,可根据数据的不同区间将不同的颜色应用于地图上的不同区域,使得用户在查看地图时能够更加直观地理解数据的含义和分布特点。
常用方法:
属性 | 描述 |
---|---|
is_show | 控制视觉映射组件是否显示。 |
is_piecewise | 是否使用分段视觉映射(True 或 False) |
pieces | 定义视觉映射的具体区间及其对应的属性(每个元素为一个字典) |
min_ | 指定数据的最小值,用于定义数据范围 |
max_ | 指定数据的最大值,用于定义数据 |
orient | 控制视觉映射组件的方向("horizontal" 或 "vertical" ) |
text | 设定视觉映射中显示的文本内容,通常是颜色条的标签 |
in_range | 设置数据值范围内的颜色,可以是颜色列表 |
out_of_range | 设置超出数据值范围的区域的颜色 |
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
# 准备地图对象
map=Map()
# 准备数据
data=[
("北京市",99),
("上海市",199),
("湖南省",299),
("广东省",499),
]
# 添加数据
map.add("疫情地图",data,"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":"#FF6666"},
{"min":100,"max":500,"label":"100-500","color":"#990033"}
]
)
)
打开render.html
文件,点击右上角的浏览器图标,可以在浏览器中查看创建的地图。
三、案例分析
【案例一:国内疫情地图绘制】
疫情.txt文本文件存储了2021年08月18日中国各省份疫情相关数据,请根据该数据绘制各省份疫情确诊人数地图。
由于该JSON格式的数据量大且嵌套层次深,我们可以利用格式化工具将该数据格式化,便于我们去理解数据的层次和关系。(相关知识点请见深入理解JSON这篇文章)
格式化数据后:
# 导包
import json
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts,TitleOpts
# 读取数据
f=open("D:/疫情.txt","r",encoding="UTF-8")
data=f.read()
# 关闭文件
f.close()
# 取到各个省份的数据
# 将字符串转换为python字典
data_dict=json.loads(data)
# 从字典中取出省份数据
province_data_list=data_dict["areaTree"][0]["children"]
# 绘图需要用到的数据列表
data_list=[]
# 组装每个省份和确诊人数为元组
for province_data in province_data_list:
# Pyecharts 的中国地图根据特定的标准名称来识别省份
# 省的名称通常以“省”结尾,如果不包含这个后缀,Pyecharts 将无法在地图上找到对应的省份进行渲染
province_name=province_data["name"]+"省" # 得到省份名称
province_confirm=province_data["total"]["confirm"] # 得到确诊人数
# 将各个省份的数据都封装入列表内
data_list.append((province_name,province_confirm))
# 创建地图对象
map=Map()
# 添加数据
map.add("2021年08月18日中国各省份疫情确诊人数",data_list,"china")
# 设置全部配置,定制分段的视觉映射
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"},
{"min": 100, "max": 999, "label": "100-999", "color": "#FFFF99"},
{"min": 1000, "max": 4999, "label": "1000-4999", "color": "#FF9966"},
{"min": 5000, "max":9999, "label": "5000-9999", "color": "#FF6666"},
{"min": 10000, "max": 99999, "label": "10000-99999", "color": "#CC3333"},
{"min": 100000, "label": "100000+", "color": "#990033"}
]
)
)
# 绘图
map.render()
打开render.html
文件,点击右上角的浏览器图标,可以在浏览器中查看创建的地图。
【案例二:省级疫情地图绘制】
疫情.txt文本文件存储了2021年08月18日中国各省份疫情相关数据,请根据该数据绘制河南省疫情确诊人数地图。
由于该JSON格式的数据量大且嵌套层次深,我们可以利用格式化工具将该数据格式化,便于我们去理解数据的层次和关系。(相关知识点请见深入理解JSON这篇文章)
格式化数据后:
# 导包
import json
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts,TitleOpts
# 读取数据
f=open("D:/疫情.txt","r",encoding="UTF-8")
data=f.read()
# 关闭文件
f.close()
# 取到河南省的数据
# 将json数据转换为python字典
data_dict=json.loads(data)
# 从字典中取出河南省的数据
cities_data=data_dict["areaTree"][0]["children"][3]["children"]
# 绘图需要用到的数据列表
data_list=[]
# 准备数据为元组并放入list
for city_data in cities_data:
# Pyecharts 的中国地图根据特定的标准名称来识别市
# 市的名称通常以“市”结尾,如果不包含这个后缀,Pyecharts 将无法在地图上找到对应的市进行渲染
city_name=city_data["name"]+"市" # 得到市的名称
city_confirm=city_data["total"]["confirm"] # 得到确诊人数
# 将河南省各个市的数据都封装入列表内
data_list.append((city_name,city_confirm))
# 创建地图对象
map=Map()
# 添加数据
map.add("2021年08月18日河南省疫情确诊人数分布",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"},
{"min": 100, "max": 999, "label": "100-999", "color": "#FFFF99"},
{"min": 1000, "max": 4999, "label": "1000-4999", "color": "#FF9966"},
{"min": 5000, "max":9999, "label": "5000-9999", "color": "#FF6666"},
{"min": 10000, "max": 99999, "label": "10000-99999", "color": "#CC3333"},
{"min": 100000, "label": "100000+", "color": "#990033"}
]
)
)
# 绘图
map.render()
打开render.html
文件,点击右上角的浏览器图标,可以在浏览器中查看创建的地图。