如何为Plotly Mapbox添加复选框,按Engagement值切换点位?
为Plotly Mapbox散点图添加Engagement值筛选复选框
完全可以实现这个功能,核心思路是把不同Engagement值的点位拆分成独立的图层(trace),然后通过Plotly的复选框控件控制每个图层的显示/隐藏。以下是修改后的完整代码:
import plotly.express as px import pandas as pd # 假设你的data是已加载好的DataFrame # data = pd.read_csv("your_data_source.csv") colour_map = {1: "#ff0000", 2: "#2a00ff", 3: "#1be43c"} # 初始化空地图 fig = px.scatter_mapbox( zoom=4, mapbox_style="carto-darkmatter", ) # 为每个Engagement值创建独立的点位图层 for eng_val in colour_map.keys(): subset = data[data["Engagement"] == eng_val] fig.add_scattermapbox( lat=subset["Latitude"], lon=subset["Longitude"], name=f"Engagement {eng_val}", hover_data={ "Latitude": False, "Longitude": False, "1st study": True }, marker=dict(size=6, color=colour_map[eng_val]) ) # 配置布局、悬停样式和复选框控件 fig.update_layout( margin={"r": 0, "t": 0, "l": 0, "b": 0}, hoverlabel=dict(bgcolor="black", font_size=16, font_family="Lato"), updatemenus=[ dict( type="checkbox", direction="right", x=0.05, y=1.15, active=[0,1,2], # 默认全选所有选项 buttons=[ dict( label=f"Engagement {val}", method="update", args=[{"visible": [val == eng for eng in colour_map.keys()]}] ) for val in colour_map.keys() ] ) ] ) fig.show()
关键细节说明:
- 拆分独立图层:将原数据按
Engagement值拆分,每个值对应一个单独的散点图层,这样才能实现单个类别的显示控制 - 复选框逻辑:通过
updatemenus添加复选框组,每个按钮对应切换对应Engagement值图层的可见性,active参数设置初始状态为全选 - 样式继承:完全保留了你原代码中的地图风格、标记尺寸、悬停标签样式,保证视觉效果和原图一致
内容的提问来源于stack exchange,提问作者Vessel
相关产品推荐
相关产品推荐

