Python 使用检查表在Plotly中动态添加跟踪

Python 使用检查表在Plotly中动态添加跟踪,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我有一个数据集,不同的列具有不同的年龄范围。我试图在Plotly中为每个年龄段创建动态轨迹,以创建一个比较条形图。此外,我希望将这些跟踪连接到一个检查表,这样我就可以选择在结果图中显示哪些跟踪/条。然而,我很难弄清楚如何将这个清单连接到图形中的结果跟踪,特别是因为我还有其他下拉列表连接到这个图形。下面是一个代码示例 Gender=xl['Gender'].unique() Age=xl['Age'].unique() Activity=xl['Sport'].unique

我有一个数据集,不同的列具有不同的年龄范围。我试图在Plotly中为每个年龄段创建动态轨迹,以创建一个比较条形图。此外,我希望将这些跟踪连接到一个检查表,这样我就可以选择在结果图中显示哪些跟踪/条。然而,我很难弄清楚如何将这个清单连接到图形中的结果跟踪,特别是因为我还有其他下拉列表连接到这个图形。下面是一个代码示例

    Gender=xl['Gender'].unique()
    Age=xl['Age'].unique()
    Activity=xl['Sport'].unique()

app=dash.Dash(__name__)

app.layout=html.Div(children=
[html.Div([
    html.H3('Age:', style={'paddingRight': '30px','fontSize':18}),

    dcc.Checklist(
        id='Age',
        options=[
            {'label': i, 'value': i} for i in Age],
    value='18-24' 
)], style={'width':'33%','display':'inline-block'}),

html.Div([
    html.H3('Gender:', style={'paddingRight': '30px','fontSize':18}),
    dcc.Dropdown(
        id='Gender', 
        options=[
            {'label': 'Male', 'value': 'Male'},
            {'label': 'Female', 'value': 'Female'}
        ],
        value='Male'
    )], style={'width':'33%','display':'inline-block'}),

html.H3('Activity:', style={'paddingRight': '30px','fontSize':18}), 

dcc.Dropdown(
id='Sport',
options=[
{'label': i, 'value': i} for i in Activity],
value='Yoga'
),
],style={'width':'33%','display':'inline-block'}),

html.Div([
    dcc.Graph(id='linear')]),

html.Div([
    dcc.Graph(id='linear2')
])])

@app.callback(
 dash.dependencies.Output('linear','figure'),
[dash.dependencies.Input('Gender','value'),
 dash.dependencies.Input('Sport','value'),
 dash.dependencies.Input('Age','value')])

def update_graph(Gender_name,sport_name,age_name):
      xl1=xl[xl['Gender'] == Gender_name]
      xl2=xl1[xl1['Sport'] == sport_name]
      xl3=xl2[xl2['Age'] == age_name]

      Total_x=xl3.Date

      trace1=go.Bar(x=Total_x,y=age_name?,name='6-12')
      trace2=go.Bar(x=Total_x,y=age_name?,name='12-18')
      trace3=go.Bar(x=Total_x,y=age_name,name='18-24')

      Totallayout=go.Layout(xaxis={'title': 'Year'},
                              yaxis={'title': 'Participants'},
                              title= 'Core Player Comparison',
                              hovermode='closest')


      return {'data':[trace2,trace1,trace3],
             'layout':[Totallayout]}
我希望有人能帮助我使用def update graph函数,这样它就可以链接到我创建的年龄下拉列表,同时创建不同的跟踪。如果有人能帮忙,我们将不胜感激,谢谢

示例数据帧:

日期体育性别年龄球员核心
2008瑜伽男6-12 2308.54 692.562
2008瑜伽男13-17 3551.60 1065.480
2008瑜伽男18-242663.70799.110
2008瑜伽男25-34 3551.60 1065.480
2008瑜伽男35-44 2130.96 639.288


这个想法是创建一个图形,其中“玩家”或“核心”是Y轴,日期是x轴,年龄是轨迹

感谢您使用示例
df
进行更新。我不确定你的目标到底是什么,但我有数据流过并绘制了
df
。以下是一个功能示例:

dict\u form={
“日期”:[2008,2008,2008,2008,2008],
‘运动’:[‘瑜伽’、‘瑜伽’、‘瑜伽’、‘瑜伽’、‘瑜伽’],
‘性别’:[‘男性’、‘男性’、‘男性’、‘男性’、‘男性’],
‘年龄’:[‘6-12’、‘13-17’、‘18-24’、‘25-34’、‘35-44’],
“玩家”:[2308.543551.602663.703551.602130.96],
"核心:[692.562,1065.480,799.110,1065.480,639.288],,
}
df=pandas.DataFrame.from_dict(dict_form)
app=dash.dash(_名称__)
app.layout=html.Div(子项)=[
html.Div(儿童)=[
H3('Age:',style={'paddingRight':'30px','fontSize':18}),
dcc.检查表(
id='Age',
选择权=[
{'label':i,'value':i}表示df['Age']]中的i,
值=['18-24']
)
]),
html.Div(儿童)=[
H3('Gender:',style={'paddingRight':'30px','fontSize':18}),
dcc.下拉列表(
id='Gender',
选择权=[
{'label':'Male','value':'Male'},
{'label':'Female','value':'Female'}
],
value='Male'
)
],style={'width':'33%,'display':'inline block'}),
H3('Activity:',style={'paddingRight':'30px','fontSize':18}),
dcc.下拉列表(
id='Sport',
选择权=[
{'label':i,'value':i}表示df['Sport']]中的i,
瑜伽的价值
),
html.Div([
dcc.Graph(id='linear')],
html.Div([
dcc.Graph(id='linear2')
])
],样式={'width':'33%,'display':'inline block'})
@app.callback(
dash.dependencies.Output('linear','figure'),
[dash.dependencies.Input('Gender','value'),
dash.dependencies.Input('Sport','value'),
dash.dependencies.Input('Age','values')]))
def更新图表(性别、运动、年龄):
df1=df[df['Gender']==Gender\u name]
df2=df1[df1['Sport']==Sport\u name]
df3=df2[df2['Age'].isin(Age_name)]
总x=df3.年龄
trace1=go.Bar(x=total_x,y=df3['Players',name='Players')
trace2=go.Bar(x=total_x,y=df3['Core'],name='Core')
total_layout=go.layout(xaxis={'title':'Year'},
yaxis={'title':'Participants'},
title='Core Player Comparison',
hovermode='closest')
返回{'data':[trace2,trace1],
“布局”:[总布局]}
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run_服务器(debug=True,threaded=True)
下面是图表的屏幕盖:


如果没有示例
df
可供使用,这有点棘手。你能提供一个吗?谢谢回复!我在原始问题中添加了一个示例数据框。谢谢!这太完美了。.isin部分完全出乎我的意料,但数据现在显示在我的仪表板上。谢谢你所做的一切!