如何在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
相关产品推荐
相关产品推荐

