如何在 folium Choropleth 地图上使用自定义颜色(颜色)渐变

问题描述 投票:0回答:1

我想向我的 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
但没有任何运气。

知道如何实现这一目标吗?

python leaflet maps folium
1个回答
0
投票

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 标记图一起使用

© www.soinside.com 2019 - 2024. All rights reserved.