2017-11-26 8 views
0

別のページ「Make colorbar legend in Matplotlib/Cartopy」から試してみると彼の例がありますが、 Jupyterノートブックでこのようなエラーがスローされます:エラーが発生しましたKeyError: 'country' 'records' object 'の' name_long 'name = country.attributes [' name_long '] "

KeyError         Traceback (most recent call last) 
<ipython-input-3-55c282431f2e> in <module>() 
    14 ax = plt.axes(projection=ccrs.Robinson()) 
    15 for country in shpreader.Reader(countries_shp).records(): 
---> 16  name = country.attributes['name_long'] 
    17  num_users = countries[name] 
    18  ax.add_geometries(country.geometry, ccrs.PlateCarree(), 

KeyError: 'name_long' 

助けてください!コードサンプル:

import cartopy.crs as ccrs 
import cartopy.io.shapereader as shpreader 
import matplotlib.pyplot as plt 
import matplotlib as mpl 
import numpy as np 

cmap = mpl.cm.Blues 
# Countries is a dictionary of {"country_name": number of users}, for example 
countries = {"United States": 100, "Canada": 50, "China": 10} 

max_users = float(max(countries.values())) 
shapename = 'admin_0_countries' 
countries_shp = shpreader.natural_earth(resolution='110m', category='cultural', name=shapename) 
ax = plt.axes(projection=ccrs.Robinson()) 
for country in shpreader.Reader(countries_shp).records(): 
    name = country.attributes['name_long'] 
    num_users = countries[name] 
    ax.add_geometries(country.geometry, ccrs.PlateCarree(), 
       facecolor=cmap(num_users/max_users, 1)) 

plt.savefig('iOS_heatmap.png', transparent=True, dpi=900) 
+0

私は鍵をログインすると、それがキー「NAME_LONG」を持っている: 印刷(ソート(country.attributes.keys() )) ['ABBREV'、 'NAME_ALT'、 'NAME_CIAWF'、 'NAME_LEN'、 'NAME_LONG'、 'NAME_SORT'、 'NOTE_ADM0'、 'NOTE_BRK'、 'POP_EST'など.. 'WEE_NOTE '、' featurecla '、' scalerank '] –

+0

'NAME_LONG'は' name_long'と同じものではありません –

+0

ある時点で、Natural Earthメタデータが変更され、キー名が変更されました。 – pelson

答えて

1

あなたcountry.attributes辞書/マップは、キー'name_long'の値を持っていません。

あなたの国はdocumentation for shapereaderで指定されたRecordです。

レコードには単純な辞書である属性があります。あなたが読んでいるデータには、'name_long'という属性はありません。

downloading the dataNaturalEarthDataのウェブサイトから表示されます。実際にそこから利用可能な属性を確認してください。

あなたのコメントを1として、あなたは'NAME_LONG'鍵を持っているように見えますが、... 'NAME_LONG' != 'name_long'

関連する問題