Plotly Dash仪表板:调整图表宽度并实现双图同行布局
解决方案:让两个图表同行显示并调整宽度/高度
看起来问题出在你没有明确指定categoryPerformance和categoryPerformanceTrend所在的dbc.Col宽度分配,同时需要给目标图表设置固定高度并让宽度自适应容器。下面是具体的修改步骤和解释:
1. 给Bootstrap列指定宽度(确保同行显示)
Bootstrap采用12列网格系统,你可以通过给dbc.Col设置width参数来分配两个图表的宽度占比。比如让第一个图表占4列,第二个占8列(直接满足你让第二个图表更宽的需求):
dbc.Row([ # 第一个图表:占4列,宽度自适应容器 dbc.Col([ dcc.Graph( id='categoryPerformance', figure=dict( data=ge.returnCategoryOverviewBarGraph(df)[0], # 强制图表宽度填满所在列容器 layout=ge.returnCategoryOverviewBarGraph(df)[1].update(width='100%') ) ) ], width=4), # 第二个图表:占8列,固定高度+宽度自适应 dbc.Col([ dcc.Graph( id='categoryPerformanceTrend', style={'height': '400px'}, # 固定高度,数值可根据你的需求调整 # 后续通过回调生成图表时,记得保持布局设置一致 # figure=go.Figure(...).update_layout(height=400, width='100%') ) ], width=8) ]),
2. 确保图表自适应容器宽度
- 对于
categoryPerformance,调用update(width='100%')可以让图表自动填满所在的dbc.Col空间,避免出现溢出或留白。 - 如果后续通过回调给
categoryPerformanceTrend生成图表,记得在figure的layout中同步设置固定高度和自适应宽度,示例如下:
@app.callback(Output('categoryPerformanceTrend', 'figure'), [...]) def update_trend_graph(...): fig = go.Figure(...) fig.update_layout( height=400, # 和style里的高度保持一致,也可以只在这里设置 width='100%', # 其他布局配置... ) return fig
为什么之前的代码无法实现同行?
你下面的idvlCategoryPerformanceBest和idvlCategoryPerformanceLeast能正常同行,是因为当dbc.Col未指定宽度时,Bootstrap默认会让它们平分12列(各占6列)。但上面的两个图表因为第一个图表的figure可能继承了固定宽度,导致空间挤压,无法自动适配平分规则。明确指定width参数后,Bootstrap会强制按照你设置的比例分配列宽,确保它们稳定在同一行显示。
内容的提问来源于stack exchange,提问作者Ragesh Kr
相关产品推荐
相关产品推荐

