作者:kkka姐姐_244 | 来源:互联网 | 2022-12-07 01:39
我有一个包含一些国家和变量的数据框,我想folium
用整个世界的geojson文件生成一个等值区域图.我folium
在将色标上的最大值分配给我的数据帧中不存在的国家时遇到问题.以下最低限度:
import random
import pandas as pd
import folium
import json
map_data = pd.DataFrame({
'A3':['POL', 'CZE', 'SVK', 'HUN', 'AUT'],
'value':random.sample(range(10), 5)
})
m = folium.Map(
location = [50, 15],
zoom_start = 4
)
m.choropleth(
geo_data = 'https://github.com/simonepri/geo-maps/releases/download/v0.6.0/countries-land-10km.geo.json',
data = map_data,
columns = ['A3', 'value'],
key_on = 'feature.properties.A3',
fill_color = 'YlOrRd'
)
我的问题如下:如何判断folium
为丢失的国家(即存在于json文件中但未存在的那些)中的特定颜色(例如,灰色或透明map_data
),而不是将它们作为给定变量的最大值着色(这是一种奇怪的行为)?
1> pieca..:
似乎没有办法用choropleth
方法来实现。我找到了一种解决方法,可以使用custom style_function
而GeoJson
不是使用choropleth
:
import random
import pandas as pd
import folium
from branca.colormap import LinearColormap
import json
map_data = pd.DataFrame({
'A3':['POL', 'CZE', 'SVK', 'HUN', 'AUT'],
'value':random.sample(range(10), 5)
})
map_dict = map_data.set_index('A3')['value'].to_dict()
color_scale = LinearColormap(['yellow','red'], vmin = min(map_dict.values()), vmax = max(map_dict.values()))
def get_color(feature):
value = map_dict.get(feature['properties']['A3'])
if value is None:
return '#8c8c8c' # MISSING -> gray
else:
return color_scale(value)
m = folium.Map(
location = [50, 15],
zoom_start = 4
)
folium.GeoJson(
data = 'https://github.com/simonepri/geo-maps/releases/download/v0.6.0/countries-land-10km.geo.json',
style_function = lambda feature: {
'fillColor': get_color(feature),
'fillOpacity': 0.7,
'color' : 'black',
'weight' : 1,
}
).add_to(m)