【问题标题】:Mayavi: How can I flip the Z-axis of a scene?Mayavi:如何翻转场景的 Z 轴?
【发布时间】:2026-01-22 15:00:01
【问题描述】:

我正在尝试在 mayavi 体积 3D 图中翻转 Z 轴。我想出了如何旋转相机等,但这不是我想要的。我只想翻转Z轴的方向。无需操作数据本身

#Minimum working example

import numpy as np
from mayavi import mlab

x, y, z = np.ogrid[-5:5:64j, -5:5:64j, -5:5:64j] #Generate XYZ
data = np.arange(x.shape[0])
x = x.ravel()
y = y.ravel()
z = z.ravel()
mlab.points3d(x, y, z, data) #Produce volumetric plot
mlab.axes(xlabel='X', ylabel='Y', zlabel='Z') #Display axis
mlab.orientation_axes()
mlab.show()

【问题讨论】:

  • @Bazingaa 但这个员工是关于 matplotlib 的。我们在这里谈论 Mayavi
  • 好的,我认为 mayavi 也存在类似的功能。
  • @Bazingaa 我试过了,但即使他们这样做了,也不是那么直截了当
  • 我发现 mlab.axes(ranges = [...]) 可以指定 x、y、z 轴范围,但它似乎只是颠倒了轴刻度标签。由于您的绘图在 [001[ 平面上是对称的,因此很难看到在此命令中反转 z 值的效果

标签: python 3d axis volume mayavi


【解决方案1】:

您能否通过此示例解释一下使用非对称数据的含义。 您是否希望负 z 位于顶部? 以及为什么旋转相机不会产生您想看到的结果?

您可以从宏编辑器中添加代码(如下所述)。

import numpy as np
from mayavi import mlab

x, y, z = np.ogrid[-5:5:64j, -5:5:64j, -5:5:64j] #Generate XYZ
data = np.arange(x.shape[0])
x = x.ravel()
y = y.ravel()
z = z.ravel()

# Recorded script from Mayavi2
from numpy import array
try:
    engine = mayavi.engine
except (AttributeError, NameError):
    from mayavi.api import Engine
    engine = Engine()
    engine.start()
if len(engine.scenes) == 0:
    engine.new_scene()
# -------------------------------------------
scene = engine.scenes[0]
scene.scene.camera.position = [20.68813263960946, 20.334388554161922, 20.518300376103046]
scene.scene.camera.focal_point = [0.24373197555541992, 0.24373197555541992, 0.25]
scene.scene.camera.view_angle = 30.0
scene.scene.camera.view_up = [-0.41179533881878827, -0.4046701524210215, 0.81649658092772626]
scene.scene.camera.clipping_range = [15.729834995160559, 58.864284541884331]
scene.scene.camera.compute_view_plane_normal()
scene.scene.render()

mlab.points3d(x, y, z, data) #Produce volumetric plot
mlab.axes(xlabel='X', ylabel='Y', zlabel='Z') #Display axis
mlab.orientation_axes()

mlab.show()

如果您真的可以手动设置所需的视图,我会这样做。 要获得正确的坐标以传递给mlab.view(),请在旋转场景时从交互式绘图中读取它们:

【讨论】:

  • 同意,您的数据示例更适合可视化。是的,确实我在上面什么负Z​​。我玩弄了相机设置,但从未设法根据需要设置相机
  • 您是否能够手动旋转图像以获得您想要看到的结果?你能贴一张图片吗?
  • 但是我在 mlab.view 中使用的相同吗?因为我看到view可以操作方位角、仰角、距离等。而scen有属性position、view angle、view up等。我不太清楚,用哪一个
  • 是的,我也注意到了。 view_angle 可能是azimuth,可能view_up 是一个单位向量,可以用来计算elevation
  • 但是您可以直接使用相机设置,而不是使用“视图”。我会在一分钟内添加代码。