[英]I'm making a choropleth map with plotly express. How do I match up the values in my csv dataframe with the countries in the geojson file?
TL;DR - 當我執行 px.choropleth() 函數時,它只是給了我一張亞洲的大地圖。 沒有一個國家被塗上顏色。出了什么問題?
更詳細地:
我從一個包含世界上所有國家 GDP 的 csv 文件和一個包含亞洲所有國家的 geojson 文件開始。 我使用 Pandas 從 csv 文件中對東盟國家的數據進行子集化沒有問題。
我的首要挑戰之一是弄清楚如何從 geojson 文件中刪除所有非東盟國家。 我了解了一個名為 geopandas 的包,並用它來對東盟國家進行子集化,然后將 geopandas 數據幀轉換回 geojson 文件,以便在 plotly express choropleth 函數中使用。 我懷疑我使用 geopandas 進行子集化的方式可能是問題的根源,但我不確定。
這是我的子集數據框(GDP 值)的一瞥:
Country Year Value code
11390 Brunei 2018 1.356691e+10 BRN
13585 Cambodia 2018 2.457175e+10 KHM
37026 Indonesia 2018 1.042173e+12 IDN
我的理解是,geojson 文件需要具有與數據框中國家/地區對應的每個國家/地區的 ID。 因此,當我使用 geopandas 對 geojson 文件進行子集化時,我直接從我的 csv 數據框中附加了一個新的“代碼”列。 我檢查過,它似乎確實有效。 我將 geopandas 數據框制作成一個 geojson 文件,唯一剩下的國家是東盟國家,每個國家的屬性中都有正確的代碼('BRN'、'KHM' 等)。 我將這個子集化的 geojson 文件命名為“asean.json”。
我嘗試使用此代碼填充 plotly choropleth 函數中的位置參數。 它沒有用。
這是我的情節功能:
path_to_file = 'asean.json'
with open(path_to_file) as f:
aseangeo = geojson.load(f)
fig = px.choropleth(data_frame=asean10,
geojson=aseangeo,
locations='code',
color='Value',
# color_continuous_scale="Viridis",
range_color=(0, 12))
fig.show()
結果令人失望,我得到的只是一張整個亞洲大陸的大地圖,沒有填寫任何國家。
就像我之前說的,我懷疑這可能是我使用 geopandas 對 geojson 文件進行子集化的方式,但我不確定。 什么地方出了錯?
因此,對於任何以相同問題查看這篇文章的人來說,答案就在 r-beginners 提供的這個鏈接中。
https://plotly.com/python/choropleth-maps/
在“按 Geojson 屬性索引”部分下,它清楚地說明
如果您使用的 GeoJSON 沒有 id 字段,或者您希望使用屬性字段中的鍵之一,則可以使用 featureidkey 參數指定匹配位置值的位置。
考慮到這一點,以下是我修復代碼的方法:
fig = px.choropleth(data_frame=asean10,
geojson=aseangeo,
locations='code',
featureidkey="properties.code",
color='Value',
# color_continuous_scale="Viridis",
range_color=(0, 12))
這是我得到的結果:
現在我需要修復顏色和定位,但這是另一天的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.