Plotly绘制印度Choropleth地图时州显示过小的修复咨询
解决印度Choropleth地图州显示比例异常的问题
问题根源
你当前的geo_df和geojson_data都是**区级(district)**数据,但你通过st_nm(州名)进行关联匹配,导致同一个州的所有区级边界被单独渲染;同时手动设置的缩放参数、重复的中心坐标配置,加上未适配地理范围,最终导致州显示过小、比例失真。
修复步骤
1. 聚合数据到州级(若目标为展示州级事故)
先把区级数据按州汇总事故数,避免重复渲染:
# 按州名聚合事故总数 state_geo_df = geo_df.groupby("st_nm")["Accidents"].sum().reset_index()
2. 使用州级GeoJSON文件
替换现有的区级GeoJSON为印度各州边界的GeoJSON(确保GeoJSON的properties字段中包含st_nm,与你的数据字段匹配)。
3. 调整地图配置,自动适配地理范围
修改代码,去掉重复的中心设置,添加自动适配范围的参数,同时优化投影:
import plotly.express as px # 加载州级GeoJSON(替换为你的州级GeoJSON数据) state_geojson = ... fig = px.choropleth( state_geo_df, geojson=state_geojson, locations="st_nm", featureidkey="properties.st_nm", color='Accidents', center=dict(lat=22, lon=78) # 印度地理中心坐标 ) fig.update_geos( projection_type="mercator", fitbounds="locations", # 自动适配GeoJSON数据范围,核心修复点 visible=False # 隐藏默认世界地图背景,仅显示目标区域 ) fig.show()
额外说明
- 如果你的目标是展示区级事故数据,无需聚合,但要将
locations设为district,featureidkey设为properties.district,同时保留fitbounds="locations"参数,让地图自动适配所有区级边界的范围。 fitbounds="locations"会让Plotly自动计算并聚焦你的GeoJSON数据的地理范围,比手动调整projection_scale更精准,是解决显示过小问题的关键。
内容的提问来源于stack exchange,提问作者Ryan_Brusseau
相关产品推荐
相关产品推荐

