You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:06:05