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

Matplotlib:如何控制图形边框、轴边距及多轴间距?(add_axes无效)

解决Matplotlib add_axes边距与多轴间距问题

你之前的代码问题在于**fig.add_axes()的参数是归一化坐标(范围0-1,相对于整个figure的宽高比例),不是实际英寸数值**,直接用实际尺寸会导致轴超出figure范围,无法实现预期布局。

根据你的需求(figsize=(6,4),两个轴宽2、高1.5,左距0.6、右距1.1、下距1、上距1.5,轴间距0.7),先把实际尺寸转换为归一化比例:

  • figure宽度6,高度4
  • 左归一化值:0.6/6 = 0.1
  • 下归一化值:1/4 = 0.25
  • 轴宽归一化值:2/6 ≈ 0.3333
  • 轴高归一化值:1.5/4 = 0.375
  • 两轴间距归一化值:0.7/6 ≈ 0.1167,第二个轴的left值为0.1 + 0.3333 + 0.1167 = 0.55

修正后的代码:

import matplotlib.pyplot as plt

axs = []
# 设置figure尺寸与红色边框
fig = plt.figure(figsize=(6.0, 4.0), edgecolor='red', linewidth=10, dpi=100)

# 归一化坐标参数:[left, bottom, width, height]
ax1 = fig.add_axes([0.1, 0.25, 2/6, 1.5/4])
axs.append(ax1)
ax2 = fig.add_axes([0.55, 0.25, 2/6, 1.5/4])
axs.append(ax2)

# 给轴加标题方便验证布局
ax1.set_title('Axes 1')
ax2.set_title('Axes 2')

plt.show()

如果想更灵活控制多轴布局,也可以用GridSpec实现:

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

fig = plt.figure(figsize=(6.0, 4.0), edgecolor='red', linewidth=10, dpi=100)
# 定义1行2列的网格,直接设置边距与轴间距
gs = GridSpec(1, 2, left=0.6/6, right=1 - 1.1/6, bottom=1/4, top=1 - 1.5/4, wspace=0.7/2)

ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])

ax1.set_title('Axes 1')
ax2.set_title('Axes 2')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:40:43