Chapter 23 数据可视化——地图
欢迎大家订阅【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
文件,点击右上角的浏览器图标,可以在浏览器中查看创建的地图。
相关文章:
Chapter 23 数据可视化——地图
欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、基础绘图二、视觉映射三、案例分析 前言 随着地理信息系统(GIS)技术的迅猛发展和大数据时代的到来,数据可视化已经成为分析和理…...
Linux笔记 --- 组合数据类型
结构体 简单的定义结构体的方法 struct student {char name;int age;float score; };//使用student模板创建两个结构体变量 struct student Jack,Rose; 结构体中可以存放除了函数以外的任何数据类型的数据,在创建结构体时student被称为结构体模板名称,…...
DaoCloud-Dockfile文件NGINX文件
Dockfile文件 安装依赖,打包,配置NGINX代理,最后把打完的包复制到服务器相应的文件夹下,构建镜像成功。 # syntax docker/dockerfile:experimental FROM xx.xx.xx.xx/public/node:16.14.2 as builder# LABEL maintainer"e…...
耳机行业中MIC ENC
0 Preface/Foreword ENC: Environment Noise Cancellation,环境降噪,主要指在通话过程中,戴着ENC通话降噪耳机的使用者,即使在嘈杂的环境,比如在嘈杂的街区,开着窗运行的汽车上,说话…...
python-自动化办公-Excel-Openpyxl
Python处理Excel数据之Openpyxl 1.1 Openpyxl库的安装使用 openpyxl模块是一个读写Excel 2010文档的 Python 库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其…...
图形编辑器基于Paper.js教程10:导入导出svg,导入导出json数据
深入了解Paper.js:实现SVG和JSON的导入导出功能 Paper.js是一款强大的矢量绘图JavaScript库,非常适合用于复杂的图形处理和交互式网页应用。本文将详细介绍如何在Paper.js项目中实现SVG和JSON格式的导入导出功能,这对于开发动态图形编辑器等…...
[STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程
0. 项目移植 对于不想知道其执行过程的朋友来说,可以直接移植,我的板子是STM32F411CER6, 512K M4内核 项目地址: Bootloader(可以自己写标志位用于自测,项目中这部分代码已经被注释,可以打开自行测试&…...
如何手写一个SpringBoot框架
你好,我是柳岸花开。 在这篇文章中,我们将手写模拟SpringBoot的核心流程,让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程,包含两个模块: springboot模块,表示Spring…...
vite解决前端跨域步骤
Vite 解决跨域问题的原理主要是通过其内置的开发服务器功能实现的,具体来说,是通过 HTTP 代理(HTTP Proxy)机制。在开发环境中,Vite 服务器可以配置为一个代理服务器,将前端应用发出的请求转发到实际的后端…...
同步交互与异步交互:深入解析与选择
同步交互与异步交互:深入解析与选择 1、同步交互2、异步交互3、选择策略 💖The Begin💖点点关注,收藏不迷路💖 在软件开发的世界里,交互方式主要分为两大类:同步与异步。下面是对这两种方式的解…...
Day1
首先,大概学习了一下用anaconda去创建一个环境(因为Django是有python版本的要求),然后学着去切换环境。 创建环境:conda create -n django_study python3.10 激活环境:conda activate django_study 删除环…...
Introduction to Data Analysis with PySpark
1.DataFrame and RDDs 2.Spark Architecture 3. Data Formats and Data Sources 倘若您觉得我写的好,那么请您动动你的小手粉一下我,你的小小鼓励会带来更大的动力。Thanks....
基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 无刷直流电机(BLDCM)原理 4.2 六步换相逆变器 4.3 双PI控制器设计 5.完整工程文件 1.课题概述 基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真。双PI控制…...
双向链表的基本操作
#include<iostream> #include<cmath> #include<cstring> using namespace std; typedef long long ll; typedef struct line {int data;struct line *pre;//前指针struct line *next;//后指针 }line,*a; line* init_line(line*head) {cout<<"请输…...
modbus tcp和modbusRTU的区别是什么?
Modbus是一种应用广泛的通信协议,主要用于工业自动化和过程控制系统。Modbus有多种变体,其中Modbus TCP和Modbus RTU是最常见的两种。以下是它们之间的主要区别: 1. 基本定义 Modbus RTU (Remote Terminal Unit): 是基于串行通信的协议&am…...
web小游戏开发:拼图(四)对调和移动拼图玩法的实现
web小游戏开发:拼图(四)对调和移动拼图玩法的实现 对调方式对调模式实现移动方式移动的实现小结对调方式 在完成了原始拼图玩法后,剩下两个玩法其实相对就变得简单的多了。 对调模式,简单来说,就是选中两个图块,然后位置对调一下。 那么,我们来整理一下,看看需要哪…...
前端:Vue学习 - 智慧商城项目
前端:Vue学习 - 智慧商城项目 1. vue组件库 > vant-ui2. postcss插件 > vw 适配3. 路由配置4. 登录页面静态布局4.1 封装axios实例访问验证码接口4.2 vant 组件 > 轻提示4.3 短信验证倒计时4.4 登录功能4.5 响应拦截器 > 统一处理错误4.6 登录权证信息存…...
KVM调整虚拟机与CPU铆钉(绑定)关系
虚拟机铆钉CPU 把虚拟机的vCPU绑定在物理CPU上,即VCPU只在绑定的物理CPU上调度,在特定场景下达到提升虚拟机性能的目的。比如在NUMAQ系统中,把vCPU绑定在同一个NUMA节点上,可以避免CPU跨节点访问内存,避免影响虚拟机运…...
华火电焰灶:烹饪新宠,温暖与美味的完美融合
在众多厨房电器中,华火电焰灶以其独特的魅力和卓越的性能脱颖而出,成为了众多家庭的烹饪新宠。今天,就让我们一同走进华火电焰灶的精彩世界,探索它的非凡之处。 华火电焰灶,首先吸引人的便是其创新的等离子电生明火技术…...
理想发周榜,不是新能源市场的原罪
余华在他的小说《在细雨中呼喊》曾写过这么一段话: “仓廪实而知礼节,衣食足而知荣辱”,在物质需求得到满足以前,精神文明的发展难免会有所滞后。所以,贫穷,不是原罪。 同样的,在如今的新能源…...
AHK是让任何软件都支持 Shift + 鼠标滚轮 实现界面水平滚动
目录 基本介绍 详细特点 图解安装 下载失败?缓慢? 创建并运行脚本代码😃 新建空 xxx.ahk文件 vscode/记事本等编辑工具打开 复制并粘贴简易脚本 运行 其他问题 问题一:弹出无法执行此脚本 关闭脚本 基本介绍 AutoHot…...
如何在C语言中实现求解超级丑数
超级丑数是一个正整数,并且它的质因数只包含在给定的质数列表中。超级丑数的定义类似于丑数,但可以根据特定需求改变质因数的范围。下面是如何在C语言中实现求解超级丑数的代码。 我们使用最小堆(优先队列)来高效地生成超级丑数序…...
secExample靶场之java反序列化漏洞复现
我是使用kali虚拟机搭建的靶场,具体搭建步骤可以看我之前的博客内容。 访问靶机地址,打开java反序列化的 点进去后是如图的页面,随便输入一信息。 可以看到敏感信息直接显示在了页面上。 访问192.168.189.141:8080/cors1,可以看到…...
解决升级Linux内核后,open files设置无效的问题。
问题过程 操作系统是OpenEuler 20.03,内核由4.19.90-2112.8.0.0131.oe1.aarch64升级到kernel-4.19.90-2401.1.0.0233.oe1.aarch64后,重启系统后,重新开起来运行OceanBase就运行不起来了,提示open files must not be less than 20…...
关于防范勒索病毒Play新变种的风险提示
近日,工业信息化部网络安全威胁和漏洞信息共享平台监测发现针对 Linux的勒索病毒Play新变种,攻击对象主要为VMware ESXi 虚拟化环境,攻击目标包括制造、建筑业、IT、金融和房地产等行业。 Play勒索病毒又名 Balloonfly和PlayCrypt࿰…...
一款.NET开源、跨平台的DASH/HLS/MSS下载工具
前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、跨平台的DASH/HLS/MSS下载工具,并且支持点播和直播(DASH/HLS)的内容下载:N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的…...
MATLAB学习日志DAY21
结构体(2) 如果将生成逗号分隔列表的表达式括在方括号中,MATLAB 会将该列表中的每一项都存储在数组中。示例中,MATLAB 创建一个数值行向量,该向量包含结构体数组 S 的每个元素的 score 字段: scores [S.…...
Spingboot请求tcp 方式
import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel;/*** 请求tcp接口** author Mr丶s* date 2024/7/1…...
leetcode刷题日记-括号生成
题目描述 题目解析 回溯的题目,不过这个两个if我就感觉有点难以理解了,不过仔细的思考了一下,确实考虑到了每个位置的情况,特别是针对右边括号 题目代码 class Solution:def generateParenthesis(self, n: int) -> List[str…...
小程序按钮分享
使用button设置: open-type"share":来微信分享; html: <button open-type"share"></button>...
wordpress+刷新/怎么制作一个网页
作者:chris 来自:IBM 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel,pdf等文档的内容?我研究了一下,在这里总结一下抽取word,pdf的几种方法。 1. 用jaco…...
外贸网站好做吗/网络推广是什么工作内容
介绍 此款源码是彻底解放劳动人民的双手,全自动采集,模板代码也进行了全面优化,更加有助于SEO 下载链接 http://www.bytepan.com/iTHwNKE6vZD 图片...
开网站做备案需要什么资料/企业培训权威机构
文章目录Rust的智能指针--RefCell<T>注意:Rust的智能指针–RefCell 现在我定义一个接口Messager,用来send消息。 pub trait Messager {fn send(&self, msg: &str); }然后一个LimitTracker类型根据指定的配额来send消息* pub struct Limi…...
自己做h5网站/全国疫情高峰感染高峰
与Non-mutating Algorithms相比,变易算法能修改容器元素数据,可进行序列数据的复制、交换、替换、填充、移除、旋转、随机抖动、分割。还是参考叶至军的那本书以及网站Cplusplus.com copy 元素复制。该函数用于容器间元素拷贝,将迭代器区间[…...
汽配网站源码/网店如何引流与推广
git .git目录提交我正在撰写一篇文章,概述了如何编写良好的Git提交消息,以及开发人员应遵循的各种Git提交消息约定和规则。 但是,正如我写的开发人员应遵循的最佳做法,我不断地发现自己在哪些开发商不应该做一个内部讨论。 我希望…...
电脑怎么下免费wordpress/广州seo网络推广员
有关51单片机中断的形式和C语言编程格式void INT0()interrupt 0 using 1 {.... ..... } interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt …...