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

如何调整matplotlib各子图的y轴标签间距以保持均匀一致

解决方案

你只需要在创建子图时按照每个子图的y轴标签数量设置高度比例,再配合y轴对齐方法就能同时实现标签间距均匀、图表水平对齐的效果,完整可运行代码如下:

import matplotlib.pyplot as plt
import numpy as np

xa = np.arange(1, 15)
xb = np.arange(1, 30)
xc = np.arange(1, 5)
ya = [f'label{ea}' for ea in xa]
yb = [f'label_blablabla{ea}' for ea in xb]
yc = [f'label_abcx{ea}' for ea in xc]

# 按各子图标签数量设置高度比例,和你单张画布时的高度逻辑保持一致
height_ratios = [len(xa), len(xb), len(xc)]
# 通过gridspec_kw传入高度比例,constrained_layout避免元素重叠
fig, axs = plt.subplots(3, 1, figsize=(5, sum(height_ratios)*0.3), 
                        gridspec_kw={'height_ratios': height_ratios},
                        constrained_layout=True)

axs[0].barh(ya, xa)
axs[1].barh(yb, xb)
axs[2].barh(yc, xc)

# 强制对齐所有子图的y轴位置,解决标签长度不一导致的水平错位问题
fig.align_ylabels(axs)

plt.show()

实现逻辑

  1. 你之前单张画布的高度规则是标签数量*0.3,子图模式下将高度比例设置为各子图标签数量的比值,就能保证每个子图内单个y轴标签占用的高度和单张画布时完全一致,自然保持均匀间距
  2. fig.align_ylabels()方法会忽略y轴标签本身的长度,强制将所有子图的y轴左边缘对齐,所有条形图的起始位置就会保持水平对齐
  3. constrained_layout参数会自动调整子图、标签的间距,避免内容被截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:54:04