Подключите Plotly Updatemenus к обратному вызову Dash для динамического макета (размер рисунка в качестве входных данных для обратного вызова Dash)

У меня есть диаграмма Санки , созданная с использованием библиотеки Python Plotly, в которой также есть «Меню обновления» для регулировки высоты и ширины фигуры. Теперь я использую его с Dash, чтобы использовать обратные вызовы и обновлять цветовую схему Sankey на основе некоторого значения радиокнопок . Я столкнулся с двумя отдельными проблемами:

Во-первых, когда я использую обратный вызов для обновления Sankey, он создается с высотой / шириной по умолчанию, есть ли способ принять текущий размер фигуры в качестве входных данных для обратного вызова Dash ? Таким образом, когда размер фигуры изменяется с помощью «updatemenus» Plotly, и если я использую обратный вызов переключателей, новый Sankey, обновленный с помощью обратного вызова переключателей, использует обновленную высоту и ширину и не возвращается к ширине и высоте по умолчанию.

Во-вторых, я использую радиокнопки под диаграммой Санки (как отдельный объект dcc.graph), которые используются для обновления цветовой схемы диаграммы Санки (также с обратными вызовами Dash). Когда я увеличиваю ширину с помощью меню обновления Plotly, я также хочу изменить положение радиокнопок в соответствии с новым положением узлов на диаграмме Санки.

Можно ли иметь динамический макет приложения Dash, который обновляет положение радиокнопок при изменении ширины Sankey. Я придумал 3 разных макета (настраиваемое положение переключателей) для трех разных вариантов ширины в «updatemenus» и использование ширины фигуры в качестве входных данных в обратном вызове, чтобы также обновить макет при изменении ширины sankey.

Мне как-то нужна текущая высота / ширина фигуры Санки в качестве входных данных в обратном вызове тире, чтобы обратный вызов радиокнопок не изменял обновленную ширину на ширину / высоту по умолчанию, и я мог использовать обратный вызов с обновленной шириной / высотой.

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

      app.layout = html.Div(
[
    html.Div([dcc.Graph(id="my-sankey", figure={})]),
    html.Div(
        dcc.RadioItems(
            id="color_radio_button",
            options=color_layers,
            value="EN Category",
            style={
                "display": "flex",
                "justify-content": "space-between",
                "align-items": "center",
                "width": "82%",
                "margin-left": "177px",
            },
        )
    ),
],
style={"justify-content": "center"})

Вот как выглядит обратный вызов:

      @app.callback(
    Output(component_id="my-sankey", component_property="figure"),
    Input(component_id='color_radio_button', component_property="value"))
def create_sankey(value):
    return my_sankey.create_sankey(color_layer_column_label=value)

Большое спасибо.

0 ответов

Другие вопросы по тегам