使用 R 进行 2D 投影的 3D 表面

Posted

技术标签:

【中文标题】使用 R 进行 2D 投影的 3D 表面【英文标题】:3D surface with a 2D projection using R 【发布时间】:2019-04-10 11:13:31 【问题描述】:

我需要使用 R 绘制一个带有 2D 投影的 3D 表面,如下图所示。

它具有 3D 密度图,例如,在 R 中使用 plotly 很容易做到这一点。另一方面,2D 表面到目前为止,我在寻找如何绘制它们时都没有运气。我找到的最好的是this example,但它使用 Python 而不是 R。

我还发现包 RSM(响应曲面方法)可能具有绘制此图的工具,但我研究了包文档并查找了在线示例,到目前为止我还没有找到任何接近的东西这张图的质量。

Base R 函数persp 看起来它也可以提供一些答案,但到目前为止我还没有成功使用它来绘制 2D 投影。包plot3D 也可能提供解决方案的线索。

提前感谢您对此提供的任何帮助。

【问题讨论】:

这个问题很有趣,但是你应该make it reproducible添加一些数据和代码。 也许有点矫枉过正,但使用github.com/tylermorganwall/rayshader 应该可以实现此显示的某些方面 @alistaire 我没有任何数据或代码,因为我不知道哪个包能够绘制这样的图表。比表面和 2D 投影也不重要。 制作 a reprex 不是 SO 问题的选项;这是一个要求,如果没有这个要求,这个问题可能会被关闭。开放式问题在RStudio Community 上得到了更积极的回应。 rgl 包可能是 3D 绘图的可能解决方案,但您可能需要手动创建 2D 投影。祝你好运。 【参考方案1】:

嗯,我不知道你的数据是什么样的,但如果你没有具体的数据,你可以使用r-plotly surface这个参考。

这里是一些使用火山 R 数据的例子。

诀窍是使用contours()

代码:

# volcano is a numeric matrix that ships with R
plot_ly(z = ~volcano) %>% add_surface(
  contours = list(
    z = list(
      show=TRUE,
      usecolormap=TRUE,
      highlightcolor="#ff0000",
      project=list(z=TRUE)
    ),
    y = list(
      show=TRUE,
      usecolormap=FALSE, # Projection without colormap
      highlightcolor="#ff0000",
      project=list(y=TRUE)
    ),

    x = list(
      show=TRUE,
      usecolormap=TRUE,
      highlightcolor="#ff0000",
      project=list(x=TRUE)
    )

  )
)

输出:

【讨论】:

以上是关于使用 R 进行 2D 投影的 3D 表面的主要内容,如果未能解决你的问题,请参考以下文章

带有 2D 投影的 3D 线框图:空间组织和投影频率

在 UWP MapControl 中将点投影到 3D 地形表面

opencvprojectPoints 三维点到二维点 重投影误差计算

将 3D 转换转换为 2D

如何在 Unity 中从 3D 对象中获取 2D 视图/纹理

通过3D表面绘制2D平面