Python 使用Basemap根据字典值对国家/地区进行着色

Python 使用Basemap根据字典值对国家/地区进行着色,python,shapefile,matplotlib-basemap,Python,Shapefile,Matplotlib Basemap,我想绘制墨西哥地图,并根据字典中的值对各州进行相应的着色。我使用了前一个问题()中建议的以下代码,到目前为止,它绘制了国家和州,但是当我试图定义着色时,我得到了一个错误。代码如下: import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import PatchCollection from mpl_toolkits.basemap import Basemap

我想绘制墨西哥地图,并根据字典中的值对各州进行相应的着色。我使用了前一个问题()中建议的以下代码,到目前为止,它绘制了国家和州,但是当我试图定义着色时,我得到了一个错误。代码如下:

import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.collections import PatchCollection
    from mpl_toolkits.basemap import Basemap
    %matplotlib inline
    from shapely.geometry import Polygon

mexican_states_people = {'AGS': 20,'BC': 57, 'BCS': 562, 'CAMP': 594,'CHIH': 442,'CHIS': 69,'COAH': 100,'COL': 237,'DF': 7323,'DGO': 689,'GRO': 40,'GTO': 295,'HGO': 1134,'JAL': 875,'MEX': 1,'MICH': 393, 'MOR': 301,'NAY': 404,'NL': 327,'OAX': 391,'PUE': 670,'QRO': 270,'QROO': 156,'SIN': 63,'SLP': 689,'SON': 291,'TAB': 306,'TAMPS': 59,'TLAX': 108,'VER': 17,'YUC': 35,'ZAC': 890}

m = Basemap(llcrnrlon=-115,llcrnrlat=5,urcrnrlon=-80,urcrnrlat=35,
            resolution='i',projection='tmerc',lon_0=-99,lat_0=19)
m.readshapefile("MEX_adm1", "mexican_states")

max_people = np.max(mexican_states_people.values())

for coordinates, state in zip(m.mexican_states, m.mexican_states_info):
    print state
    if state["State_name"] in mexican_states_people.keys():
        shade = mexican_states_people[state["State_name"]]/max_people


m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
m.drawparallels(np.arange(-40,61.,2.))
m.drawmeridians(np.arange(-20.,21.,2.))
m.drawmapboundary(fill_color='aqua')
plt.title("Mexico")
plt.show()
我得到错误:
keyrerror:'State\u name'
打印状态
命令提供了以下信息:

{'NAME_0': 'Mexico', 'NAME_1': 'Aguascalientes', 'TYPE_1': 'Estado', 'CCA_1': '                                                                                                                                                                                                                                                              ', 'VARNAME_1': '                                                                                                                                                      ', 'ENGTYPE_1': 'State', 'HASC_1': 'MX.AG', 'RINGNUM': 1, 'ID_0': 145, 'ID_1': 1, 'ISO': 'MEX', 'NL_NAME_1': '                                                  ', 'CCN_1': 0, 'SHAPENUM': 1}

形状文件“MEX_adm1”是从下载的,您直接从我的上一个答案复制而来:)

如果将
if state[“state_name”]
替换为
if state[“name_1”]
,这应该是可行的,因为shapefile中名称的键是
name_1
-但是会有不同的问题,因为显然您的
墨西哥_states_people
dict使用了与shapefile不同的命名约定,在您的dict中,state缩写为“AGS”,而在shapefile中,它被称为“Aguascalientes”

如果没有太多的状态,您可以手动更改dict,否则您将不得不在缩写和名称之间找到其他映射