[Folium图例阈值在更改值时抛出错误,灰色

问题描述 投票:0回答:1

我正在使用Folium包通过python建立一个“ Choropleth”地图。显示的数据是从API提取的,该API跟踪每个国家最近的Covid-19感染率。 country.geojson文件(世界地图的json文件)和我提取的数据之间共享的一列是国家的名称。大多数国家(成功地)用颜色阴影,而一些国家不完全相同,因此用灰色阴影,例如,pandas数据框中的“ US”和.geojson文件中的“ United States of America”不匹配,因此不会在地图上显示其数据。

covid_data = requests.get('https://covid2019-api.herokuapp.com/v2/current')
covid_data = covid_data.json()
covid_data = pd.DataFrame.from_dict(covid_data['data'])
location  confirmed  deaths  recovered  active
US     636350   28326      52096  555928
Spain     177644   18708      70853   88083

我存储API数据的方式在pandas DataFrame中,因为它与Folium一起使用效果最佳。我从相同的国家/地区名称转换数据的巧妙方式是使用以下代码:covid_data.location[covid_data.location=='US'] = 'United States of America'

通过这样做,.geojson文件和DataFrame上的国家/地区名称现在都相同

location  confirmed  deaths  recovered  active
United States of America     636350   28326      52096  555928
Spain     177644   18708      70853   88083

现在与]相同>

{ "type": "Feature", "properties": { "ADMIN": "United States of America", "ISO_A3": "USA"} "geometry": {}}     (countries.geojson)

在编辑数据框之前,地图已渲染,但是当美国更改为美利坚合众国时,会引发错误

返回color_range [color_idx],fill_opacityIndexError:列表索引超出范围

因此,我将Choropleth threshold_scale设置为636,360(这是“已确认”列中的最高#),但是没有任何数据可以匹配此#。因此,如果我将threshold_scale降低到下一个最高的数字177,644(这是意大利),则会收到错误

ValueError:所有值都应落入提供的bin之一(或为Nan)。请检查> bins参数和/或您的数据。

此处提供其余代码以帮助解决此问题,

#this variable is to get the highest value of the rates as the max threshold used for coloring
covid_data_max = covid_data['confirmed'].max()
covid_data_max = covid_data_max.item()
world_geo = r'countries.geojson'
world_map = folium.Map(location=[4.68, 8.33],
                    tiles='Mapbox Bright', zoom_start=3)
world_map = folium.Choropleth(
    geo_data=world_geo,
    name='choropleth',
    data=covid_data,
    columns=['location','confirmed'],
    key_on='properties.ADMIN',
    threshold_scale = [0,int((covid_data_max/15)),int((covid_data_max/10)),int((covid_data_max/4)),covid_data_max],
    fill_color='BuPu',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='Number of deaths per country',
    highlight=True,
    line_color='black'
    ).add_to(world_map)

folium.LayerControl().add_to(world_map)
world_map.save(r'./templates/map.html')

Image of the map (for some reason the threshold includes the USA #'s)

让我知道我还有什么可以提供的!

我正在使用Folium包通过python建立一个“ Choropleth”地图。显示的数据是从API提取的,该API跟踪每个国家最近的Covid-19感染率。 A ...

python pandas folium choropleth
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.