看到留言中有問起在Pyecharts中繪制美國地圖不成功,于是自己也去試了下谴垫。
果然直接按照ECharts示例,將maptype = ‘china’ 修改為 maptype = ‘USA’,運行后無反應(yīng)虫埂。再一試汇竭,發(fā)現(xiàn)只有當指定參數(shù)maptype = ‘china’ 葱蝗、maptype = ‘world’ 時可以繪制出地圖穴张,傳入其它國家名稱都無法繪制成功。
搜索一圈下來两曼,在請問Pyecharts V1.0.0 如何導(dǎo)入美國地圖皂甘? #1372中提到了解決方法:
from pyecharts.datasets import register_url
# 如果出現(xiàn) ssl 異常再加下面這兩行
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
register_url("https://echarts-maps.github.io/echarts-countries-js/")
c = (
Map()
.add("商家A", [["Ohio", 100]], "美國")
.set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"))
.render()
)
運行結(jié)果如下
關(guān)鍵所在:
- register_url("https://echarts-maps.github.io/echarts-countries-js/")
-
國家名稱用中文:maptype = ‘美國’
按照上面的方法,繪制了2020年5月27日美國COVID病例分布圖:
url="https://coviddata.github.io/coviddata/v1/regions/cases.csv"
data=pd.read_csv(url, encoding='utf-8')
us_covid_0527 = data.query('Country == "United States"')[['Region','2020-05-27']]
us_covid_0527 = us_covid_0527.rename(columns = {'2020-05-27':'Case'})
us_covid_0527 = us_covid_0527.sort_values(by='Case', ascending=False)
us_covid_0527_list = us_covid_0527.dropna().values.tolist()[:-6]
low, high = min([x[1] for x in us_covid_0527_list]), max([x[1] for x in us_covid_0527_list])
(
Map()
.add("", us_covid_0527_list, maptype="美國", is_map_symbol_show=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=high, min_=low),
title_opts=opts.TitleOpts(
title="美國各州COVID19確診病例(2020-05-27)",
subtitle="https://github.com/coviddata/coviddata")
)
.render_notebook()
)
運行結(jié)果如本文題圖所示悼凑。
從運行結(jié)果來看叮贩,圖上沒有發(fā)現(xiàn)缺失的數(shù)據(jù),說明原始數(shù)據(jù)CSV文件中各州的名稱與pyecharts的地圖中各州的名稱是一一對應(yīng)沒有錯漏的佛析。如果換成別的國家益老,就無法保證了。比如重新繪制一個意大利的疫情地圖如下圖所示:
italy_covid_0527 = data.query('Country == "Italy"')[['Region','2020-05-27']].rename(columns = {'2020-05-27':'Case'})
italy_covid_0527 = italy_covid_0527.sort_values(by='Case',ascending=False)
italy_covid_0527_list = italy_covid_0527.dropna().values.tolist()
low, high = min([x[1] for x in italy_covid_0527_list]), max([x[1] for x in italy_covid_0527_list])
(
Map()
.add("", italy_covid_0527_list, maptype="意大利", is_map_symbol_show=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=high, min_=low),
title_opts=opts.TitleOpts(
title="意大利COVID19確診病例(2020-05-27)",
subtitle="https://github.com/coviddata/coviddata")
)
.render_notebook()
)
明顯可見地圖上顯示不完整的寸莫,問題仍是出在各地區(qū)名稱未一一正確對應(yīng)所致捺萌,正如在用Pyecharts繪制世界地圖的避坑經(jīng)歷——首要是先修正各國的名稱,以及去除缺失值中所提到的一樣膘茎,所以解決的辦法應(yīng)該也相同:改成一致的名稱或者用name_map來映射桃纯。
自然的,既然要用中文的國家名稱作為pyecharts的maptype參數(shù)披坏,也就涉及到同樣需要確保各國的譯名與pyecharts相一致方可态坦。pyecharts默認的各國中文名稱可參見https://echarts-maps.github.io/echarts-countries-js/preview.html或是pyecharts安裝目錄下的countries_regions_db.json文件。
小結(jié)
- 利用pyecharts繪制世界各國地圖棒拂,(除中國和世界地圖外)伞梯,需加上:
from pyecharts.datasets import register_url
register_url("https://echarts-maps.github.io/echarts-countries-js/")
- 用中文的國家名稱作為pyecharts的maptype參數(shù),pyecharts默認的各國中文名稱可參見https://echarts-maps.github.io/echarts-countries-js/preview.html或是pyecharts目錄下的countries_regions_db.json文件帚屉。