Динамическое добавление следов на графике с помощью контрольного списка

Проблема нетривиальна, если речь идет о объектах хоста или более сложном объекте, чем сумка значений

  • , вы вызываете геттер для получения значения или используете ли вы скопировать поверх дескриптора свойства?
  • что, если цель слияния имеет сеттер (либо собственное свойство, либо его цепочку прототипов)? Вы считаете значение уже существующим или вызываете установщик для обновления текущего значения?
  • вы вызываете функции собственной собственности или копируете их? Что, если они связаны функциями или функциями стрелок в зависимости от чего-то в своей цепочке видимости в момент их определения?
  • что, если это что-то вроде узла DOM? Вы, конечно, не хотите относиться к нему как к простому объекту и просто глубоко объединить все его свойства в
  • , как обращаться с «простыми» структурами, такими как массивы или карты или множества? Рассматривать их уже есть или слить их?
  • как бороться с неперечислимыми собственными свойствами?
  • как насчет новых поддеревьев?

Еще одна вещь, которую следует иметь в виду: графы объектов, которые содержат циклы. Обычно это не сложно - просто сохраните Set уже посещенных исходных объектов, но часто забывайте.

Вероятно, вы должны написать функцию глубокого слияния, которая ожидает только примитивные значения и простые объекты - в большинстве тех типов, которые алгоритм структурированного клона может обрабатывать - в качестве источников слияния. Бросьте, если он сталкивается с чем-либо, с которым он не может справиться или просто назначить по ссылке вместо глубокого слияния.

Другими словами, алгоритм одноразового использования не требуется, вам либо нужно катиться самостоятельно, либо смотреть для библиотечного метода, который распространяется на ваши прецеденты.

2
задан Sam 9 April 2019 в 15:00
поделиться

1 ответ

Спасибо за обновление с образцом df. Я не совсем уверен, какова ваша цель, но у меня есть данные, проходящие через и отображающие df. Вот функциональный пример:

dict_form = {
    'Date': [2008, 2008, 2008, 2008, 2008],
    'Sport': ['Yoga', 'Yoga', 'Yoga', 'Yoga', 'Yoga'],
    'Gender': ['Male', 'Male', 'Male', 'Male', 'Male'],
    'Age': ['6-12', '13-17', '18-24', '25-34', '35-44'],
    'Players': [2308.54, 3551.60, 2663.70, 3551.60, 2130.96],
    'Core': [692.562, 1065.480, 799.110, 1065.480, 639.288],
}

df = pandas.DataFrame.from_dict(dict_form)

app = dash.Dash(__name__)

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

        dcc.Checklist(
            id='Age',
            options=[
                {'label': i, 'value': i} for i in df['Age']],
            values=['18-24']
            )
    ]),

    html.Div(children=[
        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 df['Sport']],
        value='Yoga'
    ),

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

    html.Div([
        dcc.Graph(id='linear2')
    ])
], style={'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 update_graph(gender_name, sport_name, age_name):
    df1 = df[df['Gender'] == gender_name]
    df2 = df1[df1['Sport'] == sport_name]
    df3 = df2[df2['Age'].isin(age_name)]

    total_x = df3.Age

    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')

    return {'data': [trace2, trace1],
            'layout': [total_layout]}


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

А вот скриншот карты:

Chart

0
ответ дан coralvanda 9 April 2019 в 15:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: