Folium Choropleth美国州地图仅显灰色,薪资数据无法渲染求助
Folium Choropleth地图全灰问题排查方案
核心排查方向
地图全灰本质是数据匹配失败或参数配置错误,按以下步骤逐一验证:
1. 确认GeoJSON与CSV的匹配键完全一致
- 检查
us-states.json中标识州的字段(比如id或name),和CSV中对应州的字段(比如state列)格式必须完全匹配:- 例:GeoJSON用州缩写(
CA),CSV就不能用全称California;反之同理。 - 用代码验证匹配率:
import json import pandas as pd # 提取GeoJSON中的州键集合 with open('us-states.json') as f: states_geo = json.load(f) geo_state_keys = {feature['properties']['id'] for feature in states_geo['features']} # 提取CSV中的州键集合 df = pd.read_csv('your_data.csv') csv_state_keys = set(df['state'].unique()) # 输出不匹配项 print("GeoJSON有但CSV缺失的州:", geo_state_keys - csv_state_keys) print("CSV有但GeoJSON缺失的州:", csv_state_keys - geo_state_keys)
- 例:GeoJSON用州缩写(
2. 检查Choropleth参数配置
确保关键参数对应关系正确:
key_on必须严格指向GeoJSON的属性路径,比如feature.properties.id(不能省略feature.前缀);columns必须是CSV中的[匹配键列, 数值列],比如['state', 'total_yearly_compensation'];- 正确配置示例:
import folium import pandas as pd df = pd.read_csv('your_data.csv') m = folium.Map(location=[37.0902, -95.7129], zoom_start=4) folium.Choropleth( geo_data='us-states.json', data=df, columns=['state', 'total_yearly_compensation'], key_on='feature.properties.id', # 与GeoJSON字段路径完全对应 fill_color='YlGn', fill_opacity=0.7, line_opacity=0.2, legend_name='Total Yearly Compensation (USD)' ).add_to(m) folium.LayerControl().add_to(m) m.save('salary_map.html')
3. 验证数值列有效性
- 检查
total_yearly_compensation和base_salary是否为数值类型,排查字符串、空值或异常值:# 查看列类型与非数值情况 print(df[['total_yearly_compensation', 'base_salary']].info()) # 转换非数值为NaN并删除无效行 df['total_yearly_compensation'] = pd.to_numeric(df['total_yearly_compensation'], errors='coerce') df = df.dropna(subset=['total_yearly_compensation'])
4. 确认GeoJSON文件完整性
- 检查
us-states.json未损坏,features数组包含完整的美国州地理数据,每个feature都有指定的属性字段; - 可本地用JSON格式化工具打开,验证结构是否正常。
5. 测试最小可用示例
用极简数据排除复杂逻辑干扰:
- 创建测试CSV:
state,total_yearly_compensation CA,150000 NY,140000 - 用该数据生成地图,若能正常显色,说明原数据存在匹配/格式问题;若仍为灰色,检查GeoJSON路径或Folium版本兼容性。
内容的提问来源于stack exchange,提问作者John.Hicks
相关产品推荐
相关产品推荐

