如何调整Folium Choropleth地图的图例至正确刻度与颜色?
修正Folium Choropleth地图图例与实际数据范围不匹配的问题
你当前的代码将人口数据做了归一化处理,导致图例刻度显示01的范围,和真实人口(230012042384)不匹配,以下是修正方法:
你的原始代码:
state_data = pd.read_csv(r'D:\BaiduNetdiskDownload\US_folium\china-population.csv') max_value = state_data['population'].max() state_data['population'] /= max_value bins = list(state_data['population'].quantile([i/10 for i in range(0, 11)])) m = folium.Map(location=[37, 108], zoom_start=4) folium.Choropleth( geo_data=r'D:\BaiduNetdiskDownload\US_folium\china-counties.json', data=state_data, columns=["county", "population"], key_on="feature.id", fill_color="BuPu", fill_opacity=0.7, line_opacity=0.1, legend_name="人口数量", bins=bins, reset=True, ).add_to(m)
问题根源
你对原始人口数据执行了state_data['population'] /= max_value的归一化操作,把所有数值压缩到了0~1区间,Choropleth基于这个归一化后的数据生成图例,自然和真实人口范围不符。
修正后的代码
直接基于原始人口数据计算分位数区间,保留真实数值:
import pandas as pd import folium state_data = pd.read_csv(r'D:\BaiduNetdiskDownload\US_folium\china-population.csv') # 基于原始人口数据计算分位数bins,取消归一化步骤 bins = list(state_data['population'].quantile([i/10 for i in range(0, 11)])) m = folium.Map(location=[37, 108], zoom_start=4) folium.Choropleth( geo_data=r'D:\BaiduNetdiskDownload\US_folium\china-counties.json', data=state_data, columns=["county", "population"], key_on="feature.id", fill_color="BuPu", fill_opacity=0.7, line_opacity=0.1, legend_name="人口数量", bins=bins, reset=True, ).add_to(m) # 可选:保存地图到本地查看效果 # m.save('china_population_map.html')
说明
- 移除了归一化步骤,保留原始人口数值,确保Choropleth使用真实数据计算颜色区间
- 生成的bins基于原始数据的分位数,颜色划分逻辑不变,但图例刻度会显示真实的人口范围
- 地图上的区域颜色仍会按人口分位数区间对应,同时图例能准确反映各颜色代表的人口数量
内容的提问来源于stack exchange,提问作者dongrixinyu
相关产品推荐
相关产品推荐

