如何在Dash堆叠子图中仅增大首个subplot高度且不改变其他子图?
解决方案:单独控制堆叠子图的高度
嗨,这个需求很好解决!Plotly其实提供了针对单个子图设置高度的方法,不用只依赖全局的height参数。我给你两种常用的实现方式:
方法一:创建子图时直接指定每个子图的高度
在使用make_subplots创建堆叠子图时,通过specs参数可以直接为每个子图设置具体高度,整体画布高度会自动累加所有子图的高度。比如你想要总高度700,第一个子图占400,剩下两个各150:
from plotly.subplots import make_subplots import plotly.graph_objects as go # 创建堆叠子图,通过specs指定每个子图的高度 fig = make_subplots( rows=3, cols=1, specs=[ [{"height": 400}], # 首个子图高度设为400 [{"height": 150}], # 第二个子图保持原有高度 [{"height": 150}] # 第三个子图保持原有高度 ], subplot_titles=("首个高个子图", "普通子图1", "普通子图2") ) # 添加示例数据(替换成你的实际数据) fig.add_trace(go.Scatter(x=[1,2,3], y=[4,5,6]), row=1, col=1) fig.add_trace(go.Bar(x=[1,2,3], y=[2,3,1]), row=2, col=1) fig.add_trace(go.Pie(values=[10,20,30]), row=3, col=1) # 设置整体宽度和标题 fig.update_layout(width=1300, title_text="TITLE") fig.show()
这种方式最直观,你可以精准控制每个子图的像素高度,完全满足“仅增大首个subplot的height,其余保持原有高度”的需求。
方法二:通过修改y轴的domain属性调整高度占比
如果你更倾向于用比例来控制高度(比如首个子图占总高度的40%,剩下两个各占30%),可以修改每个子图y轴的domain参数:
from plotly.subplots import make_subplots import plotly.graph_objects as go # 创建堆叠子图 fig = make_subplots(rows=3, cols=1, subplot_titles=("首个高个子图", "普通子图1", "普通子图2")) # 添加示例数据 fig.add_trace(go.Scatter(x=[1,2,3], y=[4,5,6]), row=1, col=1) fig.add_trace(go.Bar(x=[1,2,3], y=[2,3,1]), row=2, col=1) fig.add_trace(go.Pie(values=[10,20,30]), row=3, col=1) # 定义高度占比 first_ratio = 0.4 other_ratio = (1 - first_ratio) / 2 # 从下到上设置每个子图的y轴domain(Plotly的y轴domain是从底部0到顶部1) fig.update_yaxes(domain=[0, other_ratio], row=3, col=1) fig.update_yaxes(domain=[other_ratio, other_ratio*2], row=2, col=1) fig.update_yaxes(domain=[other_ratio*2, 1], row=1, col=1) # 设置整体宽高和标题 fig.update_layout(width=1300, height=700, title_text="TITLE") fig.show()
这种方式适合需要自适应整体高度的场景,调整比例就能快速改变子图的相对高度。
内容的提问来源于stack exchange,提问作者loophole_sameer
相关产品推荐
相关产品推荐

