从 Cartopy shapereader 记录中获取有关特定国家/地区的信息



我正在使用Cartopy shapereader Natural Earth Records中提供的几何图形在国家级别绘制世界地图数据:

import cartopy.io.shapereader as shpreader
import pandas as pd
my_data = pd.read_csv("my_data.csv", index_col = 0)
shpfilename = shpreader.natural_earth(resolution='50m',
category='cultural',
name='admin_0_countries')
reader = shpreader.Reader(shpfilename)
countries = reader.records()
for country in countries:
sovgt = country.attribute["SOVEREIGNT"]
plot_val = my_data.loc[sovgt]
ax.add_geometries([country.geometry],
ccrs.PlateCarree(),
facecolor = cmap(plot_val))

我的问题是:鉴于它是生成器,是否有一种更简洁的方法可以从countries中提取有关特定国家的数据。如果我能做这样的事情,那将是非常可取的

for country in my_data.index.to_list():

geometry = countries[country].geometry
ax.add_geometries(geometry,
ccrs.PlateCarree(),
facecolor = cmap(plot_val))

原因是我对my_data国家/地区的索引与countries中的国家/地区名称不一致。我有一个分层的try:, except KeyError:列表,其中包含名称字典,以处理所有未在我的数据集中单独列出的依赖状态等。

这可能是关于生成器对象的更普遍的问题。如果这也是一个愚蠢的问题,请道歉。

我对生成器没有任何见解,但我回答了一个关于从国家名称和值列表中在地图上为一个国家着色的相关问题 https://stackoverflow.com/a/61525984/13208790

关键步骤是将自然地球数据读取到geopandas中,因此您可以使用数据帧而不是生成器。不是很优雅,但应该可以工作:

import geopandas
from cartopy.io import shapereader
shpfilename = shapereader.natural_earth('50m', 'cultural', 'admin_0_countries')
df = geopandas.read_file(shpfilename)
df.head()

相关内容

最新更新