Python?pyecharts?Map地圖數(shù)據(jù)不顯示的原因及完美解決
項(xiàng)目場(chǎng)景
Python數(shù)據(jù)可視化,使用 Pyecharts.charts 模塊中的Map,并導(dǎo)入數(shù)據(jù)來(lái)構(gòu)建全國(guó)疫情熱力地圖
問(wèn)題描述
本人在學(xué)習(xí)該章節(jié)課程時(shí),代碼和視頻中的代碼是完全一致的,但是生成的地圖卻和視頻中不一樣,生成結(jié)果中,不顯示地圖熱力和數(shù)據(jù),問(wèn)題代碼及運(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"]
# 組裝每個(gè)省份和確診人數(shù)為元組,并各個(gè)省的數(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)建地圖對(duì)象
map = Map()
# 添加數(shù)據(jù)
map.add("各省份確診人數(shù)", data_list, "china")
# 設(shè)置全局配置,定制分段的視覺(jué)映射
map.set_global_opts(
title_opts=TitleOpts(title="全國(guó)疫情地圖"),
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("全國(guó)疫情地圖.html")運(yùn)行結(jié)果:

原因分析
在代碼和所使用數(shù)據(jù)完全一致的情況下,仍然得不到正確的結(jié)果,所以只能去考慮是不是pyecharts版本問(wèn)題,該視頻上傳時(shí)間是在2022年8月,時(shí)隔一年很可能是pyecharts版本進(jìn)行了更新,導(dǎo)致代碼出現(xiàn)bug,此時(shí)我們?cè)僮屑?xì)觀察視頻中生成的地圖,與自己生成的地圖進(jìn)行對(duì)比,能夠發(fā)現(xiàn)一些問(wèn)題,對(duì)比如下:

通過(guò)以上對(duì)比很明顯能夠發(fā)現(xiàn),兩者省份名稱不對(duì)應(yīng),所以可以大膽猜測(cè),是不是從文本數(shù)據(jù)中提取出的省份信息與Map中內(nèi)置的省份名稱不對(duì)應(yīng)所導(dǎo)致的數(shù)據(jù)不能正常顯示呢?下面我們來(lái)驗(yàn)證一下自己的想法。
解決方案
第一步:
我們通過(guò)for循環(huán)從文本中提取各省份對(duì)應(yīng)數(shù)據(jù),得到 data_list 后先打印一下其中的內(nèi)容看一眼,顯然列表中的省份名稱與視頻中生成地圖的省份名稱是對(duì)應(yīng)的,而與我們生成地圖中的省份名稱不對(duì)應(yīng)。

第二步:
嘗試更改 data_list 中省份名稱,使其與Map中省份名稱對(duì)應(yīng),在for循環(huán)體中增加如下代碼,來(lái)處理省份不匹配問(wèn)題。
注意:23個(gè)省 + 5個(gè)自治區(qū) + 4個(gè)直轄市 +2個(gè)特別行政區(qū)
# 組裝每個(gè)省份和確診人數(shù)為元組,并各個(gè)省的數(shù)據(jù)都封裝入列表內(nèi)
data_list = []
for province_data in province_data_list:
province_name = province_data["name"]
province_confirm = province_data["total"]["confirm"]
#處理省份不匹配問(wèn)題
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 ["香港","澳門(mén)"]:
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ù)正常顯示,問(wèn)題解決!


完整代碼
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"]
# 組裝每個(gè)省份和確診人數(shù)為元組,并各個(gè)省的數(shù)據(jù)都封裝入列表內(nèi)
data_list = []
for province_data in province_data_list:
province_name = province_data["name"]
province_confirm = province_data["total"]["confirm"]
#處理省份不匹配問(wèn)題
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 ["香港","澳門(mén)"]:
province_name = province_name + "特別行政區(qū)"
else:
province_name = province_name + "省"
data_list.append((province_name, province_confirm))
print(data_list)
# 創(chuàng)建地圖對(duì)象
map = Map()
# 添加數(shù)據(jù)
map.add("各省份確診人數(shù)", data_list, "china")
# 設(shè)置全局配置,定制分段的視覺(jué)映射
map.set_global_opts(
title_opts=TitleOpts(title="全國(guó)疫情地圖"),
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("全國(guó)疫情地圖.html")總結(jié)
到此這篇關(guān)于Python pyecharts Map地圖數(shù)據(jù)不顯示的原因及完美解決的文章就介紹到這了,更多相關(guān)pyecharts Map地圖數(shù)據(jù)不顯示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Selenium 設(shè)置元素等待的三種方式
這篇文章主要介紹了Python Selenium 設(shè)置元素等待的三種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
實(shí)例講解python中的序列化知識(shí)點(diǎn)
本篇文章通過(guò)代碼實(shí)例給大家詳細(xì)分享了關(guān)于python中的序列化知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2018-10-10
Python利用splinter實(shí)現(xiàn)瀏覽器自動(dòng)化操作方法
今天小編就為大家分享一篇Python利用splinter實(shí)現(xiàn)瀏覽器自動(dòng)化操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Pycharm關(guān)閉控制臺(tái)多余窗口的解決辦法
這篇文章主要介紹了Pycharm關(guān)閉控制臺(tái)多余窗口的解決辦法,文中通過(guò)圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12
利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法
這篇文章主要介紹了利用Python模擬登錄pastebin.com的實(shí)現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
tensorflow 大于某個(gè)值為1,小于為0的實(shí)例
這篇文章主要介紹了tensorflow 大于某個(gè)值為1,小于為0的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06

