使用多个过滤器作为输入的Python Plotly-Dash应用

时间:2018-06-21 15:07:41

标签: python plotly-dash

我刚刚开始学习Python,目前正在探索Dash。我对创建一个具有多选选项作为输入并创建一个条形图作为输出的仪表板感兴趣。我在回调中难以识别输入并相应地对数据求和。我已经看到了使用Dash创建的具有输入内容的仪表板的示例,但是我要解决的问题是如何能够对所选输入的组合求和,而不是集合的组合。

作为示例,使用该表: doesn't play nicely with knitr

import dash
import dash_core_components as dcc
import dash_html_components as html

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

from plotly import __version__
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.plotly as py
import plotly.graph_objs as go
import plotly.figure_factory as FF
import numpy as np

df = pd.read_excel('test_file.xlsx', 'Sheet1')


type_options = df['TYPE'].unique()
ind_options = df['IND'].unique()

app = dash.Dash()

app.layout = html.Div(children=[
    html.H1(children='Dashboard', style={
        'textAlign': 'center',
    }),
    html.P('Type'),
    dcc.Dropdown(
        id='typePicker',
        options=[{'label': i, 'value': i} for i in type_options],
        value='A',
        multi=True
    ),

    html.P('Ind'),
    dcc.Dropdown(
        id='indPicker',
        options=[{'label': i, 'value': i} for i in ind_options],
        value='1',
        multi=True
    ),

    dcc.Graph(
        id='sales-graph'
    )
])


@app.callback(
    dash.dependencies.Output('sales-graph', 'figure'),
    [dash.dependencies.Input('typePicker', 'value'),
     dash.dependencies.Input('indPicker', 'value')])
def update_graph(typePicker, indPicker):


    return {
        'data': [
            go.Bar(
                x=['April Sales'],                
                #y=df.groupby(df['TYPE'] == typePicker).sum('April_sales')
                y=df[df['TYPE'] == typePicker]['April_sales']
            ) 
        ],
        'layout': go.Layout(
            yaxis={'title': 'sales'},
            barmode='stack',
            hovermode='closest'
        )
    }

if __name__ == '__main__':
    app.run_server()

我从4月销售的一个柱线开始-我也想为5月销售添加另一个柱线,但是我想在添加多条迹线之前使一些东西起作用。现在,运行此代码将为“ A”的第一个实例显示4月份销售的条形,因为它是默认设置。

我希望能够选择类型和ind的任意组合,包括每个选项的多个选项(例如,为类型选择“ A”和“ C”,为ind选择“ 1”将显示条形图,汇总4月份的销售额这些选项)。当我尝试使用数据透视表时,我只能获得每个表的不同组合。我还使用了groupby或asin进行了探索,但无法根据需要对输入进行求和。

在Dash中,如何在回调中使用多个输入来根据多个选择来更新图形?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题,但我认为您正在寻找:

   go.Bar(
            x=['April Sales'],                
            y=df[(df['TYPE'] == typePicker) & 
                 (df['IND'] == indPicker)]['April_sales']
        )