Python Dash多列筛选下拉菜单折线图开发问题
Python Dash多列筛选下拉菜单折线图开发问题
嗨,我来帮你搞定这个问题!你当前的代码只用到了LIST 1的选项,完全没涉及LIST 2和LIST 3,所以肯定凑不齐你要的7个选项呀!接下来咱们一步步调整代码,实现你想要的功能:
问题核心分析
你需要的7个下拉选项是:「All」 + 「List1-Y」「List1-N」「List2-Y」「List2-N」「List3-Y」「List3-N」。现在的代码只生成了LIST 1的选项,所以得先把另外两个列表的选项加进去,再调整回调里的绘图逻辑。
修改后的完整代码
import dash from dash import html, dcc, Input, Output import plotly.graph_objects as go import pandas as pd # 假设你已经加载了df数据,替换成你的真实数据加载逻辑即可 # df = pd.read_csv("your_data_source.csv") app = dash.Dash(__name__) # 构建完整的7个下拉选项 dropdown_options = [ {'label': 'All', 'value': 'All'} ] + [ {'label': f'List {num} - {val}', 'value': f'List{num}_{val}'} for num in [1, 2, 3] for val in ['Y', 'N'] ] app.layout = html.Div([ dcc.Dropdown( id='category-filter', options=dropdown_options, value='All', style={'width': '50%'} ), dcc.Graph(id='line-chart') ]) @app.callback( Output('line-chart', 'figure'), Input('category-filter', 'value') ) def update_chart(selected_category): figure_data = [] if selected_category == 'All': # 选中All时,绘制所有6种分类的折线 for num in [1, 2, 3]: for val in ['Y', 'N']: filtered_df = df[df[f'LIST {num}'] == val] figure_data.append(go.Scatter( x=filtered_df['DATE'], y=filtered_df['TONNAGE'], mode='lines+markers', name=f'List {num} - {val}' )) else: # 解析选中的具体选项,拆分出对应列表和Y/N值 list_tag, val = selected_category.split('_') list_col = f'LIST {list_tag[-1]}' # 提取编号,比如List1_Y对应LIST 1 filtered_df = df[df[list_col] == val] figure_data.append(go.Scatter( x=filtered_df['DATE'], y=filtered_df['TONNAGE'], mode='lines+markers', name=selected_category.replace('_', ' - ') )) # 构建图表布局 figure = { 'data': figure_data, 'layout': go.Layout( title='Tonnage Over Time by List Categories', xaxis={'title': 'Date'}, yaxis={'title': 'Tonnage'}, legend={'title': 'Category'} ) } return figure if __name__ == '__main__': app.run_server(debug=True)
关键修改点说明
- 下拉选项补全:用嵌套循环生成
List1-Y到List3-N的所有分类选项,给每个选项分配唯一的value(比如List1_Y),避免标签和值混淆。 - 回调逻辑优化:
- 选「All」时,遍历所有6种List+Y/N组合,分别过滤数据并生成折线,一次性展示所有分类趋势;
- 选单个选项时,拆分
value字符串得到对应的列表列和Y/N值,精准过滤数据并绘制单条折线。
- 可读性提升:给图例添加标题,让每条折线对应的分类更清晰。
这样调整后,下拉菜单就有你需要的7个选项,并且能正确切换显示对应的折线啦!
备注:内容来源于stack exchange,提问作者TropicalMagic
相关产品推荐
相关产品推荐

