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

移除标签和刻度后,如何回收子图间的水平空白空间?

解决QQ图之间水平空白的方案

方法1:用gridspec精细控制子图布局

因为第一个子图是直方图(需要独立y轴),后续QQ图无需y轴元素,可通过GridSpec分配宽度比例并缩小QQ图间的间距:

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import statsmodels.api as sm
import numpy as np

# 生成示例数据
data = np.random.normal(0, 1, 1000)

fig = plt.figure(figsize=(10, 4))
# 定义1行4列网格,给直方图分配更宽比例
gs = GridSpec(1, 4, width_ratios=[1, 0.8, 0.8, 0.8])

# 绘制直方图
ax_hist = fig.add_subplot(gs[0])
ax_hist.hist(data, bins=20)

# 绘制QQ图并处理y轴
for i in range(1, 4):
    ax = fig.add_subplot(gs[i], sharey=ax_hist)
    sm.qqplot(data, ax=ax, line='s')
    ax.set_ylabel(None)
    ax.tick_params(labelleft=False)
    ax.spines['left'].set_visible(False)  # 隐藏y轴轴线,消除残留空白

# 调整QQ图之间的水平间距
gs.update(wspace=0.1)  # 数值越小间距越窄,按需调整
plt.show()

方法2:调整subplots的wspace参数

如果是用plt.subplots创建的子图,直接修改水平间距参数,同时隐藏y轴轴线:

import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np

data = np.random.normal(0, 1, 1000)
n_qq = 3  # QQ图数量
fig, axqq = plt.subplots(1, 1 + n_qq, figsize=(10, 4))

# 绘制直方图
axqq[0].hist(data, bins=20)

# 处理QQ图的y轴元素
for ax in axqq[1:]:
    sm.qqplot(data, ax=ax, line='s')
    ax.set_ylabel(None)
    ax.tick_params(labelleft=False)
    ax.spines['left'].set_visible(False)  # 移除y轴轴线,减少留白
    ax.sharey(axqq[0])

# 缩小所有子图的水平间距
plt.subplots_adjust(wspace=0.05)
plt.tight_layout()
plt.show()

关键提示

  • 仅移除y轴标签和刻度还不够,隐藏y轴的**轴线(spine)**才是消除残留空白的核心
  • wspace参数控制子图水平间距,数值越小间距越窄,可根据图表尺寸灵活调整
  • 用GridSpec的width_ratios能给直方图分配更合理的宽度,避免QQ图过度压缩

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:42:40