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

Plotly Scattermapbox颜色与标记符号同时切换失效问题求助

解决Dash中Scattermapbox同时切换颜色和符号失效的问题

你的问题核心在于Plotly对Series类型的颜色值在搭配symbol参数时解析异常,同时Checklist的列表型输入可以通过更明确的判断逻辑避免歧义。以下是修复后的完整代码:

import dash
from dash import Dash, dcc, html, Input, Output
import plotly.express as px
import pandas as pd
import plotly.graph_objs as go

df = px.data.iris()
color_dict = {'versicolor': 'brown', 'setosa': 'orange', 'virginica': 'pink'}
symbol_dict = {'versicolor': 'star', 'setosa': 'circle', 'virginica': 'triangle'}

# 将Series转换为列表,适配Plotly参数解析要求
cmap = df["species"].map(color_dict).tolist()
smap = df["species"].map(symbol_dict).tolist()

app = dash.Dash(__name__)

app.layout = html.Div(
    [
        html.P("Toggle for the color"),
        dcc.Checklist(
            id="color_toggle",
            options=[{"label": "", "value": True}],
            value=[],
            inline=True
        ),
        html.P("Toggle for the symbol"),
        dcc.Checklist(
            id="symbol_toggle",
            options=[{"label": "", "value": True}],
            value=[],
            inline=True
        ),
        html.Div(
           dcc.Graph(id="chart"),
        ),
    ]
)

@app.callback(
    Output("chart", "figure"),
    [Input("color_toggle", "value"),
     Input("symbol_toggle", "value")
     ]
)
def update_fig(cmap_on, smap_on):
    # 明确将列表输入转为布尔值,判断开关状态
    use_color = bool(cmap_on)
    use_symbol = bool(smap_on)

    fig = go.Figure(go.Scattermapbox(
        lat=df['sepal_width'],
        lon=df['sepal_length'],
        mode='markers',
        marker=dict(
            color=cmap if use_color else None,
            symbol=smap if use_symbol else None,
            size=10  # 可选:增大标记尺寸,提升可见性
        )
    ))

    # 替换为你的Mapbox Token
    mapboxtoken = "你的Mapbox Token"
    fig.update_layout(
        height=750,
        mapbox=dict(
            accesstoken=mapboxtoken,
            style='light',
        )
    ) 

    fig.update_mapboxes(zoom=4)

    return fig

if __name__ == "__main__":
    app.run_server(debug=True)

关键修改说明:

  • Series转列表:Plotly的Scattermapbox在同时设置color和symbol时,对Pandas Series类型的颜色值解析存在兼容性问题,转为列表后能确保颜色参数被正确识别。
  • 明确布尔判断:用bool(cmap_on)将Checklist的列表输入转为明确的布尔值,避免列表类型真值判断的潜在歧义(比如后续修改Checklist选项时逻辑出错)。
  • 标记尺寸优化:默认标记尺寸较小,添加size=10能让自定义符号和颜色更清晰可见。

现在你可以同时启用两个切换开关,标记的颜色和符号会同时生效。

内容的提问来源于stack exchange,提问作者tonydanza123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:00:17