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

如何对齐拉近子图布局?消除空轴并实现nxn矩阵及行列和绘图

解决矩阵与行和/列和子图对齐及空轴问题

可以通过两种方式实现需求:一种是用GridSpec精准控制布局,另一种是在原有代码基础上调整子图位置并删除空轴。

方法一:使用GridSpec(推荐,布局更可控)

这种方式直接定义所需的子图布局,避免生成空轴,同时通过比例设置让子图尺寸对齐,缩小间距:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

# 生成数据
data = np.random.randn(5, 5)
row_sum = data.sum(axis=1).reshape(-1, 1)
col_sum = data.sum(axis=0).reshape(1, -1)

# 创建网格布局:2行2列,主图与行和/列和的尺寸比例设为5:1(匹配矩阵维度)
# wspace和hspace控制子图间的水平/垂直间距,设为极小值拉近距离
gs = GridSpec(2, 2, width_ratios=[5, 1], height_ratios=[5, 1], wspace=0.05, hspace=0.05)

fig = plt.figure()
# 添加三个子图
ax_main = fig.add_subplot(gs[0, 0])  # 主矩阵图
ax_row = fig.add_subplot(gs[0, 1])   # 行和图
ax_col = fig.add_subplot(gs[1, 0])   # 列和图

# 绘制图像
im_main = ax_main.imshow(data)
ax_row.imshow(row_sum)
ax_col.imshow(col_sum)

# 隐藏所有刻度,让布局更整洁
ax_main.set_xticks([])
ax_main.set_yticks([])
ax_row.set_xticks([])
ax_row.set_yticks([])
ax_col.set_xticks([])
ax_col.set_yticks([])

# 可选:添加统一的颜色条
fig.colorbar(im_main, ax=[ax_main, ax_row, ax_col], shrink=0.8)

plt.show()

方法二:修改原有代码

如果想基于你已写的代码调整,可按以下步骤操作:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.randn(5, 5)
fig, axes = plt.subplots(2, 2)

# 绘制三个子图
axes[0, 0].imshow(data)
axes[0, 1].imshow(data.sum(axis=1).reshape(-1, 1))
axes[1, 0].imshow(data.sum(axis=0).reshape(1, -1))

# 删除右下角的空轴
axes[1, 1].remove()

# 缩小子图间的水平/垂直间距
plt.subplots_adjust(wspace=0.05, hspace=0.05)

# 调整行和、列和子图的位置,与主图对齐
pos_main = axes[0, 0].get_position()
# 设置行和子图的位置:与主图同高度,宽度缩小
axes[0, 1].set_position([pos_main.x1 + 0.01, pos_main.y0, 0.1*pos_main.width, pos_main.height])
# 设置列和子图的位置:与主图同宽度,高度缩小
axes[1, 0].set_position([pos_main.x0, pos_main.y0 - 0.01, pos_main.width, 0.1*pos_main.height])

# 隐藏所有刻度优化显示
for ax in axes.flat:
    if ax.get_visible():
        ax.set_xticks([])
        ax.set_yticks([])

plt.show()

关键调整点说明

  • 删除空轴:调用axes[1,1].remove()直接移除不需要的子图
  • 缩小间距:通过plt.subplots_adjust()的wspace和hspace参数减小子图间空隙
  • 尺寸对齐:要么用GridSpec的比例参数直接定义,要么手动获取主图位置后调整行和/列和子图的位置与尺寸,确保行和子图高度与主图一致,列和子图宽度与主图一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:53