You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly Dash(Python)中为特定子图设置间隔?

实现Plotly子图自定义垂直间隔的方法

要在6行1列的共享X轴子图中,仅在第2、4个子图后添加额外间隔,核心思路是手动控制每个子图的y轴域(domain),绕过vertical_spacing的全局生效限制。具体步骤如下:

1. 计算子图高度与间隔比例

先根据需求定义子图高度、常规小间隔和目标大间隔的数值,确保所有子图高度+间隔总和不超过1(Plotly布局的高度范围是0到1)。例如:

  • 常规小间隔设为0.02,大间隔设为0.06
  • 计算每个子图的高度:subplot_h = (1 - 3*0.02 - 2*0.06)/6 ≈ 0.1367(6个子图+3个小间隔+2个大间隔,总和刚好为1)

2. 创建基础子图并关闭全局间隔

初始化6行1列的共享X轴子图,将vertical_spacing设为0,避免全局间隔干扰:

import plotly.subplots as sp
import plotly.graph_objects as go

fig = sp.make_subplots(rows=6, cols=1, shared_xaxes=True, vertical_spacing=0)

3. 逐个设置子图的y轴domain

从顶部(第1行子图)开始,依次计算每个子图的顶部和底部位置,通过update_yaxes手动指定domain:

subplot_h = (1 - 3*0.02 - 2*0.06)/6
small_spacing = 0.02
large_spacing = 0.06

# 第1行子图(最顶部)
fig.update_yaxes(domain=[1 - subplot_h, 1], row=1, col=1)

# 第2行子图:顶部位置 = 第1行底部 - 小间隔
top_row2 = 1 - subplot_h - small_spacing
fig.update_yaxes(domain=[top_row2 - subplot_h, top_row2], row=2, col=1)

# 第3行子图:顶部位置 = 第2行底部 - 大间隔
top_row3 = top_row2 - subplot_h - large_spacing
fig.update_yaxes(domain=[top_row3 - subplot_h, top_row3], row=3, col=1)

# 第4行子图:顶部位置 = 第3行底部 - 小间隔
top_row4 = top_row3 - subplot_h - small_spacing
fig.update_yaxes(domain=[top_row4 - subplot_h, top_row4], row=4, col=1)

# 第5行子图:顶部位置 = 第4行底部 - 大间隔
top_row5 = top_row4 - subplot_h - large_spacing
fig.update_yaxes(domain=[top_row5 - subplot_h, top_row5], row=5, col=1)

# 第6行子图:顶部位置 = 第5行底部 - 小间隔,底部设为0
top_row6 = top_row5 - subplot_h - small_spacing
fig.update_yaxes(domain=[0, top_row6], row=6, col=1)

4. 添加数据并展示

最后添加折线数据并渲染图表即可:

# 示例数据:每个子图添加一条折线
for row in range(1, 7):
    fig.add_trace(
        go.Scatter(x=[1, 2, 3], y=[row, row+1, row+2]),
        row=row, col=1
    )

fig.show()

这种方法可以精准控制任意子图之间的间隔大小,完全满足仅在第2、4个子图后添加额外间隔的需求。

内容的提问来源于stack exchange,提问作者Anudeep Kona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:53:10