You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:14:59