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

如何去除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:55