【问题标题】:Plot Bar Chart based on unique values in Python Dash根据 Python Dash 中的唯一值绘制条形图
【发布时间】:2021-08-02 15:31:11
【问题描述】:

我试图在 Python Dash 中嵌入的交互式条形图中可视化不同金融基准(A、X)的加权方案。每个基准由具有不同权重的不同指标组成。切换或取消选择基准时,条形图应相应更改。不知何故,我无法正确调整代码的回调部分,因为我无法创建条形图。有人熟悉这个问题吗?

我正在使用 Jupyter Notebook。这是我的数据示例代码:

包和数据:

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

data = [['A', 'B', 0.4], ['A', 'C', 0.5], ['A', 'D', 0.1], ['X', 'Y', 0.15], ['X', 'Z', 0.85]]
df = pd.DataFrame(data, columns = ['BM_NAME', 'INDEX_NAME', 'WEIGHT'])
df

条形图。在 dash 中,想法是为单个选定的基准测试显示单个条形图(因此“multi”设置为“false”):

barchart = px.bar(
    data_frame=df,
    x="BM_NAME",
    y="WEIGHT",
    color="INDEX_NAME",
    opacity=0.9,
    barmode='group')
barchart

破折号:

# create the Dash app
app = dash.Dash()

# set up app layout
app.layout = html.Div(children=[
    html.H1(children='BM Composition'),
    dcc.Dropdown(id='BM-dropdown',
                options=[{'label': x, 'value': x}
                        for x in df.BM_NAME.unique()],
                 value='A',
                 multi=False, clearable=True),
    dcc.Graph(id='bar-chart')
])


# set up the callback function
@app.callback(
    Output(component_id="bar-chart", component_property="figure"),
    [Input(component_id="BM-dropdown", component_property="value")],
)
def display_BM_composition(selected_BM):
    dff = df.BM_NAME.unique()  # Only use unique values in column "BM_NAME" selected in dropdown

    barchart = px.bar(
        data_frame=df,
        x=filtered_BM,
        y="WEIGHT",
        color="INDEX_NAME",
        opacity=0.9,
        barmode='group')

    return barchart

# Run local server
if __name__ == '__main__':
    app.run_server(debug=True, use_reloader=False)

非常感谢任何帮助或改进建议!

【问题讨论】:

    标签: python callback bar-chart plotly-dash dashboard


    【解决方案1】:

    您没有使用回调的输入,或者您创建的更新的dff。试试这个:

    def display_BM_composition(selected_BM):
        dff = df.BM_NAME.eq(selected_BM)
    
        barchart = px.bar(
            data_frame=dff,
            x=filtered_BM,
            y="WEIGHT",
            color="INDEX_NAME",
            opacity=0.9,
            barmode='group')
    
        return barchart
    

    【讨论】:

    • 非常感谢您的回答coralvanda!我已经用你的建议替换了回调部分。运行仪表板时,我收到以下错误消息:NameError: name 'filtered_BM' is not defined。这是变量 x,应该表示索引(A 或 X)。我尝试将 x 定义为 'x = df.BM_NAME',但这样做时会弹出以下错误消息:ValueError: Value of 'y' is not the name of a column in 'data_frame'。应为 ['BM_NAME'] 之一,但收到:WEIGHT。我无法告诉 Python 代码应该将哪个变量识别为 x。有什么建议吗?
    【解决方案2】:

    编辑经过一番尝试,我找到了以下解决方案,非常适合我:

    @app.callback(
        Output(component_id="bar-chart", component_property="figure"),
        [Input(component_id="BM-dropdown", component_property="value")],
    )
    def display_BM_composition(selected_BM):
        filtered_BM = df[df.BM_NAME == selected_BM]  # Only use unique values in column "BM_NAME" selected in dropdown
    
        barchart = px.bar(
            data_frame=filtered_BM,
            x="BM_NAME",
            y="WEIGHT",
            color="INDEX_NAME",
            opacity=0.9,
            barmode='group')
    
        return barchart
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2019-01-12
      • 2021-01-25
      • 2021-10-28
      相关资源
      最近更新 更多