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

Matplotlib子图与尺寸设置问题:如何实现两张10x10图表的并排或上下排列?

问题分析与修正方案

你的代码主要有两个关键问题导致布局失效,下面我会逐一说明并给出修复后的完整代码:

核心错误点

  • 重复创建轴对象破坏布局:你先通过fig.add_subplot(1,2,1)创建了第一个子图的轴,但紧接着又调用plt.axes(projection='3d')重新生成了一个新的轴,这会直接覆盖之前的subplot,导致原本的1行2列布局被打乱。
  • 子图尺寸的实现逻辑:figsize是整个画布的尺寸,你想要两个10x10的子图,并排的话画布宽度应为20(10×2)、高度10;如果是上下排列,画布高度应为20、宽度10,这样每个子图就能刚好占据10x10的空间。

修复后的完整代码

import matplotlib.pyplot as plt
import numpy as np

def f(x, y):
    return np.sin(x)*np.sin(y)

x = np.linspace(-np.pi, np.pi, 100)
y = np.linspace(-np.pi, np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

# 并排布局:画布20x10,两个子图各占10x10
fig = plt.figure(figsize=(20, 10))

# 直接在add_subplot时指定3D投影,无需额外调用plt.axes
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
ax1.view_init(20, 25)
ax1.plot_surface(X, Y, Z, cmap='RdGy', edgecolor='none')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('z')

# 创建第二个填充等高线图的子图
ax2 = fig.add_subplot(1, 2, 2)
ax2.contourf(X, Y, Z, 40, cmap='RdGy')
ax2.axis('equal')

plt.tight_layout()  # 自动调整子图间距,避免标签重叠
plt.show()

额外说明

如果想要上下排列两个10x10的子图,只需要修改两处:

  1. 把画布尺寸改成figsize=(10, 20)
  2. 把两个subplot的参数分别改成(2, 1, 1)和(2, 1, 2)

这样就能完美实现你想要的布局效果啦!

内容的提问来源于stack exchange,提问作者Red-Cloud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:17:31