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

添加第二个下拉框后Dash应用无数据显示,求代码排查

问题诊断与修复方案

你的代码存在几个关键问题,导致添加第二个下拉框后无法显示数据,以下是具体问题和修复步骤:

1. 多选下拉框的过滤逻辑错误

第一个下拉框select_mode设置了multi=True,支持用户选择多个交通模式,但你的过滤代码使用dff['subsystem'] == mode_slctd:

dff = dff[(dff['subsystem'] == mode_slctd) & (dff['startstn'] == station_slctd)]

当开启多选后,mode_slctd会变成列表类型(比如['LUL', 'LTB']),直接用==无法匹配列表与列中的单个值,会导致过滤后的数据为空。

修复:改用isin()方法支持多选匹配:

dff = dff[dff['subsystem'].isin(mode_slctd)]

2. 站点下拉框初始值导致过滤失效

第二个下拉框select_station的初始值设为None,此时dff['startstn'] == station_slctd会过滤出startstn字段为None的行,而你的数据中大概率没有这类记录,导致初始状态下无数据展示。

修复:添加判断逻辑,未选择站点时跳过站点过滤:

if station_slctd is not None:
    dff = dff[dff['startstn'] == station_slctd]

3. 站点下拉框选项的冗余处理

你生成station_dropdown时做了多余的字典映射:

station_dict = {str(station): station for station in xstations}
station_dropdown = [{'label': key.strip().title(), 'value': value} for key, value in station_dict.items()]

这里key和value本质是相同内容(仅key转成了字符串),可能引发类型不匹配问题,可简化为:

station_dropdown = [{'label': str(station).strip().title(), 'value': station} for station in xstations]

4. 初始值与多选属性的兼容性

select_mode开启了multi=True,但初始值设为单个字符串'LUL',虽然Dash会自动转为列表,但显式设置为列表更规范:

value = ['LUL']

完整修复后的回调函数代码

def update_graph(mode_slctd, station_slctd):
    print(mode_slctd)
    print(type(mode_slctd))

    container = f"用户选择的交通模式: {mode_slctd}"
    if station_slctd:
        container += f",起点站: {station_slctd}"

    dff = df.copy()
    # 处理交通模式多选
    dff = dff[dff['subsystem'].isin(mode_slctd)]
    # 处理站点选择(未选择则不过滤)
    if station_slctd is not None:
        dff = dff[dff['startstn'] == station_slctd]

    # 空数据处理,避免图表报错
    if dff.empty:
        return container, px.bar(title="无匹配数据")

    # 构建柱状图
    order_of_days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    jny_by_day = dff['day'].value_counts()
    jny_by_day_df = jny_by_day.reset_index()
    jny_by_day_df.columns = ['Day', 'Journeys']
    bar_chart = px.bar(jny_by_day_df, x='Day', y='Journeys',
                       title='每日出行次数',
                       labels={'Day': '星期', 'Journeys': '出行次数'},
                       template='plotly_dark',
                       category_orders={'Day': order_of_days})

    return container, bar_chart

额外优化建议

  • 添加空数据判断:当过滤后无数据时,返回提示性图表,避免Dash抛出错误
  • 优化容器文本,同时展示交通模式和站点的选择结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:19:50