Python?pyecharts?Map地圖數(shù)據(jù)不顯示的原因及完美解決
項(xiàng)目場景
Python數(shù)據(jù)可視化,使用 Pyecharts.charts 模塊中的Map,并導(dǎo)入數(shù)據(jù)來構(gòu)建全國疫情熱力地圖
問題描述
本人在學(xué)習(xí)該章節(jié)課程時(shí),代碼和視頻中的代碼是完全一致的,但是生成的地圖卻和視頻中不一樣,生成結(jié)果中,不顯示地圖熱力和數(shù)據(jù),問題代碼及運(yùn)行結(jié)果如下:
import json from pyecharts.charts import Map from pyecharts.options import * # 讀取數(shù)據(jù)文件 f = open("C:\\Users\\18379\\Desktop\\可視化案例數(shù)據(jù)\\地圖數(shù)據(jù)\\疫情.txt", "r", encoding="UTF-8") data = f.read() # 關(guān)閉文件 f.close() # 將字符串json轉(zhuǎn)換為python的字典 data_dict = json.loads(data) # 從字典中取出省份的數(shù)據(jù) province_data_list = data_dict["areaTree"][0]["children"] # 組裝每個省份和確診人數(shù)為元組,并各個省的數(shù)據(jù)都封裝入列表內(nèi) 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)) # 創(chuàng)建地圖對象 map = Map() # 添加數(shù)據(jù) map.add("各省份確診人數(shù)", data_list, "china") # 設(shè)置全局配置,定制分段的視覺映射 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")
運(yùn)行結(jié)果:
原因分析
在代碼和所使用數(shù)據(jù)完全一致的情況下,仍然得不到正確的結(jié)果,所以只能去考慮是不是pyecharts版本問題,該視頻上傳時(shí)間是在2022年8月,時(shí)隔一年很可能是pyecharts版本進(jìn)行了更新,導(dǎo)致代碼出現(xiàn)bug,此時(shí)我們再仔細(xì)觀察視頻中生成的地圖,與自己生成的地圖進(jìn)行對比,能夠發(fā)現(xiàn)一些問題,對比如下:
通過以上對比很明顯能夠發(fā)現(xiàn),兩者省份名稱不對應(yīng),所以可以大膽猜測,是不是從文本數(shù)據(jù)中提取出的省份信息與Map中內(nèi)置的省份名稱不對應(yīng)所導(dǎo)致的數(shù)據(jù)不能正常顯示呢?下面我們來驗(yàn)證一下自己的想法。
解決方案
第一步:
我們通過for循環(huán)從文本中提取各省份對應(yīng)數(shù)據(jù),得到 data_list 后先打印一下其中的內(nèi)容看一眼,顯然列表中的省份名稱與視頻中生成地圖的省份名稱是對應(yīng)的,而與我們生成地圖中的省份名稱不對應(yīng)。
第二步:
嘗試更改 data_list 中省份名稱,使其與Map中省份名稱對應(yīng),在for循環(huán)體中增加如下代碼,來處理省份不匹配問題。
注意:23個省 + 5個自治區(qū) + 4個直轄市 +2個特別行政區(qū)
# 組裝每個省份和確診人數(shù)為元組,并各個省的數(shù)據(jù)都封裝入列表內(nèi) 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 = "新疆維吾爾自治區(qū)" elif province_name == "廣西": province_name = "廣西壯族自治區(qū)" elif province_name == "寧夏": province_name = "寧夏回族自治區(qū)" elif province_name in ["內(nèi)蒙古","西藏"]: province_name = province_name + "自治區(qū)" elif province_name in ["北京","天津","重慶","上海"]: province_name = province_name + "市" elif province_name in ["香港","澳門"]: province_name = province_name + "特別行政區(qū)" else: province_name = province_name + "省" data_list.append((province_name, province_confirm)) print(data_list)
第三步:
重新運(yùn)行并打印 data_list ,此時(shí)省份名稱已更改,查看地圖,熱力和數(shù)據(jù)正常顯示,問題解決!
完整代碼
import json from pyecharts.charts import Map from pyecharts.options import * # 讀取數(shù)據(jù)文件 f = open("C:\\Users\\18379\\Desktop\\可視化案例數(shù)據(jù)\\地圖數(shù)據(jù)\\疫情.txt", "r", encoding="UTF-8") data = f.read() # 關(guān)閉文件 f.close() # 將字符串json轉(zhuǎn)換為python的字典 data_dict = json.loads(data) # 從字典中取出省份的數(shù)據(jù) province_data_list = data_dict["areaTree"][0]["children"] # 組裝每個省份和確診人數(shù)為元組,并各個省的數(shù)據(jù)都封裝入列表內(nèi) 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 = "新疆維吾爾自治區(qū)" elif province_name == "廣西": province_name = "廣西壯族自治區(qū)" elif province_name == "寧夏": province_name = "寧夏回族自治區(qū)" elif province_name in ["內(nèi)蒙古","西藏"]: province_name = province_name + "自治區(qū)" elif province_name in ["北京","天津","重慶","上海"]: province_name = province_name + "市" elif province_name in ["香港","澳門"]: province_name = province_name + "特別行政區(qū)" else: province_name = province_name + "省" data_list.append((province_name, province_confirm)) print(data_list) # 創(chuàng)建地圖對象 map = Map() # 添加數(shù)據(jù) map.add("各省份確診人數(shù)", data_list, "china") # 設(shè)置全局配置,定制分段的視覺映射 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")
總結(jié)
到此這篇關(guān)于Python pyecharts Map地圖數(shù)據(jù)不顯示的原因及完美解決的文章就介紹到這了,更多相關(guān)pyecharts Map地圖數(shù)據(jù)不顯示內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Selenium 設(shè)置元素等待的三種方式
這篇文章主要介紹了Python Selenium 設(shè)置元素等待的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Python利用splinter實(shí)現(xiàn)瀏覽器自動化操作方法
今天小編就為大家分享一篇Python利用splinter實(shí)現(xiàn)瀏覽器自動化操作方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法
這篇文章主要介紹了利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07tensorflow 大于某個值為1,小于為0的實(shí)例
這篇文章主要介紹了tensorflow 大于某個值為1,小于為0的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06