如何用Plotly绘制印度带城市名及区域边界的交互式AQI地图
使用Plotly绘制交互式印度AQI地图
以下是实现带城市名称和印度区域边界的交互式AQI地图的完整代码,可完全替代原Matplotlib静态图实现:
步骤1:导入依赖库
import plotly.express as px import plotly.graph_objects as go import geopandas as gpd
步骤2:加载并处理印度边界数据
# 加载全球基础地图数据,筛选印度区域 world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) india_boundary = world[world.name == 'India'] # 转换为Plotly兼容的GeoJSON格式 india_geojson = india_boundary.__geo_interface__
步骤3:预处理城市AQI数据
假设你的city_day_gdf是包含点几何的GeoDataFrame,先提取经纬度列(如果已有lat/lon字段可跳过此步):
city_day_gdf['lon'] = city_day_gdf.geometry.x city_day_gdf['lat'] = city_day_gdf.geometry.y
步骤4:绘制交互式AQI散点图
# 创建散点地图,hover时显示城市名称、AQI及等级 fig = px.scatter_mapbox( city_day_gdf, lat='lat', lon='lon', color='AQI_Bucket', size='AQI', size_max=50, # 限制标记最大尺寸,避免遮挡 color_continuous_scale='PuBuGn', # 和原Matplotlib配色一致 hover_data={ 'City': True, # 替换为你数据集中实际的城市名字段 'AQI': True, 'AQI_Bucket': True, 'lat': False, 'lon': False }, title='2015-2020年印度空气质量指数(AQI)分布' )
步骤5:叠加印度区域边界
# 添加印度边界轨迹,保留原Matplotlib的灰色底+白色边界风格 fig.add_trace( go.Scattermapbox( geojson=india_geojson, locations=india_boundary.index, featureidkey="properties.index", mode='lines', line=dict(width=2, color='white'), fillcolor='rgba(128,128,128,0.3)', hoverinfo='skip' # 悬停时不显示边界信息,避免干扰 ) )
步骤6:配置地图布局
# 设置地图视角和样式 fig.update_layout( mapbox_style='carto-positron', # 可选样式:open-street-map、stamen-terrain等 mapbox_zoom=4, mapbox_center={"lat": 20.5937, "lon": 78.9629}, # 印度地理中心坐标 margin={"r":0,"t":50,"l":0,"b":0} ) # 调整颜色条位置,避免遮挡地图 fig.update_coloraxes(colorbar=dict( title='AQI等级', orientation='horizontal', yanchor='bottom', y=-0.15 )) # 显示交互式地图 fig.show()
关键说明
- 替换
hover_data中的'City'为你数据集中实际的城市名字段 - 地图样式可根据需求切换,
carto-positron是简洁的浅色风格,适合数据展示 - 标记尺寸通过
size_max限制,避免大AQI值的标记过度遮挡其他城市 - 悬停时会自动显示城市名称、AQI数值和AQI等级,完全满足交互式需求
内容的提问来源于stack exchange,提问作者Najo
相关产品推荐
相关产品推荐

