如何消除Matplotlib 3D高斯曲面图周围的空白区域?
解决Matplotlib 3D高斯曲面图空白过多的问题
问题出在Matplotlib的3D轴布局逻辑和默认边距设置上,tight_layout对3D轴的支持有限,你可以通过以下几个步骤彻底消除空白,让曲面最大化填充图像:
调整3D轴的宽高比
高斯曲面的z轴范围远小于x、y轴,默认的3D轴比例会浪费大量垂直空间。用set_box_aspect自定义轴比例,让曲面更舒展:ax.set_box_aspect([1, 1, 0.5]) # x:y:z 比例,可根据需求调整z轴数值完全移除子图边距
手动把子图的四边边距设为0,让轴占满整个画布:plt.subplots_adjust(left=0, right=1, bottom=0, top=1)保存时强制裁剪空白
在savefig中添加两个参数,确保输出文件没有额外空白:fig.savefig("test.svg", format="svg", transparent=True, bbox_inches='tight', pad_inches=0)可选:优化视角(按需调整)
调整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
相关产品推荐
相关产品推荐

