我有一个使用 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)
非常感谢。