You need to enable JavaScript to run this app. matplotlib绘制3D图时出现归一化刻度边框的原因及解决方法问询
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib绘制3D图时出现归一化刻度边框的原因及解决方法问询

问题成因

你看到的带0-1刻度的异常边框是创建画布时先生成的默认2D坐标轴残留。
调用plt.subplots()时会默认在画布上创建一个普通2D坐标轴对象,后续调用fig.gca(projection='3d')是在同一个画布位置叠加了一个新的3D坐标轴,底层的2D坐标轴没有被隐藏,其自带的边框和默认0-1范围的刻度就会显示在3D图的外围。

解决方法

方案1:创建子图时直接指定3D投影(更推荐,适合同时放置2D、3D子图的场景)

不需要先创建默认2D轴再替换,创建子图时直接给对应子图指定projection='3d'参数即可,示例代码如下:

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

x = np.linspace(0,10)
y = np.linspace(0,10)
z = np.linspace(0,10)

# ------------- 单张3D图写法 ---------------
fig = plt.figure(figsize = (9,6))
ax = fig.add_subplot(projection='3d')
ax.plot(np.sin(x), np.cos(y), z)

plt.show()

如果需要同时放置2D和3D子图,按如下写法创建即可,不会产生残留边框:

# ------------- 并列2D+3D子图写法 ---------------
fig = plt.figure(figsize = (14,6))
# 第一个子图为2D
ax1 = fig.add_subplot(121)
# 第二个子图为3D
ax2 = fig.add_subplot(122, projection='3d')

# 2D子图绘图
ax1.plot(x, np.sin(x))
# 3D子图绘图
ax2.plot(np.sin(x), np.cos(y), z)

plt.show()

方案2:手动隐藏原有2D坐标轴

如果不想修改原有创建画布的逻辑,可以在创建3D坐标轴后把底层的2D坐标轴设置为不可见:

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

x = np.linspace(0,10)
y = np.linspace(0,10)
z = np.linspace(0,10)

# ------------- Figure ---------------
fig, ax_2d = plt.subplots(figsize = (9,6))
# 隐藏原有2D轴
ax_2d.set_visible(False)

ax = fig.gca(projection='3d')
ax.plot(np.sin(x), np.cos(y), z)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:54:03