R语言Plotly:如何将任意路径投影至(x,y)/(x,z)/(y,z)平面?
如何在Plotly R中实现3D曲面上任意路径的坐标平面投影?
我们已经掌握Plotly中曲面等高线的投影方法:通过plotly::add_surface的contours参数设置project=list(z=TRUE),就能将等高线投影到(x,y)平面,效果如同官方文档“Surface Plot With Contours”章节所示。
但实际需求中,我们需要将通过plotly::add_paths定义的3D曲面上的任意路径,投影到(x,y)、(x,z)或(y,z)坐标平面,并且希望投影效果能像等高线投影一样智能——调整plotly::layout(scene = ...)时,投影曲线能自动贴合对应坐标网格,而非手动在固定平面绘制的笨拙方案。
解决方案
Plotly的add_paths函数支持在line参数中配置project属性,用法与曲面等高线的投影设置一致,只需指定要投影的坐标轴即可实现智能投影:
- 投影到(x,y)平面:设置
project = list(z = TRUE)(沿z轴方向投影) - 投影到(x,z)平面:设置
project = list(y = TRUE)(沿y轴方向投影) - 投影到(y,z)平面:设置
project = list(x = TRUE)(沿x轴方向投影)
示例代码
library(plotly) # 加载示例数据 dim(volcano) # [1] 87 61 # 创建曲面图并设置浅色配色 f2 <- plot_ly(z = ~volcano) |> add_surface(colorscale = list(c(0, 1), c('beige', 'lightgreen'))) # 添加3D曲面上的任意路径 f3 <- add_paths(f2, x = 0:60, y = 0:60, z = volcano[cbind(1:61,1:61)], line = list(width = 4, color = "blue")) # 智能投影路径到三个坐标平面 f3 |> # 投影到(x,y)平面(沿z轴) add_paths(x = 0:60, y = 0:60, z = volcano[cbind(1:61,1:61)], line = list(width = 3, color = "red", project = list(z = TRUE))) |> # 投影到(x,z)平面(沿y轴) add_paths(x = 0:60, y = 0:60, z = volcano[cbind(1:61,1:61)], line = list(width = 3, color = "orange", project = list(y = TRUE))) |> # 投影到(y,z)平面(沿x轴) add_paths(x = 0:60, y = 0:60, z = volcano[cbind(1:61,1:61)], line = list(width = 3, color = "purple", project = list(x = TRUE)))
效果说明
通过上述方式添加的投影曲线,会自动绑定到对应坐标平面的网格上。当你调整layout(scene = ...)中的视角、轴范围等参数时,投影曲线会同步更新位置,完全不需要手动调整坐标值,实现和等高线投影一致的智能效果。
内容的提问来源于stack exchange,提问作者tingtingzhan
相关产品推荐
相关产品推荐

