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

如何绘制带公共坐标轴标签与x轴下方公共图例的Matplotlib子图?

解决Matplotlib 2×2子图公共标签与图例问题

针对你遇到的公共y轴标签重叠、子图与标签间距过大、图例超出页面的问题,以下是修正后的实现方案,同时设置了适合打印和保存的图尺寸:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
z = np.sin((1.03 * x) ** 2)

# 创建2×2子图,设置适合打印的尺寸(8×6英寸,可按需调整)
fig, axs = plt.subplots(2, 2, figsize=(8, 6))

# 绘制子图内容
axs[0, 0].plot(x, y)
axs[0, 0].plot(x, z, '--')
axs[0, 1].plot(x, y)
axs[0, 1].plot(x, z, '--')
axs[1, 0].plot(x, -y)
axs[1, 0].plot(x, -z, '--')
axs[1, 1].plot(x, -y)
axs[1, 1].plot(x, -z, '--')

# 设置公共x、y轴标签,通过labelpad控制间距避免过大空隙
fig.supxlabel("The X label", labelpad=15)
fig.supylabel("The Y label", labelpad=20, x=0.06)  # x参数调整y标签位置,避免与左侧刻度重叠

# 调整子图布局,为底部图例预留空间
fig.subplots_adjust(bottom=0.12)

# 添加公共图例,调整位置确保完整显示
labels = ["A", "B"]
fig.legend(labels, loc='lower center', ncol=len(labels), bbox_to_anchor=(0.5, 0.02))

# 自动调整子图布局,确保元素不重叠
fig.tight_layout(rect=[0, 0.05, 1, 0.98])

plt.show()

关键修正点说明:

  • 图尺寸设置:通过figsize=(8,6)定义适合打印的画布大小,可根据实际需求调整(如横向打印用(10,6))。
  • 公共标签优化:使用fig.supxlabel/supylabel替代隐藏子图方案,通过labelpad控制标签与子图的间距;调整supylabel的x参数,避免与左侧子图的长刻度标签重叠。
  • 图例显示修复:通过subplots_adjust(bottom=0.12)预留底部空间,同时调整bbox_to_anchor=(0.5, 0.02)将图例固定在页面内,配合tight_layout的rect参数进一步优化布局。
  • 布局自动调整:tight_layout(rect=[0,0.05,1,0.98])限定布局范围,确保所有元素(子图、标签、图例)都在画布内合理排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:53:13