【完美解决】 Python pyecharts Map 地图数据不显示

目录

  • 项目场景
  • 问题描述
  • 原因分析
  • 解决方案
  • 完整代码

项目场景

Python数据可视化,使用 Pyecharts.charts 模块中的Map,并导入数据来构建全国疫情热力地图

B站 黑马程序员 Python课程【P106 第一阶段 - 第十一章 - 02全国疫情地图构建】


问题描述

  本人在学习该章节课程时,代码和视频中的代码是完全一致的,但是生成的地图却和视频中不一样,生成结果中,不显示地图热力和数据,问题代码及运行结果如下:

import json
from pyecharts.charts import Map
from pyecharts.options import *# 读取数据文件
f = open("C:\\Users\\18379\\Desktop\\可视化案例数据\\地图数据\\疫情.txt", "r", encoding="UTF-8")
data = f.read()
# 关闭文件
f.close()# 将字符串json转换为python的字典
data_dict = json.loads(data)# 从字典中取出省份的数据
province_data_list = data_dict["areaTree"][0]["children"]# 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
data_list = []
for province_data in province_data_list:province_name = province_data["name"]province_confirm = province_data["total"]["confirm"]data_list.append((province_name, province_confirm))# 创建地图对象
map = Map()# 添加数据
map.add("各省份确诊人数", 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, "lable": "1~99人", "color": "#CCFFFF"},{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},{"min": 100000, "lable": "100000+", "color": "#990033"},])
)# 绘图
map.render("全国疫情地图.html")

运行结果:

在这里插入图片描述


原因分析

  在代码和所使用数据完全一致的情况下,仍然得不到正确的结果,所以只能去考虑是不是pyecharts版本问题,该视频上传时间是在2022年8月,时隔一年很可能是pyecharts版本进行了更新,导致代码出现bug,此时我们再仔细观察视频中生成的地图,与自己生成的地图进行对比,能够发现一些问题,对比如下:

在这里插入图片描述
  通过以上对比很明显能够发现,两者省份名称不对应,所以可以大胆猜测,是不是从文本数据中提取出的省份信息与Map中内置的省份名称不对应所导致的数据不能正常显示呢?下面我们来验证一下自己的想法。


解决方案

第一步:

  我们通过for循环从文本中提取各省份对应数据,得到 data_list 后先打印一下其中的内容看一眼,显然列表中的省份名称与视频中生成地图的省份名称是对应的,而与我们生成地图中的省份名称不对应。

在这里插入图片描述
第二步:

  尝试更改 data_list 中省份名称,使其与Map中省份名称对应,在for循环体中增加如下代码,来处理省份不匹配问题。

注意:23个省 + 5个自治区 + 4个直辖市 +2个特别行政区

# 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
data_list = []
for province_data in province_data_list:province_name = province_data["name"]province_confirm = province_data["total"]["confirm"]#处理省份不匹配问题if province_name == "新疆":province_name = "新疆维吾尔自治区"elif province_name == "广西":province_name = "广西壮族自治区"elif province_name == "宁夏":province_name = "宁夏回族自治区"elif province_name in ["内蒙古","西藏"]:province_name = province_name + "自治区"elif province_name in ["北京","天津","重庆","上海"]:province_name = province_name + "市"elif province_name in ["香港","澳门"]:province_name = province_name + "特别行政区"else:province_name = province_name + "省"data_list.append((province_name, province_confirm))
print(data_list)

第三步:

  重新运行并打印 data_list ,此时省份名称已更改,查看地图,热力和数据正常显示,问题解决!

在这里插入图片描述
在这里插入图片描述

完整代码

import json
from pyecharts.charts import Map
from pyecharts.options import *# 读取数据文件
f = open("C:\\Users\\18379\\Desktop\\可视化案例数据\\地图数据\\疫情.txt", "r", encoding="UTF-8")
data = f.read()
# 关闭文件
f.close()# 将字符串json转换为python的字典
data_dict = json.loads(data)# 从字典中取出省份的数据
province_data_list = data_dict["areaTree"][0]["children"]# 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
data_list = []
for province_data in province_data_list:province_name = province_data["name"]province_confirm = province_data["total"]["confirm"]#处理省份不匹配问题if province_name == "新疆":province_name = "新疆维吾尔自治区"elif province_name == "广西":province_name = "广西壮族自治区"elif province_name == "宁夏":province_name = "宁夏回族自治区"elif province_name in ["内蒙古","西藏"]:province_name = province_name + "自治区"elif province_name in ["北京","天津","重庆","上海"]:province_name = province_name + "市"elif province_name in ["香港","澳门"]:province_name = province_name + "特别行政区"else:province_name = province_name + "省"data_list.append((province_name, province_confirm))
print(data_list)# 创建地图对象
map = Map()# 添加数据
map.add("各省份确诊人数", 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, "lable": "1~99人", "color": "#CCFFFF"},{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},{"min": 100000, "lable": "100000+", "color": "#990033"},])
)# 绘图
map.render("全国疫情地图.html")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/166978.shtml

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

相关文章

vue+face-api.js实现前端人脸识别功能

近期做了一个前端vue实现人脸识别的功能,主要功能逻辑包含:人脸识别,人脸验证,唤起摄像头视频流之后从三个事件(用户点头、摇头、眨眼睛)中随机选中两个事件,待两个事件通过判断后人脸静止不动3…

基于Java+Vue+uniapp微信小程序微信阅读网站平台设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

使用端口扫描工具解决开放端口威胁并增强安全性

从暴露网络漏洞到成为入侵者的通道,开放端口可能会带来多种风险向量,威胁到网络的机密性、完整性和可用性。因此,最佳做法是关闭打开的端口,为了应对开放端口带来的风险,网络管理员依靠端口扫描工具来识别、检查、分析…

ubuntu下配置qtcreator交叉编译环境

文章目录 安装交叉编译工具安装qt creator开发环境配置交叉编译示例demo参考 安装交叉编译工具 安装qt creator开发环境 1 官网 2 填写信息 3 下载 默认没有出现Qt5.15版本 WISONIC\80081001ub16-1001:~$ /opt/Qt/Tools/QtCreator/bin/qtcreator /opt/Qt/Tools/QtCreat…

【PDF.js】2023 最新 PDF.js 在 Vue3 中的使用

因为自己写业务要定制各种 pdf 预览情况(可能),所以采用了 pdf.js 而不是各种第三方封装库,主要还是为了更好的自由度。 一、PDF.js 介绍 官方地址 中文文档 PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。 pdf.js 是社区…

ThreeJs实现简单的动画

上一节实现可用鼠标控制相机的方式实现动态效果,但很多时候是需要场景自己产恒动态效果,而不是通过鼠标拖动,此时引入一个requestAnimationFrame方法,它实际上是通过定时任务的方式,每隔一点时间改变场景中内容后重新渲…

Ant Design Vue 树形表格计算盈收金额

树形表格计算 一、盈收金额计算1、根据需要输入的子级位置,修改数据2、获取兄弟节点数据,并计算兄弟节点的金额合计3、金额合计,遍历给所有的父级 一、盈收金额计算 1、根据需要输入的子级位置,修改数据 2、获取兄弟节点数据&am…

销售管理系统的实用性怎么样?

销售管理系统好用吗?好用,销售管理系统可以管理销售流程、自动化大量重复性工作,让销售人员从琐碎的任务中挣脱出来,投入到客户跟进和维护客户关系之中。那么,CRM系统的好用体现在哪些方面? 1.加速销售流程…

react中的state

没想到hooks中也有state这一说法 看下面的两个案例 1、无state变化不会执行父子函数 2、有state更改执行父子函数

深度学习之六(自编码器--Autoencoder)

概念 自编码器(Autoencoder)是一种神经网络架构,用于无监督学习和数据的降维表示。它由两部分组成:编码器(Encoder)和解码器(Decoder)。 结构: 编码器(Encoder): 接收输入数据并将其压缩为潜在表示(latent representation),通常比输入数据的维度要低。编码器的…

最详细的软件测试面试题整理与分析

前言 时光荏苒,一转眼到了2023年末尾,2024年也快要来了,人员就业市场以往的寒冬也貌似有了转暖的迹象,身边大批的就业人员也开始了紧张的备战之中。 近几周也和多家合作公司的HR进行了沟通,发现虽然岗位就业情况较去年…

vue3中引入svg矢量图

vue3中引入svg矢量图 1、前言2、安装SVG依赖插件3、在vite.config.ts 中配置插件4、main.ts入口文件导入5、使用svg5.1 在src/assets/icons文件夹下引入svg矢量图5.2 在src/components目录下创建一个SvgIcon组件5.3 封装成全局组件,在src文件夹下创建plugin/index.t…

一键创新 | 拓世法宝AI智能直播一体机激发房产自媒体创造力

在数字化时代,房产销售已然不再是传统的模式。随着社交媒体和自媒体的兴起,短视频直播成为房产自媒体营销的新风口。然而,行业也面临着诸多挑战,如何更好地利用新媒体拓展市场,提升自媒体效果成为摆在业内人士面前的难…

JMeter测试报错422 Unprocessable Entity

添加HTTP信息头: ​ HTTP请求-》添加-〉配置元件-》HTTP信息头管理器 ​ 如果需要送json,需要添加Content-Type:application/json,否则会报【422 Unprocessable Entity】

好用的CRM系统到底有多重要?怎么选?

我们都知道,CRM软件可以让企业效率加倍。但如果选错了CRM,企业损失点钱是小,客户转化率下降才是大。下面我们就来说说,市面上有哪些好用的CRM?以及好用的CRM软件的重要性。 好用的CRM软件的重要性: 客户管…

Qt 软件调试(一) Log日志调试

终于这段时间闲下来了,可以系统的编写Qt软件调试的整个系列。前面零零星星的也有部分输出,但终究没有形成体系。借此机会,做一下系统的总结。慎独、精进~ 日志是有效帮助我们快速定位,找到程序异常点的实用方法。但是好的日志才能…

百度 文心一言 sdk 试用

JMaven Central: com.baidu.aip:java-sdk (sonatype.com) Java sdk地址如上: 文心一言开发者 文心一言 (baidu.com) ERNIE Bot SDK https://yiyan.baidu.com/developer/doc#Fllzznonw ERNIE Bot SDK提供便捷易用的接口,可以调用文心一言的能力&#…

口袋参谋:如何避免宝贝被降权?这招屡试屡爽!

​至少99.99999%的店铺在今年都被降权过!各家店铺被降权的原因,无非就一个原因,那就是s单! s单的风险也就两种,一是操作问题,二是账号问题。 操作问题被降权,这个大家都心知肚明,s…

5大原因,设备校准为什么是实验室搬迁后的首要任务?

实验室搬迁是一个复杂而紧张的过程。要考虑的事情太多,很容易忽视您最重要的任务之一——检查设备在新环境中的性能。 校准对于确保设备安全运行和遵守监管标准至关重要。 1.保持合规性并遵守法律要求 生物技术和制药等行业有特定的校准要求,实验室必…

浅谈安科瑞直流电表在印尼某基站的应用

摘要:本文介绍了安科瑞直流电表在印尼的应用。主要用于印尼某基站的电流电压电能的计量,配合霍尔传感器对基站进行计量。 Abstract: This article introduces the application of Acrel DC meters in base station in Indonesia.The device is measuri…