Plotly Choropleth未绘制澳大利亚郊区多边形问题排查
ID字段类型/内容不匹配
确认GeoJSON里每个Feature的id属性,和数据表Postal字段的类型、内容完全一致。比如GeoJSON的id是字符串格式(如"3000"),但数据表Postal是数字类型(3000),Plotly无法完成匹配,自然不会渲染任何多边形。可以把数据表的Postal转成字符串,或者调整GeoJSON的id为数字类型。GeoJSON格式或加载问题
先检查GeoJSON文件路径是否正确,加载后用print(geojson_data['features'][0])查看第一个Feature的结构,确保id属性在Feature的顶层(不是嵌套在properties里)。如果GeoJSON存在语法错误(比如括号不闭合、字段名拼写错误),Plotly无法解析,也会显示空白。Plotly参数配置错误
调用px.choropleth时,必须确保参数对应正确,尤其是这几个关键项:geojson传入正确加载的GeoJSON对象locations指定为数据表的Postal字段featureidkey明确设置为"id"(因为你把id放在Feature顶层,Plotly默认会找properties.id)
示例正确参数写法:
fig = px.choropleth(df, geojson=suburbs_geojson, locations='Postal', featureidkey='id', color='Status')坐标系/投影不匹配
澳大利亚部分郊区GeoJSON可能使用本地坐标系(如GDA94/EPSG:4283),而Plotly默认采用WGS84(EPSG:4326)。坐标系不匹配会导致多边形被渲染到视野外,看起来是空白。可以添加fig.update_geos(fitbounds="locations", visible=False)让地图自动适配GeoJSON范围,或者提前将GeoJSON转换为WGS84坐标系。无匹配的邮政编码数据
检查数据表中的Postal值,是否有至少一部分能在GeoJSON的id中找到对应。如果数据表的邮政编码完全不在GeoJSON的id列表里,Plotly没有可渲染的匹配区域,就会显示空白。可以用set(df['Postal']) & set([feat['id'] for feat in suburbs_geojson['features']])查看两者的交集是否为空。
内容的提问来源于stack exchange,提问作者kolman

