【完美解決】 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.pswp.cn/news/166978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166978.shtml
英文地址,請注明出處:http://en.pswp.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 是社區…

flutter與原生Android通信方式之MethodChannel

閑來無事,flutter好久沒看了,上次折騰flutter與Android通信沒折騰完,有些事情耽擱了,這次繼續 演示效果: flutter與Android原生通信 flutter端 import package:flutter/cupertino.dart; import package:flutter/mater…

ThreeJs實現簡單的動畫

上一節實現可用鼠標控制相機的方式實現動態效果,但很多時候是需要場景自己產恒動態效果,而不是通過鼠標拖動,此時引入一個requestAnimationFrame方法,它實際上是通過定時任務的方式,每隔一點時間改變場景中內容后重新渲…

筆記:如何搭建一套前端監控系統?(持續更新中)

數據敏感處理 數據加密,對涉及用戶隱私的數據做到加密防護 獨立部署,不和其它應用共享監控系統 不采集具體數據,只采集用戶操作數據 錯誤采集 Runtime Error: JS運行錯誤,可通過error監聽器捕獲 load Error: 資源加載錯誤&#x…

Ant Design Vue 樹形表格計算盈收金額

樹形表格計算 一、盈收金額計算1、根據需要輸入的子級位置,修改數據2、獲取兄弟節點數據,并計算兄弟節點的金額合計3、金額合計,遍歷給所有的父級 一、盈收金額計算 1、根據需要輸入的子級位置,修改數據 2、獲取兄弟節點數據&am…

銷售管理系統的實用性怎么樣?

銷售管理系統好用嗎?好用,銷售管理系統可以管理銷售流程、自動化大量重復性工作,讓銷售人員從瑣碎的任務中掙脫出來,投入到客戶跟進和維護客戶關系之中。那么,CRM系統的好用體現在哪些方面? 1.加速銷售流程…

react中的state

沒想到hooks中也有state這一說法 看下面的兩個案例 1、無state變化不會執行父子函數 2、有state更改執行父子函數

CDN加速在網站搭建中的必要性與優勢分析

隨著互聯網的快速發展,網站已經成為企業展示和用戶交互的主要平臺。在構建一個高性能、用戶體驗良好的網站時,CDN(內容分發網絡)的應用變得愈發重要。本文將從網站搭建的角度出發,深入分析CDN加速的必要性以及在提升網…

深度學習之六(自編碼器--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…

SQLserver 數據庫導入MySQL的方法

原文: https://blog.csdn.net/lht631935612/article/details/132086172#httpspanbaiducoms1TlLiRI9stxqTcwBJ5p6UAE993BEE68EA5EFBC9Ahttpspanbaiducoms1TlLiRI9stxqTcwBJ5p6UA2020E68F90E58F96E7A081EFBC9Av6d5_font_colordd0000v6d5font_8 下載鏈接:…

使用openfeign調用下載流的文件不完整的替代方案

OpenFeign是一種聲明式的Web服務客戶端,它使得編寫HTTP客戶端變得更加簡單和直觀。它使用了注解方式來描述HTTP API,使得開發者可以使用Java接口來調用遠程HTTP服務。 OpenFeign的核心特點包括: 聲明式API: 您可以使用注解聲明要調用的遠程AP…

一鍵創新 | 拓世法寶AI智能直播一體機激發房產自媒體創造力

在數字化時代,房產銷售已然不再是傳統的模式。隨著社交媒體和自媒體的興起,短視頻直播成為房產自媒體營銷的新風口。然而,行業也面臨著諸多挑戰,如何更好地利用新媒體拓展市場,提升自媒體效果成為擺在業內人士面前的難…

JMeter測試報錯422 Unprocessable Entity

添加HTTP信息頭: ? HTTP請求-》添加-〉配置元件-》HTTP信息頭管理器 ? 如果需要送json,需要添加Content-Type:application/json,否則會報【422 Unprocessable Entity】

好用的CRM系統到底有多重要?怎么選?

我們都知道,CRM軟件可以讓企業效率加倍。但如果選錯了CRM,企業損失點錢是小,客戶轉化率下降才是大。下面我們就來說說,市面上有哪些好用的CRM?以及好用的CRM軟件的重要性。 好用的CRM軟件的重要性: 客戶管…