简体   繁体   中英

How to create a choropleth map using mapbox and plotly at a country level?

I am trying to create a choropleth map using plotly and mapbox similar to the US map https://plot.ly/python/mapbox-county-choropleth/ but of African countries. I am new to Python and coding period, so I am a bit lost. My geo data json doesn't have the 'id' field like the the Plotly example. Do I need to create one? Or do I need to just index by df by country? But then how do I match up the instances in the json file? Any help would be appreciated

with open('custom.geo.json') as response:
    africa_geo = json.load(response)
data=pd.read_csv('africa_project.csv')

数据数据框

africa_geo['features'][0]

{'type': 'Feature',
 'properties': {'scalerank': 0,
  'featurecla': 'Admin-0 country',
  'labelrank': 3,
  'sovereignt': 'Burkina Faso',
  'sov_a3': 'BFA',
  'adm0_dif': 0,
  'level': 2,
  'type': 'Sovereign country',
  'admin': 'Burkina Faso',
  'adm0_a3': 'BFA',
  'geou_dif': 0,
  'geounit': 'Burkina Faso',
  'gu_a3': 'BFA',
  'su_dif': 0,
  'subunit': 'Burkina Faso',
  'su_a3': 'BFA',
  'brk_diff': 0,
  'name': 'Burkina Faso',
  'name_long': 'Burkina Faso',
  'brk_a3': 'BFA',
  'brk_name': 'Burkina Faso',
  'brk_group': None,
  'abbrev': 'B.F.',
  'postal': 'BF',
  'formal_en': 'Burkina Faso',
  'formal_fr': None,
  'note_adm0': None,
  'note_brk': None,
  'name_sort': 'Burkina Faso',
  'name_alt': None,
  'mapcolor7': 2,
  'mapcolor8': 1,
  'mapcolor9': 5,
  'mapcolor13': 11,
  'pop_est': 15746232,
  'gdp_md_est': 17820,
  'pop_year': -99,
  'lastcensus': 2006,
  'gdp_year': -99,
  'economy': '7. Least developed region',
  'income_grp': '5. Low income',
  'wikipedia': -99,
  'fips_10_': 'UV',
  'iso_a2': 'BF',
  'iso_a3': 'BFA',
  'iso_n3': '854',
  'un_a3': '854',
  'wb_a2': 'BF',
  'wb_a3': 'BFA',
  'woe_id': 23424978,
  'woe_id_eh': 23424978,
  'woe_note': 'Exact WOE match as country',
  'adm0_a3_is': 'BFA',
  'adm0_a3_us': 'BFA',
  'adm0_a3_un': -99,
  'adm0_a3_wb': -99,
  'continent': 'Africa',
  'region_un': 'Africa',
  'subregion': 'Western Africa',
  'region_wb': 'Sub-Saharan Africa',
  'name_len': 12,
  'long_len': 12,
  'abbrev_len': 4,
  'tiny': -99,
  'homepart': 1,
  'filename': 'BFA.geojson'},
 'geometry': {'type': 'Polygon',
  'coordinates': [[[-0.3976712649999, 15.002134501000072],
    [-0.361471923999943, 15.017740784000113],
    [-0.29917598499992, 15.054741110000064],
    [-0.236699177999867, 15.065618999000035],
    [-0.166987670999902, 15.049676819000098],
    [-0.033404092999916, 14.995933329000096],
    [-0.033197387999962, 14.995933329000096],
    [0.218466838000012, 14.910977275000109],
    [0.22084395400006, 14.888213806000126],
    [0.211852254000121, 14.874803772000078],
    ...]]}}
fig = go.Figure(go.Choroplethmapbox(geojson=africa_geo, locations=data.country_name, z=data.ranking,
                                    colorscale="Viridis"))

fig.update_layout(mapbox_style="dark", mapbox_accesstoken=token,
                  mapbox_zoom=1, mapbox_center = {"lat": 6.6111, "lon": 20.9394})


fig.show()

在此处输入图像描述

Turns out that key is having the "id", a unique identifier called "id". If your geo.json doesn't have that it will not work. Then you have to associate the countries with the unique id and make sure your 'locations' is set equal to the df.id

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM