3

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 文件的方式,但我不确定。什么地方出了错?

4

1 回答 1

3

因此,对于任何看到这篇文章并遇到同样问题的人来说,答案就在 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))

这是我得到的结果:

更好的结果

现在我需要修复颜色和定位,但这是另一天的问题。

于 2020-10-23T04:01:54.747 回答