我想向我的 Folium Choropleth 地图添加自定义颜色渐变,但是当我使用
branca
创建颜色渐变/地图时,它会输出一个不被 fill_color
的 folium.Choropleth
变量接受的类,因为它是类而不是字符串。
在此代码中,我使用
from branca.colormap import StepColormap
创建颜色图
# Defining variables
max_value = df[status].max()
hex_codes = ['#0b0405', '#28192e', '#3b2e5d', '#40498e', '#366a9f', '#348ba6', '#38aaac', '#55caad', '#a1dfb9', '#def5e5']
# creating the custom ramp
custom_colour_map = StepColormap(colors = hex_codes, vmin = 0, vmax = df[status].max(), tick_labels=[0, max_value*.25, max_value*.5, max_value*.75, max_value])
然后我创建了一个 folium 地图,下面是 Choropleth 部分的代码。
folium.Choropleth(
geo_data=df,
data=df,
bins = [0,10,100, 1000, 10000],
columns=('polyname', status),
key_on="feature.properties.polyname",
fill_color = custom_colour_map,
legend_name=status
).add_to(m)
但是我收到一个错误,填充颜色需要一个字符串,但得到一个类。我也尝试过使用
custom_colour_map.colors
但没有任何运气。
知道如何实现这一目标吗?
folium 文档中关于“使用颜色图”的这一部分有您正在寻找的答案。
基本上,您需要使用
StepColormap
中的 folium.colormap
进行步进颜色贴图。因此,使用十六进制代码,您的颜色图看起来像这样(注意:我使用任意数字,因为我没有确切的数据帧值):-
# creating the custom ramp
hex_codes = ['#0b0405', '#28192e', '#3b2e5d', '#40498e', '#366a9f', '#348ba6', '#38aaac', '#55caad', '#a1dfb9', '#def5e5']
custom_colour_map = cm.StepColormap(colors = hex_codes, vmin = 0, vmax = 10, tick_labels=[0, 4, 6, 8, 10])
这是一个完整的可重现代码片段:-
import json
import folium
import requests
import pandas as pd
import branca.colormap as cm
# Read JSON and CSV file provided on folium github page...
geo_json_data = requests.get( "https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_states.json").json()
unemployment = pd.read_csv("https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_unemployment_oct_2012.csv")
unemployment_dict = unemployment.set_index("State")["Unemployment"]
# Creating the custom ramp
hex_codes = ['#0b0405', '#28192e', '#3b2e5d', '#40498e', '#366a9f', '#348ba6', '#38aaac', '#55caad', '#a1dfb9', '#def5e5']
custom_colour_map = cm.StepColormap(colors = hex_codes, vmin = 0, vmax = 10, tick_labels=[0, 4, 6, 8, 10], caption="Custom Colour Map")
# Create the map....
m = folium.Map([43,-100], tiles='cartodbpositron', zoom_start=4,
attr="<a href=https://endless-sky.github.io/>Endless Sky</a>")
folium.GeoJson(
geo_json_data,
style_function=lambda feature: {
'fillColor': custom_colour_map(unemployment_dict[feature['id']]),
'color' : 'black',
'weight' : 2,
'dashArray' : '5, 5'
}
).add_to(m)
m
这个问题有一个基本的好的答案,可以帮助您:不确定如何将色彩图与 Folium 标记图一起使用