Folium绘制北卡房价Choropleth地图:颜色及图例异常问题求助
北卡罗来纳州房价Choropleth地图问题修复
核心问题排查
你的代码存在几个关键错误,导致地图渲染异常:
- 数据过滤逻辑错误:错误地用地图标题
INDICATOR匹配邮编列RegionName,过滤后仅保留空数据或无效数据,后续筛选最大值进一步缩小数据范围,最终没有有效数据关联到GeoJSON多边形,导致渲染黑灰色。 - 缺少数据关联参数:未设置
key_on参数,Folium无法将DataFrame中的邮编与GeoJSON里的多边形匹配。 - 地图初始定位错误:
location=[20,10]指向非洲区域,而非北卡罗来纳州,导致地图加载后看不到目标区域。 - 颜色方案不符合需求:使用的
YlOrRd是黄红渐变,不符合你要的绿到橙过渡需求。 - 数据类型不匹配:DataFrame中的邮编(
RegionName)可能是数值类型,而GeoJSON中是字符串类型,无法完成匹配。
修复后完整代码
import folium import pandas as pd import requests import os # 获取工作目录并读取数据 working_directory = os.getcwd() path = os.path.join(working_directory, 'Desktop', 'NCHomes.csv') # 用os.path.join避免路径拼接错误 df = pd.read_csv(path) # 确认房价范围(可选,用于设置颜色区间) min_price, max_price = df['Homes'].min(), df['Homes'].max() print(f"房价范围: ${min_price} - ${max_price}") # 准备地图数据:确保邮编为字符串类型,匹配GeoJSON格式 map_data = df[['RegionName', 'Homes']].copy() map_data['RegionName'] = map_data['RegionName'].astype(str) # 转字符串 # 加载北卡邮编GeoJSON数据 geojson_url = 'https://raw.githubusercontent.com/OpenDataDE/State-zip-code-GeoJSON/master/nc_north_carolina_zip_codes_geo.min.json' geojson = requests.get(geojson_url).json() # 初始化地图:北卡罗来纳州中心坐标,设置合适缩放级别 m = folium.Map(location=[35.782169, -79.0193], zoom_start=6) # 添加Choropleth图层 folium.Choropleth( geo_data=geojson, data=map_data, columns=['RegionName', 'Homes'], key_on='feature.properties.ZCTA5CE10', # GeoJSON中邮编字段 fill_color='YlGnOr_r', # 反转的黄-绿-橙渐变,满足低房价橙、高房价绿的需求 fill_opacity=0.7, line_opacity=0.2, legend_name='北卡罗来纳州房价(美元)', threshold_scale=[100000, 300000, 500000, 700000, 850000] # 自定义颜色区间,匹配你的需求 ).add_to(m) # 添加地图标题 title_html = ''' <h3 align="center" style="font-size:16px"><b>北卡罗来纳州房价分布地图</b></h3> ''' m.get_root().html.add_child(folium.Element(title_html)) # 保存或显示地图 m.save('nc_home_prices.html') m
关键修复说明
- 数据逻辑修正:直接使用原始DataFrame的邮编和房价数据,无需错误过滤。
- 数据类型统一:将邮编转为字符串,确保与GeoJSON中的字符串邮编匹配。
- 添加
key_on参数:指定GeoJSON中存储邮编的字段feature.properties.ZCTA5CE10,完成数据与多边形的关联。 - 调整地图定位:使用北卡罗来纳州中心坐标
[35.782169, -79.0193],缩放级别设为6,确保加载后直接显示目标区域。 - 颜色方案调整:使用
YlGnOr_r反转渐变,实现房价越高颜色越绿、越低越橙的效果;通过threshold_scale设置10万到85万的区间,精准匹配你的需求。 - 添加地图标题:通过HTML元素添加居中标题,解决无地图名称的问题。
内容的提问来源于stack exchange,提问作者harmoniceigen
相关产品推荐
相关产品推荐

