如何去除Matplotlib 3D绘图中的空白区域?
搞定Matplotlib 3D图表的固定视角问题
我之前也为这个问题折腾过好几天!看你已经能生成3D图表并且手动旋转到合适位置了,应该是想把这个调整好的视角固定下来,或者保存图片的时候保留这个角度对吧?这就给你分享解决方案:
首先先把你给出的代码补全整理好(假设xs是0到10的等间距数组,再补个示例绘图逻辑):
import matplotlib.pyplot as plt import numpy as np import matplotlib.colors as mcolors fig = plt.figure(figsize=(13,6), facecolor="white") ax1 = plt.subplot2grid((3,3), (0,0), colspan=2, rowspan=2, projection="3d") # 根据光谱类型返回对应颜色的函数 def cc(SpectrumType): if SpectrumType == "Normal": return "tab:gray" if SpectrumType == "Anomaly": return mcolors.to_rgba("r", alpha=1) # X轴:从0到10等间距生成数据 xs = np.arange(0, 11, 1) # 这里补个示例的y、z数据,你可以替换成自己的真实数据 ys = np.random.uniform(0, 5, size=len(xs)) zs = np.random.uniform(0, 10, size=len(xs)) # 绘制3D散点图示例 ax1.scatter(xs, ys, zs, color=[cc("Normal")]*len(xs))
接下来分两种场景解决你的需求:
1. 固定视角,每次运行代码直接生成指定角度
当你手动把图表旋转到满意的视角后,可以通过3D轴对象的azim(方位角)和elev(仰角)参数获取当前视角,然后在代码里固定:
- 先在交互式环境中打印这两个参数:
print("当前方位角:", ax1.azim) print("当前仰角:", ax1.elev) - 然后在代码里添加一行,设置固定视角(比如假设你得到的参数是方位角-60,仰角30):
ax1.view_init(elev=30, azim=-60)
这样下次运行代码,图表会直接显示你想要的视角,不用再手动调整。
2. 保存调整好的视角为图片
如果只是想把当前调整好的视角保存成图片,直接调用plt.savefig()就可以了,它会自动保留当前窗口显示的视角:
# dpi设置分辨率,bbox_inches="tight"避免图片边缘被裁剪 plt.savefig("my_3d_plot.png", dpi=300, bbox_inches="tight")
另外如果想在交互式窗口里锁定视角,防止误操作改变角度,可以添加:
# 可选:切换为正交投影,视角更稳定 ax1.set_proj_type('ortho') # 禁用鼠标旋转,锁定当前视角 ax1.disable_mouse_rotation()
这样应该就能完美解决你的问题啦!
内容的提问来源于stack exchange,提问作者fabioloso
相关产品推荐
相关产品推荐

