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

Python如何用matplotlib绘制均匀分布的2×2三维散点子图

2×2均匀分布3D散点子图实现方案

问题根因

你当前代码中子图重叠拥挤的核心是add_subplot的网格参数混用了两套划分规则:211代表将画布划分为2行1列取第1个位置,221代表将画布划分为2行2列取第1个位置,两种划分规则叠加就会导致子图位置重叠错乱。

正确实现代码

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# 1. 创建画布,可提前设置画布尺寸避免默认尺寸太小导致拥挤
fig = plt.figure(figsize=(12, 10))

# 2. 统一使用2行2列的网格规则创建4个3D子图
# 2行2列第1个位置(左上)
ax_tl = fig.add_subplot(2, 2, 1, projection='3d')
# 2行2列第2个位置(右上)
ax_br = fig.add_subplot(2, 2, 2, projection='3d')
# 2行2列第3个位置(左下)
ax_Y0 = fig.add_subplot(2, 2, 3, projection='3d')
# 2行2列第4个位置(右下)
ax_Y1 = fig.add_subplot(2, 2, 4, projection='3d')

# 示例:给每个子图绘制3D散点
x, y, z = np.random.randn(3, 100)
for ax in [ax_tl, ax_br, ax_Y0, ax_Y1]:
    ax.scatter(x, y, z)
    # 可自行设置坐标轴标签
    ax.set_xlabel('X轴')
    ax.set_ylabel('Y轴')
    ax.set_zlabel('Z轴')

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

plt.show()

关键优化点

  • 统一使用(行数, 列数, 序号)的传参方式,避免使用三位数缩写的歧义,所有子图都基于2行2列的同一套网格划分
  • 提前通过figsize设置合适的画布尺寸,避免默认画布太小导致元素拥挤
  • 调用plt.tight_layout()自动计算子图间距,适配坐标轴标签、标题的显示空间

如果需要手动调整更精细的间距,也可以用plt.subplots_adjust()来自定义上下左右边距和子图间的横纵间距,示例:

plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.3, hspace=0.3)

其中wspace是子图横向间距,hspace是子图纵向间距。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:42:03