如何通过Dash / Plotly的群集条形图中的回调来保持选定数据的持久性

时间:2019-03-27 19:45:41

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

我正在使用Dash绘制一些数据。我目前有一个包含两个数据集的群集条形图(群集中的每个条形图一个。)这些数据集的名称和相应颜色的条形显示在图的左上角。可以单击它们以将其打开和关闭,这将从图表中删除它们相应的条形。

另外,我有一个可以在图表中显示的项目清单。我正在使用回调来更新图形,以便它仅显示用户已检查的内容。这将按预期更新图形,但是,也会重置条形图/数据集,以使两者都启用。就是如果您仅选择一个栏,则选择一些新的清单列表项,它将显示新的清单列表项和两个栏。

我的想法是,做到这一点的逻辑方法是将一些变量作为第二个输入传递给回调函数,然后在函数内设置输出图形以仅显示正确的条形图。但是,我似乎找不到包含此数据的变量。

据我所知,Plotly图形对象的可访问属性是'id','clickData','clickAnnotationData','hoverData','clear_on_unhover','selectedData','relayoutData','figure', 'style','className','animate','animation_options','config'和'loading_state'。

我已经研究了所有这些,似乎没有一个保存我想要的数据。有谁知道一种简单的方法来访问此数据?

这是我的回调函数现在的工作方式:

@app.callback(
    dash.dependencies.Output('theGraph', 'figure'),
    [dash.dependencies.Input('theChecklist','values'),
    dash.dependencies.Input('theGraph', 'clickData')
    ]
)
def updateGraph(checklistValues, figureInput):

    #print to see what the variables hold
    print(checklistValues)
    print(figureInput)

    figure=go.Figure(
        data = [
            go.Bar(
                x = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName').size().index,
                y = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName').size().values,
                name = 'Bar 1'
            ),
            go.Bar(
                x = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName')['# cores'].sum().reset_index()['MyColumnName'],
                y = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName')['# cores'].sum().reset_index()['MyOtherColumnName'],
                name = 'Bar 2'
            )
        ],
        layout=go.Layout(
            title='The Title',
            showlegend=True,
            legend=go.layout.Legend(
                x=0,
                y=1.0
            ),
            margin=go.layout.Margin(l=40, r=40, t=40, b=110)
        )
    )

    return figure

0 个答案:

没有答案