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
相关产品推荐
相关产品推荐

