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

如何消除Matplotlib 3D高斯曲面图周围的空白区域?

解决Matplotlib 3D高斯曲面图空白过多的问题

问题出在Matplotlib的3D轴布局逻辑和默认边距设置上,tight_layout对3D轴的支持有限,你可以通过以下几个步骤彻底消除空白,让曲面最大化填充图像:

  1. 调整3D轴的宽高比
    高斯曲面的z轴范围远小于x、y轴,默认的3D轴比例会浪费大量垂直空间。用set_box_aspect自定义轴比例,让曲面更舒展:

    ax.set_box_aspect([1, 1, 0.5])  # x:y:z 比例,可根据需求调整z轴数值
    
  2. 完全移除子图边距
    手动把子图的四边边距设为0,让轴占满整个画布:

    plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
    
  3. 保存时强制裁剪空白
    在savefig中添加两个参数,确保输出文件没有额外空白:

    fig.savefig("test.svg", format="svg", transparent=True, bbox_inches='tight', pad_inches=0)
    
  4. 可选:优化视角(按需调整)
    调整3D视角让曲面更好地填充画面,比如:

    ax.view_init(elev=25, azim=30)  # elev是仰角,azim是方位角,可自行微调
    

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt

num_pts = 1000
σ = 1.5

x = np.linspace(-5, 5, num_pts)
kernel1d = np.exp(-np.square(x) / (2 * σ * σ))
kernel2d = np.outer(kernel1d, kernel1d)

X, Y = np.meshgrid(x, x)

fig, ax = plt.subplots(figsize=(6,6), subplot_kw={"projection":"3d"})
ax.plot_surface(X, Y, kernel2d, cmap="viridis", linewidth=0, antialiased=True)

# 移除坐标轴、刻度、网格
ax.set(xticks=[], yticks=[], zticks=[])
ax.grid(False)
ax.axis('off')

# 关键修改:调整轴比例+消除边距
ax.set_box_aspect([1, 1, 0.5])
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)

# 可选:调整视角
ax.view_init(elev=25, azim=30)

# 保存时裁剪空白
fig.savefig("test.svg", format="svg", transparent=True, bbox_inches='tight', pad_inches=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:15:10