Chapter 23 数据可视化——地图

news2024/12/24 20:04:20

欢迎大家订阅【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.coloradmin.cn/o/1969880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

供应链下生产计划有什么新要求?详解供应链下生产计划编制步骤!

在当今全球化和市场快速变化的商业环境中,供应链管理下的生产计划比以往任何时候都更为关键。企业不仅要应对需求的波动和供应的不确定性,还要在激烈的市场竞争中保持敏捷和效率。有效的生产计划已成为制造业乃至整个供应链成功的核心。本文将深入探讨供…

一款.NET开源、跨平台的DASH/HLS/MSS下载工具

前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、跨平台的DASH/HLS/MSS下载工具,并且支持点播和直播(DASH/HLS)的内容下载:N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的…

更改ubuntu的主屏幕

一、【问题描述】 如果有多个屏幕连接到ubuntu,Ubuntu的这个上面的通知栏如果不在我们希望的位置,会让人很不舒服,这个是根据主屏幕位置显示的,这个文章水一下如何改这个 二、【解决方法】 总之就是两个命令,先查再改…

3.Java面试题之AQS

1. 写在前面 AQS(AbstractQueuedSynchronizer)是Java并发包(java.util.concurrent)中的一个抽象类,用于实现同步器(如锁、信号量、栅栏等)。AQS提供了一种基于FIFO队列的机制来管理线程的竞争和…

condapytorch环境搭建笔记

1. 安装conda 官网安装地址:https://docs.anaconda.com/anaconda/install/linux/ 下载Installer curl -O https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh注:可以到这里查看和选择适合的版本:https://repo.anacon…

实验2-4-6 求交错序列前N项和

//实验2-4-6 求交错序列前N项和//本题要求编写程序&#xff0c;计算交错序列 1-2/33/5-4/75/9-6/11... 的前N项之和。 #include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);//输入在一行中给出一个正整数N。double sum0;for(int i1…

SpringCloud Alibaba 微服务(三):OpenFeign

目录 前言 一、什么是OpenFeign&#xff1f; Feign 的实现 Feign 和 OpenFeign 的区别 二、OpenFeign的优点 三、基本用法 新建子工程 配置文件 服务注册 ​编辑 新建Controller 引入依赖 创建接口 启动类开启Feign注解 访问测试 四、FeignClient 标签的常用属性…

solidity抽象(abstract)合约(很常用)

当合约中至少有一个函数没有被实现&#xff0c; 或者合约没有为其所有的基本合约构造函数提供参数时&#xff0c; 合约必须被标记为 abstract。 即使不是这种情况&#xff0c;合约仍然可以被标记为 abstract&#xff0c; 例如&#xff0c;当您不打算直接创建合约时。 抽象&a…

Langchain-Chatchat3.1——搜索引擎bing与DuckDuckGo

Langchain-Chatchat3.1——搜索引擎bing与DuckDuckGo 1. 前提是咱们的Chatchat服务一起部署好了&#xff0c;可以参考 Langchain-Chatchat3.1版本docker部署流程——知识库问答 2. 搜索引擎 DuckDuckGo&#xff1a;该搜索引擎不需要key&#xff0c;但是需要全球上网服务&…

MongoDB change stream 详解

文章目录 什么是 Chang Streams实现原理故障恢复使用场景Spring Boot整合Chang Stream 什么是 Chang Streams Change Stream指数据的变化事件流&#xff0c;MongoDB从3.6版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案&#xff0c;类…

MySQL基础练习题16-电影评分

题目 准备数据 分析数据 总结 题目 查找评论电影数量最多的用户名。如果出现平局&#xff0c;返回字典序较小的用户名。 查找在 February 2020 平均评分最高 的电影名称。如果出现平局&#xff0c;返回字典序较小的电影名称。 准备数据 ## 创建库 create database db; u…

微信小程序电商直播功能如何开通?

作者&#xff1a;阿龙 目前&#xff0c;公域直播电商平台&#xff08;抖音、快手、视频号等&#xff09;的获客流量成本越来越高&#xff0c;同时监管规则越来越严&#xff0c;扣点越来越高&#xff0c;并且没有用户分销机制&#xff0c;这些都在迫使商家尽快建立自己的私域直…

苹果Vision Pro在中国市场遇冷?连黄牛都炒不动了

随着科技巨头苹果公司推出的首款混合现实头戴设备Vision Pro正式登陆中国市场&#xff0c;这款备受瞩目的产品引发了广泛关注。 然而&#xff0c;短短一周之后&#xff0c;许多早期尝鲜的用户却开始陆续退场。究竟是什么原因导致大量用户选择退场呢&#xff1f;本文将从多个维…

绝密!OceanBase OBCP备考模拟题讲解(3)

「源de爸讲数据库」每天更新OceanBase OBCP题库及全网独家超详细题目解析&#xff0c;祝您早日持证上岸&#xff01; 现如今&#xff0c;一大批国产数据库随着国产化浪潮&#xff0c;已经逐步被越来越多的人认可。OceanBase便是其中一个优秀代表。 做这个日更专题&#xff0c…

ESP32-C2 烧录

自动下载电路 dtr rts &#xff1b;WCH 提供了相应的芯片&#xff0c;实现自动下载 CH340X &#xff08;*不要使用天问的下载器&#xff0c;电压为5V&#xff0c;下载前会重启电源&#xff0c;导致无法识别ESP芯片&#xff0c;修改&#xff0c;将电源线重引出 使用IDF编辑完成…

实测体验:劣质宠物空气净化器有啥危害?值得买的养宠空气净化器

作为一名猫咖店老板&#xff0c;换季时节&#xff0c;家中不仅要面对恼人的异味&#xff0c;还要忍受满天飞舞的猫毛&#xff0c;真是让人头疼。虽然和毛孩子在一起充满了乐趣&#xff0c;但随之而来的毛发和异味问题却令人苦不堪言。普通的空气净化器虽然能净化空气&#xff0…

写一个图片裁剪的js,JavaScript图片裁剪插件PlusCropper

在前端开发中&#xff0c;图片裁剪是一个常见的需求。本文将深入解析一个功能完善的JavaScript图片裁剪插件——PlusCropper&#xff0c;带你一步步了解其实现原理和使用方法。 一、插件概述 PlusCropper是一个轻量级的JavaScript插件&#xff0c;它允许用户在网页上交互式地…

CTFHUB-文件上传-双写绕过

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 上传一句话木马 1.php&#xff0c;抓包&#xff0c;双写 php 然后放包&#xff0c;上传成功 蚁剑连接 在“/var/www/html/flag_484225427.php”找到了 flag

How Can I display Reference/Citation using Streamlit Application?

题意&#xff1a;怎样在Streamlit应用程序中显示参考文献或引用&#xff1f; 问题背景&#xff1a; I have created an Azure AI Search Service, created index using Azure Blob Storage and Deployed a web application and made a chat Playground using AzureOpenAI. 我…

CSS使用渐变实现Chrome标签栏效果

这次来看一个带特殊圆角导航栏布局&#xff0c;如下谷歌浏览器的标签栏&#xff1a; 这样一个布局如何实现呢&#xff1f; CSS 渐变几乎是无所不能的&#xff0c;什么的图形都能绘制&#xff0c;这里可以拆分一下&#xff0c;两个矩形&#xff0c;两个圆形&#xff0c;还有两个…