叶子上的自定义 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