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

Plotly Dash仪表板初始取消所有图例选中状态的实现方法

在Plotly Dash中初始取消所有线条选中状态的实现方法

当然可以做到!要让Dash仪表板启动时所有线条都处于未选中(即隐藏)状态,我给你分享两种实用的实现方式,按需选择即可:

方法1:创建Trace时直接设置初始可见性

这是最直接的方式,在定义每个线条(trace)时,将visible参数设为'legendonly'。这个参数的作用是:线条默认不显示在图表中,但会保留在图例里,点击图例项就能切换它的显示/隐藏状态,刚好匹配你要的初始全未选中效果。

示例代码:

import dash
from dash import dcc, html
import plotly.graph_objects as go

app = dash.Dash(__name__)

# 创建多条初始隐藏的线条
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1,2,3], y=[4,5,1], name='线条1', visible='legendonly'))
fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,3], name='线条2', visible='legendonly'))
fig.add_trace(go.Scatter(x=[1,2,3], y=[6,2,4], name='线条3', visible='legendonly'))

app.layout = html.Div([
    dcc.Graph(figure=fig)
])

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

如果是用Plotly Express批量创建的图表,还可以用update_traces一次性设置所有线条的状态,效率更高:

import plotly.express as px
import dash
from dash import dcc, html

app = dash.Dash(__name__)

df = px.data.gapminder().query("continent=='Oceania'")
fig = px.line(df, x="year", y="lifeExp", color="country")
# 批量将所有线条设为初始隐藏
fig.update_traces(visible='legendonly')

app.layout = html.Div([
    dcc.Graph(figure=fig)
])

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

方法2:用回调动态设置初始状态

如果你的图表是动态生成的(比如根据用户输入加载数据),或者需要更灵活的状态控制,可以用Dash的回调来在应用启动时自动修改所有线条的可见性。

示例代码:

import dash
from dash import dcc, html, Input, Output, State
import plotly.graph_objects as go

app = dash.Dash(__name__)

# 先创建默认显示所有线条的基础图表
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1,2,3], y=[4,5,1], name='线条1'))
fig.add_trace(go.Scatter(x=[1,2,3], y=[2,1,3], name='线条2'))
fig.add_trace(go.Scatter(x=[1,2,3], y=[6,2,4], name='线条3'))

app.layout = html.Div([
    dcc.Graph(id='dynamic-graph', figure=fig),
    # 用隐藏的dcc.Store作为初始触发源,确保应用启动时回调自动执行
    dcc.Store(id='initial-trigger', data='start')
])

@app.callback(
    Output('dynamic-graph', 'figure'),
    Input('initial-trigger', 'data'),
    State('dynamic-graph', 'figure')
)
def hide_all_on_start(_, current_fig):
    # 遍历所有trace,设置为初始隐藏状态
    for trace in current_fig['data']:
        trace['visible'] = 'legendonly'
    return current_fig

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

这里用dcc.Store作为启动时的触发信号,回调会自动把所有线条的可见性改为'legendonly',实现初始全未选中的效果。

这两种方法都能完美满足你的需求,你可以根据自己的业务场景选择最合适的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:02:37