branca.colormap线性色卡使用问题:调色板与平滑标签设置
问题1:Linear Colormap使用其他调色板及查询可用列表
问题原因
branca.colormap.linear对象仅包含部分预定义线性调色板(如YlOrRd_09),gnuplot这类调色板不在其默认属性中,直接调用会触发属性不存在的报错。
解决方法
方法1:手动构建LinearColormap
如果需要使用gnuplot或其他非预定义调色板,可以直接通过LinearColormap类创建,搭配matplotlib获取对应调色板的颜色值:
from branca.colormap import LinearColormap import matplotlib.cm as cm # 从matplotlib获取gnuplot调色板的颜色数组 gnuplot_colors = cm.get_cmap('gnuplot', 256)(range(256)) # 转换为hex颜色格式 gnuplot_hex = [f'#{int(r*255):02x}{int(g*255):02x}{int(b*255):02x}' for r,g,b,a in gnuplot_colors] # 创建线性色卡并设置数值范围 x = LinearColormap(gnuplot_hex).scale(1, 10)
方法2:查询预定义调色板列表
要查看linear对象下的所有可用预定义调色板,直接打印其属性即可:
from branca.colormap import linear print(dir(linear))
输出结果中,非下划线开头的属性即为所有可用的预定义线性调色板名称。
问题2:保留自定义标签同时实现颜色平滑显示
问题原因
to_step()会将线性色卡转为离散分段模式,丢失平滑过渡效果;to_linear()则会重置刻度标签,回到默认线性刻度,无法保留自定义设置。
解决方法
无需通过to_step()和to_linear()来回转换,直接创建线性色卡后手动设置自定义刻度索引(index)即可,既保持颜色平滑过渡,又保留自定义标签:
import folium import branca.colormap as cm # 创建线性色卡并设置数值范围 color_mapa = cm.linear.YlOrRd_09.scale(10, 100) # 设置自定义刻度标签对应的索引值 color_mapa.index = [10,20,30,40,50,60,70,80,90,100] color_mapa.caption = 'Colors' # 重复操作创建第二个色卡 color_mapa2 = cm.linear.YlOrRd_09.scale(10, 100) color_mapa2.index = [10,20,30,40,50,60,70,80,90,100] color_mapa2.caption = 'Colors2' m = folium.Map(location=[52,20], zoom_start=7) color_mapa.add_to(m) color_mapa2.add_to(m) m.save('mapy_test.html')
生成的色卡会保持颜色平滑过渡,同时显示你自定义的刻度标签。
内容的提问来源于stack exchange,提问作者Maciej
相关产品推荐
相关产品推荐

