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

如何在Plotly主Y轴标题与子图Y轴标题间添加间距?

解决Plotly子图主Y轴标题与子图Y轴标签重叠问题

问题分析

你遇到的是Plotly子图中顶层y_title与下方子图Y轴标签间距无法通过官方参数直接调整的问题,默认y_title位置固定,容易和子图轴标签重叠。

解决方案:用自定义Annotation替代默认Y轴标题

放弃make_subplots中的y_title参数,改用fig.add_annotation()手动添加主Y轴标题,完全控制标题位置,避免重叠。

修改后的完整代码

from plotly.subplots import make_subplots
import plotly.graph_objects as go

# 假设returning和nto是已创建的热力图对象
# returning = go.Figure(data=go.Heatmap(...))
# nto = go.Figure(data=go.Heatmap(...))

fig = make_subplots(
    rows=2, 
    cols=1, 
    row_heights=[0.75, 0.25], 
    vertical_spacing = 0.1,
    x_title="Current Transactions",
    # 移除默认的y_title参数
)

# Returning Section
for trace in returning.data:
    fig.add_trace(trace, row=1, col=1)

# NTO Section
for trace in nto.data:
    fig.add_trace(trace, row=2, col=1)

fig.update_xaxes(
    row=1,
    col=1,
    showticklabels=True,
    side="top"
)

# 添加自定义主Y轴标题(替代默认y_title)
fig.add_annotation(
    text="Previous Transactions",
    xref="paper",  # 基于图表画布定位
    yref="paper",
    x=-0.15,  # 调整x值控制左右位置,负数表示在画布左侧外部
    y=0.5,    # 垂直居中
    showarrow=False,
    font=dict(size=14),  # 和默认标题字体大小匹配
    textangle=-90  # 文字垂直排列
)

# Generate final layout
fig.update_layout(
    title="Financing Mapping",
    height=500, 
    width=600,
    hovermode=False,
    autosize=False,
    margin=dict(l=120)  # 增大左边距,给自定义标题留出空间
)

fig.show()

关键调整说明

  • 移除默认y_title:避免和自定义标题冲突
  • 自定义Annotation:通过xref="paper"和yref="paper"基于整个画布定位,x=-0.15控制标题在左侧外部的距离,textangle=-90实现垂直排列,和原Y轴标题效果一致
  • 调整左边距:通过margin=dict(l=120)确保自定义标题不会被画布边缘截断,同时和子图Y轴标签拉开间距

备选方案:调整子图Y轴标签位置

如果不想替换主标题,也可以单独调整子图的Y轴标签位置,拉开和主标题的距离:

# 调整第一个子图的Y轴标签位置
fig.update_yaxes(row=1, col=1, title_standoff=20)
# 调整第二个子图的Y轴标签位置
fig.update_yaxes(row=2, col=1, title_standoff=20)

这种方法适合主标题位置不需要大幅调整的场景,通过title_standoff参数增加标签和轴的间距,间接避免和主标题重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:12:08