叶子上的自定义 fillColor
custom fillColor in folium
我想在 folium 中自定义填充颜色,但它一直抛出 keyError
KeyError: 'feature.properties.Propinsi'
下面是我的代码
#custom color low value green, high value red
def my_color_function(feature):
if data_dict['feature.properties.Propinsi'] > 10000:
return '#ff0000'
else:
return '#008000'
#define source
jsonmap = 'indonesia-province-simple.json'
indo_province = json.load(open(jsonmap))
df_master = pd.read_csv('covid_provinsi2.csv')
data_dict = df_master.set_index('provinsi')['jumlah_kasus']
#plotting
m = folium.Map(location=[-0.79, 113],tiles='cartodbpositron',zoom_start=4.5)
folium.GeoJson(
indo_province,
style_function=lambda feature: {
'fillColor': my_color_function(feature),
'color': 'black',
'weight': 2,
'dashArray': '5, 5'
}
).add_to(m)
folium.LayerControl().add_to(m)
m
如果我不使用 geoJson,我可以让它工作,但我不能自定义颜色。下面的代码 运行 就好了
jsonmap = 'indonesia-province-simple.json'
indo_province = json.load(open(jsonmap))
df_master = pd.read_csv('covid_provinsi2.csv')
m = folium.Map(location=[-0.79, 113],tiles='cartodbpositron',zoom_start=4.5)
folium.Choropleth(
geo_data=indo_province,
name='choropleth',
data=df_master,
columns=['provinsi', 'jumlah_kasus'],
key_on='feature.properties.Propinsi',
fill_color='OrRd',
legend_name='covid case'
).add_to(m)
folium.LayerControl().add_to(m)
m
here 是 link 使用的 geoJson 数据
here 是使用的 link 数据集
我确定我引用 geoJson 文件的方式有问题,但我只是不知道如何引用它。感谢任何帮助。
我没有使用 folium 的经验,但我已经使用示例 here 修改了您的代码以使用 GeoJson color-code。我创建了一个由条件提取的区域名称列表,并使用 'style_fuction' 对其进行条件化。
import pandas as pd
import numpy as np
import folium
#custom color low value green, high value red
# def my_color_function(feature):
# mask = data_dict['jumlah_kasus'] > 10000
# mask = ['#ff0000' if i == 1 else '#008000' for i in mask]
#define source
jsonmap = 'indonesia-province-simple.json'
indo_province = json.load(open(jsonmap))
df_master = pd.read_csv('covid_provinsi2.csv')
# data_dict = df_master.set_index('provinsi')['jumlah_kasus']
data_dict = df_master[['provinsi','jumlah_kasus']]
mask = data_dict[data_dict['jumlah_kasus'] > 10000]['provinsi']
mask = mask.tolist()
#plotting
m = folium.Map(location=[-0.79, 113],tiles='cartodbpositron',zoom_start=4.5)
folium.GeoJson(
indo_province,
style_function=lambda feature: {
'fillColor': '#ff0000' if feature['properties']['Propinsi'] in mask else '#008000',
'color': 'black',
'weight': 2,
'dashArray': '5, 5'
}
).add_to(m)
folium.LayerControl().add_to(m)
m
我想在 folium 中自定义填充颜色,但它一直抛出 keyError
KeyError: 'feature.properties.Propinsi'
下面是我的代码
#custom color low value green, high value red
def my_color_function(feature):
if data_dict['feature.properties.Propinsi'] > 10000:
return '#ff0000'
else:
return '#008000'
#define source
jsonmap = 'indonesia-province-simple.json'
indo_province = json.load(open(jsonmap))
df_master = pd.read_csv('covid_provinsi2.csv')
data_dict = df_master.set_index('provinsi')['jumlah_kasus']
#plotting
m = folium.Map(location=[-0.79, 113],tiles='cartodbpositron',zoom_start=4.5)
folium.GeoJson(
indo_province,
style_function=lambda feature: {
'fillColor': my_color_function(feature),
'color': 'black',
'weight': 2,
'dashArray': '5, 5'
}
).add_to(m)
folium.LayerControl().add_to(m)
m
如果我不使用 geoJson,我可以让它工作,但我不能自定义颜色。下面的代码 运行 就好了
jsonmap = 'indonesia-province-simple.json'
indo_province = json.load(open(jsonmap))
df_master = pd.read_csv('covid_provinsi2.csv')
m = folium.Map(location=[-0.79, 113],tiles='cartodbpositron',zoom_start=4.5)
folium.Choropleth(
geo_data=indo_province,
name='choropleth',
data=df_master,
columns=['provinsi', 'jumlah_kasus'],
key_on='feature.properties.Propinsi',
fill_color='OrRd',
legend_name='covid case'
).add_to(m)
folium.LayerControl().add_to(m)
m
here 是 link 使用的 geoJson 数据
here 是使用的 link 数据集
我确定我引用 geoJson 文件的方式有问题,但我只是不知道如何引用它。感谢任何帮助。
我没有使用 folium 的经验,但我已经使用示例 here 修改了您的代码以使用 GeoJson color-code。我创建了一个由条件提取的区域名称列表,并使用 'style_fuction' 对其进行条件化。
import pandas as pd
import numpy as np
import folium
#custom color low value green, high value red
# def my_color_function(feature):
# mask = data_dict['jumlah_kasus'] > 10000
# mask = ['#ff0000' if i == 1 else '#008000' for i in mask]
#define source
jsonmap = 'indonesia-province-simple.json'
indo_province = json.load(open(jsonmap))
df_master = pd.read_csv('covid_provinsi2.csv')
# data_dict = df_master.set_index('provinsi')['jumlah_kasus']
data_dict = df_master[['provinsi','jumlah_kasus']]
mask = data_dict[data_dict['jumlah_kasus'] > 10000]['provinsi']
mask = mask.tolist()
#plotting
m = folium.Map(location=[-0.79, 113],tiles='cartodbpositron',zoom_start=4.5)
folium.GeoJson(
indo_province,
style_function=lambda feature: {
'fillColor': '#ff0000' if feature['properties']['Propinsi'] in mask else '#008000',
'color': 'black',
'weight': 2,
'dashArray': '5, 5'
}
).add_to(m)
folium.LayerControl().add_to(m)
m