当前位置: 首页 > news >正文

Chapter 23 数据可视化——地图

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

文章目录

  • 前言
  • 一、基础绘图
  • 二、视觉映射
  • 三、案例分析


前言

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


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

一、基础绘图

①基本流程

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

②常见方法

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

http://www.lryc.cn/news/412423.html

相关文章:

  • Linux笔记 --- 组合数据类型
  • DaoCloud-Dockfile文件NGINX文件
  • 耳机行业中MIC ENC
  • python-自动化办公-Excel-Openpyxl
  • 图形编辑器基于Paper.js教程10:导入导出svg,导入导出json数据
  • [STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程
  • 如何手写一个SpringBoot框架
  • vite解决前端跨域步骤
  • 同步交互与异步交互:深入解析与选择
  • Day1
  • Introduction to Data Analysis with PySpark
  • 基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真
  • 双向链表的基本操作
  • modbus tcp和modbusRTU的区别是什么?
  • web小游戏开发:拼图(四)对调和移动拼图玩法的实现
  • 前端:Vue学习 - 智慧商城项目
  • KVM调整虚拟机与CPU铆钉(绑定)关系
  • 华火电焰灶:烹饪新宠,温暖与美味的完美融合
  • 理想发周榜,不是新能源市场的原罪
  • AHK是让任何软件都支持 Shift + 鼠标滚轮 实现界面水平滚动
  • 如何在C语言中实现求解超级丑数
  • secExample靶场之java反序列化漏洞复现
  • 解决升级Linux内核后,open files设置无效的问题。
  • 关于防范勒索病毒Play新变种的风险提示
  • 一款.NET开源、跨平台的DASH/HLS/MSS下载工具
  • MATLAB学习日志DAY21
  • Spingboot请求tcp 方式
  • leetcode刷题日记-括号生成
  • 小程序按钮分享
  • 多模态多智能体,在实现系统2(深思熟虑)方面的探索