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),这与我的情节有什么关系?通过一些实验,我发现:
- (1,1,1) 将相机中心放在我的情节占用的体积之外,但我无法弄清楚外面有多远,
- (0.5, 0.5, 0.5) 将相机中心放在地块占据的体积的边缘之一附近,但不完全在边缘上;有时它靠近体积的一角,有时它沿着边缘。
注意:我不是 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 中可能会有所不同),则无法检索它,因此您可能需要手动设置它。
在 3D Plotly 绘图中,相机中心默认为 (0,0,0),其中,据我了解,(0,0,0) 指的是绘图占据的 3D 体积的中心, 不是坐标(0,0,0).
这些值可以通过 layout.scene.camera.center
更改,如记录 here and here 所示。但是,我无法确定正在使用的单位,也无法在文档中找到此信息。
例如如果我将相机中心更改为 (1,1,1),这与我的情节有什么关系?通过一些实验,我发现:
- (1,1,1) 将相机中心放在我的情节占用的体积之外,但我无法弄清楚外面有多远,
- (0.5, 0.5, 0.5) 将相机中心放在地块占据的体积的边缘之一附近,但不完全在边缘上;有时它靠近体积的一角,有时它沿着边缘。
注意:我不是 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 中可能会有所不同),则无法检索它,因此您可能需要手动设置它。