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

matplotlib多子图各带colorbar时y轴标签对齐问题求解

问题原因

为每个子图单独添加colorbar时,matplotlib会自动压缩对应子图的宽度以放置colorbar,加上不同子图的y轴刻度标签长度不一致,会导致各个子图的左边缘坐标不统一。原生fig.align_labels()是基于子图边缘计算标签对齐位置的,因此会出现标签重叠错位的问题。

解决方案

最简便的实现方式是统一手动指定所有y轴标签的水平偏移位置,无需依赖fig.align_labels(),修改后的可运行代码如下:

import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as np

x = np.array(np.arange(5))
y = [np.random.uniform(0.5,2,5)*np.random.random(5)+100,   # 长刻度标签
    np.random.uniform(0.5,2,5)*np.random.random(5)+100,    # 长刻度标签
    np.random.uniform(0.5,2,5)*np.random.random(5),        # 短刻度标签
    np.random.uniform(0.5,2,5)*np.random.random(5)]        # 短刻度标签

fig = plt.figure()

for plotnum,yvals in enumerate(y):
    ax = fig.add_subplot(2,2,plotnum+1)
    sc = ax.scatter(x,yvals,c=yvals)
    fig.colorbar(sc, ax=ax)

    ax.set(ylabel=f'Y Values {plotnum}', xlabel=f'X Values {plotnum}')
    ax.yaxis.set_major_formatter(mtick.StrMethodFormatter('{x:,.1f}')) 
    # 统一设置y轴标签的水平位置,所有子图使用相同的第一个参数即可对齐
    ax.yaxis.set_label_coords(-0.35, 0.5)

plt.tight_layout()
plt.subplots_adjust(wspace=0.8, hspace=0.6)
plt.show()

参数说明

  • set_label_coords的第一个参数是标签相对于子图左边缘的水平坐标,负值代表位于子图外侧,你可以根据自己的刻度标签长度调整这个数值,所有子图保持一致即可实现垂直对齐。
  • 如果需要自适应不同刻度长度的场景,可以先遍历所有子图计算出最大的标签偏移量,再统一赋值给所有子图的y轴标签,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:24:04