【问题标题】:What units does Plotly camera center (layout.scene.camera.center) use?Plotly 相机中心(layout.scene.camera.center)使用什么单位?
【发布时间】:2020-12-26 18:09:08
【问题描述】:

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

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

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

  • (1,1,1) 将相机中心置于我的情节占据的体积之外,但我不知道外面有多远,
  • (0.5, 0.5, 0.5) 将相机中心放置在靠近但不完全位于绘图所占据的体积边缘之一的位置;有时它靠近体积的一角,有时它沿着边缘。

【问题讨论】:

    标签: python 3d plotly plotly-python


    【解决方案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 中的工作方式可能不同),则无法检索它,因此您可能需要手动设置它。

    【讨论】:

    • 您好,感谢您的回复!你如何定义aspectratio
    • aspectratio 定义为宽高比;在 Plotly 中,它位于 layout.scene,请参阅 ref
    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2019-10-11
    • 2018-11-22
    • 2020-02-09
    相关资源
    最近更新 更多