在Plotly Dash中访问跟踪状态

时间:2019-01-29 21:59:27

标签: python plotly plotly-dash

我正在使用Plotly Dash构建具有3个跟踪值的堆叠条形图。

我正在尝试访问跟踪值的状态,以便可以过滤数据框并将结果DF传递回绘图,而不是在取消选择时简单地隐藏跟踪。

例如,我有一个数据框:

Item    Status    Value
1        First    2000
1        Second   3490
1        Third    542    
2        First    641    
2        Second    564        
3        First      10

我的踪迹是与线性过程有关的3个值(第一,第二,第三),其中每个值都是标记项目进展的状态。

我的目的是能够从进度中进一步选择状态,以便仅绘制前进到特定步骤的那些项。

当我在跟踪图例中选择更高级的状态时,我绘制的x值应该下降,因为到目前为止,即使它们都共享大多数状态,进展也较少。

我能想到的唯一解决方案是为每个跟踪值创建复选框,并在回调中使用这些输入,但这似乎对内置的选择/取消选择跟踪功能是多余的。

1 个答案:

答案 0 :(得分:0)

您正在寻找类似的东西吗?

代码:

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

app = dash.Dash(__name__)

df = pd.DataFrame({'Item': [1, 1, 1, 2, 2, 3],
                   'Status': ["First", "Second", "Third",
                              "First", "Second", "First"],
                   'Value': [2000, 3490, 542, 641, 564, 10]})

colors = {
    'background': '#111111',
    'background2': '#FF0',
    'text': '#7FDBFF'
}
df1 = df.loc[df["Status"] == "First"]
df2 = df.loc[df["Status"] == "Second"]
df3 = df.loc[df["Status"] == "Third"]
trace1 = go.Bar(
                x=df1["Item"],
                y=df1["Value"],
                name='First',
)
trace2 = go.Bar(
                x=df2["Item"],
                y=df2["Value"],
                name='Second',
)
trace3 = go.Bar(
                x=df3["Item"],
                y=df3["Value"],
                name='Third',
)

app.layout = html.Div(children=[
        html.Div([
            html.H5('Your Plot'),
            dcc.Graph(
                id='cx1',
                figure=go.Figure(data=[trace1, trace2, trace3],
                                 layout=go.Layout(barmode='stack')))],)])


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

输出: Bar stacked