пользовательский цвет заполнения в folium

#python #jupyter-notebook #folium

#python #jupyter-записная книжка #folium

Вопрос:

Я хочу создать пользовательский fillcolor в 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
  

вот ссылка на используемые данные GeoJSON

вот используемый набор данных ссылок

Я уверен, что что-то не так в моем пути, ссылающемся на файл GeoJSON, но я просто не знаю, как на него ссылаться. Любая помощь приветствуется.

Ответ №1:

У меня нет опыта работы с folium, но я изменил ваш код, чтобы использовать GeoJSON для цветового кода, используя приведенный здесь пример. Я создал список имен регионов, извлеченных условным и использовал ‘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
  

введите описание изображения здесь