Matplotlib 3D散点图点与坐标轴对齐异常问题求助
3D散点图散点与坐标轴对齐偏移问题
尝试绘制简单3D散点图时,散点无法和坐标轴正确对齐,本应落在x=1、y=1、z=1位置的点出现偏移,切换到tkinter后端也存在同样问题。

使用的代码如下:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.array([-1, -0.5, 0, 0.5, 1]) y = np.array([-1, -0.5, 0, 0.5, 1]) z = np.array([-1, -0.5, 0, 0.5, 1]) fig = plt.figure() ax = fig.add_subplot(projection='3d') xyz = np.meshgrid(x,y,z) ax.scatter(xyz[0], xyz[1], xyz[2], marker='.') plt.show()
曾查看过一些相关问题,但未找到具体解决方案。
环境:Python 3.11.1、Matplotlib 3.7.1、Windows 10
解决方法
这个问题是Matplotlib 3D绘图的视觉透视效果导致的,并非坐标实际偏移。要让散点严格对齐坐标轴,有两种可行方案:
启用正交投影
创建3D轴后添加ax.set_proj_type('ortho'),用正交投影替代默认的透视投影,此时坐标点会完全按照实际位置显示,不会产生视觉偏移:import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.array([-1, -0.5, 0, 0.5, 1]) y = np.array([-1, -0.5, 0, 0.5, 1]) z = np.array([-1, -0.5, 0, 0.5, 1]) fig = plt.figure() ax = fig.add_subplot(projection='3d') ax.set_proj_type('ortho') # 启用正交投影 xyz = np.meshgrid(x,y,z) ax.scatter(xyz[0], xyz[1], xyz[2], marker='.') plt.show()调整视角
通过ax.view_init(elev, azim)调整绘图视角,找到能让点视觉上对齐的角度,但这只是视觉修正,不如正交投影彻底。示例:ax.view_init(elev=30, azim=45)
内容的提问来源于stack exchange,提问作者craigB
相关产品推荐
相关产品推荐

