Chapter 23 数据可视化——地图

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!


前言

随着地理信息系统(GIS)技术的迅猛发展和大数据时代的到来,数据可视化已经成为分析和理解数据的重要手段。而在众多的数据可视化形式中,地图以其独特的空间表现力,结合了数据与地理信息。本章结合案例分析详细讲解了地图的基础绘图以及视觉映射方面的内容。


本篇文章参考:黑马程序员

一、基础绘图

①基本流程

  1. 导入必要的模块:
  2. 创建地图对象
  3. 准备数据
  4. 设置全局选项
  5. 渲染或生成图像

②常见方法

MethodFunctionExample
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文件,点击右上角的浏览器图标,可以在浏览器中查看创建的地图。
在这里插入图片描述

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值