我试图做一些简单的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()
下面的链接似乎松散相关,但我无法把一个具体的解决方案。
https://github.com/matplotlib/matplotlib/issues/11836
https://github.com/matplotlib/matplotlib/issues/1077/
Python 3.11.1、Matplotlib 3.7.1、Windows 10
3条答案
按热度按时间ctzwtxfj1#
正如@jared在评论中指出的,点按预期对齐。你可以通过旋转图表来看到它。下面是另一个视图,使用您提供的代码的复制粘贴,在旋转图形以面向其中一个轴之后:
。
6l7fqoea2#
你所看到的不是错位,而是以2D形式查看3D信息的结果,即这是由投影引起的。一般来说,我不建议显示静态3D散点图;或者将它们作为交互式媒体共享,或者创建图形旋转的动画(例如由@matleg共享的this link)。
注意:Matplotlib中还有其他投影选项,如here文档所示,但它们无法解决此问题。正交本质上是使用平行的视觉线,而默认的(透视)更真实地反映了我们实际上是如何看待事物的。下图显示了使用这两个投影选项时示例的不同之处。
zphenhs43#
可以移除每个轴开始处的小偏移,这可以改善对准的外观。
参见Correctly setting the axes limits in 3d plots