Plotly绘制不列颠哥伦比亚省多边形GeoDataFrame时几何图形不显示
问题根因
px.choropleth的geojson参数不支持直接传入GeoPandas的Geometry列(GeoSeries),要求接收带features字段的标准GeoJSON结构,且每个几何特征需要有明确的id属性,才能和locations参数传入的标识值做匹配,你当前的传参方式导致Plotly无法关联数据和几何图形,因此画布为空。- 你对
locations参数的理解正确,它的作用就是将DataFrame的每行数据和GeoJSON中的单个多边形做一一映射,要求传入的标识值和GeoJSON中每个feature的id完全对应。
修复后代码
import pyproj import geopandas as gpd import plotly.express as px # 坐标重投影逻辑保留,可简化写法 pacificrange_CP_web.to_crs(epsg=4326, inplace=True) # 生成符合Plotly要求的GeoJSON结构,为每个feature绑定对应polyid作为id geojson_data = pacificrange_CP_web.__geo_interface__ for i, feature in enumerate(geojson_data["features"]): feature["id"] = pacificrange_CP_web.iloc[i]["polyid"] # 绘图参数调整 fig = px.choropleth( pacificrange_CP_web, geojson=geojson_data, locations="polyid", # 直接传入列名即可,无需传入完整Series color="protected" ) fig.update_geos(fitbounds="locations", visible=False) fig.show()
补充排查建议
- 提前检查
polyid列不存在空值、重复值,确保每个id唯一对应一个多边形 - 如果绘制的是小范围区域,可临时将
update_geos的visible参数改为True,确认视图范围是否正常适配 - 小区域绘制更推荐使用
px.choropleth_mapbox,展示精度更高,仅需额外添加mapbox_style="carto-positron"参数即可,无需申请额外token
内容的提问来源于stack exchange,提问作者Max Duso
相关产品推荐
相关产品推荐

