使用Plotly.express+GeoJSON绘制密歇根州郡级污染热力图遇阻
解决Plotly Express绘制密歇根州郡级热力图显示异常问题
核心问题排查与解决步骤
校验郡名匹配一致性
确保DataFrame中County列的名称与GeoJSON里properties.NAME的字符串完全匹配(包括大小写、空格、是否带"County"后缀等)。可以用以下代码快速排查不匹配项:# 提取GeoJSON中的所有郡名 geojson_counties = [feat['properties']['NAME'] for feat in geojson_data['features']] # 找出DataFrame中不存在于GeoJSON的郡名 missing_counties = df[~df['County'].isin(geojson_counties)] print("不匹配的郡名:", missing_counties['County'].tolist())若存在不匹配,统一双方的名称格式(比如去掉"County"后缀、修正大小写)即可。
转换GeoJSON坐标系至WGS84
部分州级GeoJSON可能使用地方坐标系(如密歇根州常用的EPSG:26917),而Plotly要求数据为WGS84(EPSG:4326)坐标系。用GeoPandas转换:import geopandas as gpd # 读取GeoJSON并转换坐标系 gdf = gpd.read_file("Counties_(v17a).geojson") gdf = gdf.to_crs(epsg=4326) # 转为Plotly可用的JSON格式 geojson_data = gdf.to_json()优化地图投影与显示范围
替换mercator投影为美国本土专用的albers usa,并添加scope="usa"限制显示范围,避免出现无效的蓝色大框:fig = px.choropleth(df, geojson=geojson_data, color="Contam Density", locations="County", featureidkey="properties.NAME", projection="albers usa" ) fig.update_geos(fitbounds="locations", visible=False, scope="usa") fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) fig.show()自定义悬停信息(解决原Figure Factory的悬停问题)
通过hover_data参数自定义悬停显示的字段与格式,提升交互体验:fig = px.choropleth(df, geojson=geojson_data, color="Contam Density", locations="County", featureidkey="properties.NAME", projection="albers usa", hover_data={"County": True, "Contam Density": ":,.2f"} # 格式化数值为两位小数 )
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

