Plotly 相机中心 (layout.scene.camera.center) 使用什么单位?

What units does Plotly camera center (layout.scene.camera.center) use?

在 3D Plotly 绘图中,相机中心默认为 (0,0,0),其中,据我了解,(0,0,0) 指的是绘图占据的 3D 体积的中心, 不是坐标(0,0,0).

这些值可以通过 layout.scene.camera.center 更改,如记录 here and here 所示。但是,我无法确定正在使用的单位,也无法在文档中找到此信息。

例如如果我将相机中心更改为 (1,1,1),这与我的情节有什么关系?通过一些实验,我发现:

注意:我不是 100% 确定我的答案与 plotly-python 相关,但它在 plotly-js 中是这样工作的,所以我想它应该是相同的。

默认情况下,相机的中心设置为 (0, 0, 0),即您绘图的视觉中心。因此,假设轴上有以下边值:

  • x: [10, 110],
  • y: [0, 50],
  • z: [1, 11],

中心点的坐标为 (60, 25, 6)(例如 x:(10 + 110) / 2 == 60)。

要计算与绘图轴内某些 point 相对应的相机坐标,您可以使用以下公式(给出的示例适用于 x 轴,但对任何轴都有效):

multiplier = 0.5 * aspectratio.x
x = ((point.x - center.x) / halfLengthOfAxisX) * multiplier

因此,在我们的示例中,如果我们希望将相机置于点 (1, 2, 3) 的中心,给定纵横比 1,我们将:

multiplier = 0.5
halfLengthOfAxisX = 50 // Math.abs(center.x - Math.min(x))
x = ((1 - 60) / 50) * 0.5 // -0.59

您提到 (0.5, 0.5, 0.5) 将相机放在靠近边缘的位置,但不完全位于边缘之一。这可能是由于没有考虑 aspectratio 造成的。据我所知,如果它是由 Plotly 计算的(至少使用 Plotly.js;它在 Python 中可能会有所不同),则无法检索它,因此您可能需要手动设置它。