添加第二个下拉框后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
相关产品推荐
相关产品推荐

