0

我有一个使用 Plotly 的 Python 库创建的Sankey 图,该库还具有“更新菜单”来调整图形的高度和宽度。现在我将它与 Dash 一起使用,以使用回调并根据一些单选按钮值更新 Sankey 配色方案。我面临两个不同的问题:

一,当我使用回调更新 Sankey 时,它是使用默认高度/宽度创建的,有没有办法将图形的当前大小作为Dash 回调的输入?因此,当使用 Plotly 的“更新菜单”更改图形大小时,如果我使用单选按钮回调,则通过单选按钮回调更新的新 Sankey 使用更新的高度和宽度,并且不会回到默认的宽度和高度。

二,我使用 Sankey 图下方的单选按钮(作为单独的 dcc.graph 对象),用于更新 Sankey 图的颜色方案(也使用 Dash 回调)。当我使用 Plotly 的更新菜单增加宽度时,我还想根据桑基图中节点的新位置来更改单选按钮的位置。

当 Sankey 的宽度发生变化时,是否可以拥有Dash 应用程序的动态布局,它会更新单选按钮的位置。我为“updatemenus”中的三个不同宽度选项考虑了 3 种不同的布局(单选按钮的自定义位置),并使用图形宽度作为回调中的输入,以便在更改 sankey 的宽度时也更新布局。

我需要以某种方式将 Sankey 图形的当前高度/宽度作为破折号回调中的输入,以便单选按钮回调不会将更新的宽度更改为默认宽度/高度,并且我可以将回调与更新的宽度/高度一起使用。

而且我需要一个动态布局,布局作为当前宽度的函数,这样当 Sankey 的宽度用 updatemenus 更新时我也可以缩放单选按钮,即不同宽度的 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)

非常感谢。

具有静态布局的 Sankey 图像(自定义单选按钮的位置以匹配 Sankey 中的节点) 用于更新 Sankey 配色方案的单选按钮 当使用 Plotly 的更新菜单更新宽度时,我还需要缩放单选按钮

4

0 回答 0