Folium绘制带邮编的Choropleth统计图时区域填充色未生效求助
问题原因
代码里有4个核心错误导致填充色不生效:
- geo_data传值错误:你已经将
tmp的邮编字段从CODE重命名为zipcode,但传入Choropleth的还是未修改的原始geo_df,二者字段不匹配 - columns参数顺序写反:folium要求
columns参数第一个放匹配主键(即邮编字段),第二个放数值展示字段(即未参保占比),你写反了顺序 - key_on参数格式错误:
key_on需要指向GeoJSON属性字段的完整层级,必须写成feature.properties.你的字段名格式,不能直接写字段名 - 填充透明度设置过低:
fill_opacity=0.2的透明度接近透明,即使渲染成功也很难看出颜色
修正后代码
import folium import pandas as pd import numpy as np import os import geopandas as gpd geo_data_file=os.path.join('Zipcodes_Arc.geojson') # 读取GeoJSON geo_df = gpd.read_file(geo_data_file) # 读取CSV数据 df = pd.read_csv(os.path.join('zip_uninsured.csv')) # 统一两边邮编字段名和类型,避免匹配失败 geo_df = geo_df.rename(columns = {"CODE":"zipcode"}) # 确保两边邮编都是字符串格式,避免前导零导致的匹配失败 geo_df['zipcode'] = geo_df['zipcode'].astype(str) df['zipcode'] = df['zipcode'].astype(str) my_map = folium.Map(location=[39.95228, -75.16245], zoom_start=9, detect_retina=True, control_scale=False) folium.Choropleth( geo_data=geo_df, name='choropleth', data=df, # 修正顺序:先主键,后数值列 columns=['zipcode', 'Uninsured'], # 修正key_on的完整路径 key_on='feature.properties.zipcode', fill_color='OrRd', # 调高透明度方便查看 fill_opacity=0.7, line_opacity=0.8, line_color='Blue', legend_name='未参保人口占比' ).add_to(my_map) # 可以直接保存为html打开查看 my_map.save('uninsured_map.html')
额外排查点
如果修改后还是不生效,可以先打印两个数据集的邮编样本,确认两边的邮编格式、数值范围没有异常,排除邮编不匹配的问题。
内容的提问来源于stack exchange,提问作者PyDesi
相关产品推荐
相关产品推荐

