[英]Switching plots with radio button screws up the format
我正在嘗試做一些相對簡單的事情。 我想創建一個在兩種繪圖格式之間切換的單選按鈕。 單選按鈕在兩個選項之間切換。 讓我們稱它們為“a”和“b”。
When 'a' is selected, I want to plot two figures side by side using bootstrap row/col. 選擇選項“b”時,我想將整個列用於單個圖形。
我相信我在下面正確編碼,但是當我從“a”切換到“b”並返回到“a”時,plot 搞砸了 plot,兩個數字垂直顯示。
import dash
from dash import dcc, html, Input, Output
import dash_bootstrap_components as dbc
import plotly.graph_objs as go
app = dash.Dash(external_stylesheets=[dbc.themes.BOOTSTRAP])
app.layout = html.Div(
children=html.Div(children=[
dcc.RadioItems(id='radio', options=('a', 'b'), value='a', inline=True),
dbc.Row(id='row')
])
)
@app.callback(
Output("row", "children"),
[Input("radio", "value")],
)
def fill_row(radio):
f1 = go.Figure()
f2 = go.Figure()
f3 = go.Figure()
if radio == 'a':
return [
dbc.Col(dcc.Graph(figure=f1)),
dbc.Col(dcc.Graph(figure=f2)),
]
else:
return [
dbc.Col(dcc.Graph(figure=f3)),
]
if __name__ == "__main__":
app.run_server(debug=True, port=8051)
填充dbc.Row
組件的dbc.Col
組件的默認行為是水平 alignment,所以我可以在這里看到混亂。 但是,列組件的默認大小是 12。如果您嘗試將該大小的兩個組件彼此相鄰放置,則會導致溢出,並且列將彼此堆疊在頂部。 因此,一個可能的解決方案是為您的第一個return
語句中的列設置width = 6
。 或其他不超過12
的數字:
@app.callback(
Output("row", "children"),
[Input("radio", "value")],
)
def fill_row(radio):
f1 = go.Figure()
f2 = go.Figure()
f3 = go.Figure()
if radio == "a":
return [
dbc.Col([dcc.Graph(figure=f1)], width=6),
dbc.Col([dcc.Graph(figure=f2)], width=6),
]
else:
return [
dbc.Col(dcc.Graph(figure=f3), width=12),
]
下面是一些測試運行的圖像。 您將在答案末尾找到完整的代碼段
radio = a
radio = b
radio = a
再次import dash
from dash import dcc, html, Input, Output
import dash_bootstrap_components as dbc
import plotly.graph_objs as go
app = dash.Dash(external_stylesheets=[dbc.themes.BOOTSTRAP])
app.layout = html.Div(
children=html.Div(
children=[
dcc.RadioItems(id="radio", options=("a", "b"), value="a", inline=True),
dbc.Row(id="row"),
]
)
)
@app.callback(
Output("row", "children"),
[Input("radio", "value")],
)
def fill_row(radio):
f1 = go.Figure()
f2 = go.Figure()
f3 = go.Figure()
if radio == "a":
return [
dbc.Col([dcc.Graph(figure=f1)], width=),
dbc.Col([dcc.Graph(figure=f2)], width=6),
]
else:
return [
dbc.Col(dcc.Graph(figure=f3), width=12),
]
# if __name__ == "__main__":
app.run_server(debug=True, port=8052)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.