如何在Plotly Express的choropleth_mapbox中添加城市边界?
用Plotly Choropleth Mapbox添加城市边界轮廓
当然可行,你可以通过叠加第二个choropleth_mapbox trace实现,核心是把城市边界的GeoJSON作为新图层传入,只渲染边界线条,不填充颜色。
实现步骤与代码示例
假设你已经把城市边界的shapefile转换成了GeoJSON格式(变量名为city_boundary_geojson),且GeoJSON的properties里有唯一标识字段(比如city_id),直接在现有代码基础上添加以下逻辑:
import pandas as pd import plotly.express as px # 你的原有邮编地图代码 zip_map_fig = px.choropleth_mapbox(zips, geojson=zip_map_zips, locations='Zip Code', color='price', range_color=(1, 5), featureidkey='properties.Zip Code', center={'lat':mkt_lat, 'lon':mkt_long}, labels={'price' : 'Price'}, mapbox_style='carto-positron', color_continuous_scale='blues', opacity=0.3, zoom=9, hover_data=['Zip Code']) # 添加城市边界轮廓的choropleth_mapbox图层 # 构造一个极简数据集,只包含边界的唯一标识 boundary_df = pd.DataFrame({'city_id': ['目标城市ID']}) # 多城市的话传多个ID列表 zip_map_fig.add_trace(px.choropleth_mapbox( data_frame=boundary_df, geojson=city_boundary_geojson, locations='city_id', featureidkey='properties.city_id', # 必须和GeoJSON属性字段对应 color=[0], # 固定值,仅用于满足参数要求 color_continuous_scale=['rgba(0,0,0,0)'], # 填充色完全透明 opacity=0, hover_data=None # 不需要hover显示边界信息可设为None ).data[0]) # 调整边界线条样式 zip_map_fig.update_traces( selector={'type': 'choroplethmapbox'}, marker_line_color='black', # 边界线颜色,可换成red、blue等 marker_line_width=2 # 边界线宽度,按需调整 ) zip_map_fig.update_geos(fitbounds='locations', visible=True) zip_map_fig.show()
关键细节说明
- 城市边界的GeoJSON必须格式正确,
featureidkey要和GeoJSON中每个feature的properties字段严格匹配 - 如果要显示多个城市边界,只需把
boundary_df里的city_id换成包含多个ID的列表即可 - 通过
marker_line_color和marker_line_width可以自定义边界的样式,让轮廓更突出
内容的提问来源于stack exchange,提问作者SergeNYC
相关产品推荐
相关产品推荐

