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

如何在Dash中构建带有两个下拉菜单的柱状图

如何在Dash中构建带有两个下拉菜单的柱状图

我明白你的困扰——你的数据集结构和常见示例不太一样,而且已经搞定了单下拉菜单的情况,但双下拉的回调逻辑确实需要针对性调整一下。咱们来一步步修正你的代码:

首先看你现有回调函数的问题:你只根据selected_statistic筛选了数据,但完全没用到year这个输入,而且df2[df2]这种写法是无效的,这也是图表没正确响应年份下拉的核心原因。

假设你的数据集是长格式(包含city、statistic、year、value这几个核心列),咱们来修改代码:

修正后的完整代码

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd

# 读取数据(确保你的Excel表中包含year列哦)
df = pd.read_excel('cities.xlsx', engine='openpyxl')

app = dash.Dash()

app.layout = html.Div([
    html.Div([
        dcc.Dropdown(
            id= "selected_statistic",
            options=[
                {'label': 'Population', 'value': 'pop'},
                {'label': 'Area', 'value': 'a'},
                {'label': 'Density', 'value': 'dens'}
            ],
            value='pop'
        )
    ], style={'width': '48%', 'display': 'inline-block'}),
    
    html.Div([
        dcc.Dropdown(
            id= "year",
            options=[
                {'label': '1990', 'value': '1990'},
                {'label': '2000', 'value': '2000'},
                {'label': '2010', 'value': '2010'},
                {'label': '2020', 'value': '2020'}
            ],
            value='1990'
        ),
    ], style={'width': '48%', 'float': 'right', 'display': 'inline-block'}),
    
    dcc.Graph(id='graph')
])

@app.callback(
    Output('graph', 'figure'),
    [Input('selected_statistic', 'value'),
     Input('year', 'value')]
)
def update_figure(selected_statistic, year):
    # 同时根据统计指标和年份筛选数据,确保只拿到当前选中维度的内容
    filtered_df = df[(df["statistic"] == selected_statistic) & (df["year"] == year)]
    
    # 生成柱状图,可选添加动态标题让展示更直观
    fig = px.bar(
        filtered_df,
        x="city",
        y="value",
        color="city",
        title=f'{selected_statistic.capitalize()} by City ({year})'
    )
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)  # 加上debug=True方便开发时调试

关键修改点说明:

  • 回调筛选逻辑优化:新增年份筛选条件,用&连接两个布尔索引,实现双下拉选项的联动筛选。
  • 移除无效写法:删掉了无意义的df2[df2],直接用筛选后的filtered_df生成图表。
  • 体验优化:添加动态标题,让图表能直观展示当前选中的统计指标和年份。

这样调整后,两个下拉菜单就能完全联动控制柱状图内容了——切换不同的统计指标或年份,图表会自动更新对应的数据。

备注:内容来源于stack exchange,提问作者OGhilex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:22:57