Python 使用mplot3d旋转默认坐标轴方向

Python 使用mplot3d旋转默认坐标轴方向,python,matplotlib,coordinate-transformation,mplot3d,Python,Matplotlib,Coordinate Transformation,Mplot3d,我正在绘制三维成像的数据,其中参考坐标系是非传统方向的。具体而言,对于仰卧(面朝上)的患者,+X方向指向患者左侧,+Y方向指向地板,+Z方向指向其头部方向。它仍然是一个右手坐标系。如果我使用ax.view_init()设置一个接近这个方向的视点,我会发现交互操作的效果非常糟糕。到目前为止,我的解决方案是通过旋转矩阵将数据点映射到世界空间中的这个方向,并绘制结果。我还可以调用ax.plot(-z,x,-y)来获得相同的结果。这是功能性的,但会使代码混乱,我发现它很容易出错 有没有办法将我的转换矩阵

我正在绘制三维成像的数据,其中参考坐标系是非传统方向的。具体而言,对于仰卧(面朝上)的患者,+X方向指向患者左侧,+Y方向指向地板,+Z方向指向其头部方向。它仍然是一个右手坐标系。如果我使用ax.view_init()设置一个接近这个方向的视点,我会发现交互操作的效果非常糟糕。到目前为止,我的解决方案是通过旋转矩阵将数据点映射到世界空间中的这个方向,并绘制结果。我还可以调用ax.plot(-z,x,-y)来获得相同的结果。这是功能性的,但会使代码混乱,我发现它很容易出错

有没有办法将我的转换矩阵嵌入mplot3d处理链中,以便自动执行?对于它执行的转换,文档仍然有点不完整,我无法确定从何处开始,尽管我认为这是可能的

更具体一点,这里的代码按照惯例在左侧绘制,在右侧以我更喜欢的方向绘制:

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

fig = plt.figure(figsize=(8,4))
ax1 = fig.add_subplot(121, projection='3d')
ax2 = fig.add_subplot(122, projection='3d')

X, Y, Z = axes3d.get_test_data(0.05)

pts = np.vstack((X.flatten(), Y.flatten(), Z.flatten(), np.ones_like(X.flatten())))
xf = np.array([
    [0., 0.,-1., 0.],
    [1., 0., 0., 0.],
    [0.,-1., 0., 0.],
    [0., 0., 0., 1.]
])
pts = xf @ pts
xt = pts[0].reshape((X.shape))
yt = pts[1].reshape((Y.shape))
zt = pts[2].reshape((Z.shape))

ax1.plot_surface(X, Y, Z, rstride=10, cstride=10)
ax2.plot_surface(xt, yt, zt, rstride=10, cstride=10)
for ax in (ax1, ax2):
    for ff in (ax.set_xlim, ax.set_ylim, ax.set_zlim):
        ff(-50, 50)