是否可以显示或检索通过Shiny渲染的rgl图中点的名称?

问题描述 投票:1回答:1

我正在使用RGL软件包和Shiny制作一个应用,该应用以3D图的形式显示PCA中不同的主成分选择组合。我一次要绘制成千上万个数据点,因此标记图中的所有点是不可行的,否则我只是在看一个毛线球。但是,从图中获取某些点的名称仍然非常有用。无论是通过标记图中的点还是在Shiny textOutput中显示名称都没有太大关系。

[我尝试的第一种方法是使用Shiny内部的identity3d()函数来尝试创建一个反应性值,该点的名称可以在用户界面中作为输出,但这没有用,我认为这是因为无法让identify3d()与Shiny应用程序通信。

下一种方法是使用相声包,因为我已经看到在这里有一个模糊的提及,它对于做类似的事情很有用。我创建了一个rglShared对象,该对象结合了一个点的绘图和标签的另一个绘图(将它们设置为仅在选择时显示),并尝试通过使用rglMouse()或将mouseMode设置为“选择”。我无法让rglMouse()在Shiny内部工作,当我尝试使用par3d或ShinySetPar3d更改mouseMose()时,Shiny不喜欢这样,只会停止显示任何图。

这里是一些玩具示例的代码,我正尝试使用第二种方法对mtcars数据和rglMouse()进行操作。选择mouseMode的按钮看起来不错,但是更改它实际上对rgl图中的鼠标功能没有任何影响。

library(shiny)
library(crosstalk)
library(rgl)
library(manipulateWidget)

data(mtcars)

ui = fluidPage(
  combineWidgetsOutput("rgl_plot"),
)

server = function(input, output, session){
  output$rgl_plot = renderCombineWidgets({
  rgl.open(useNULL=T)
  ids <- plot3d(mtcars[, 1:3])
  sharedData <- rglShared(ids["data"])
  sharedLabel <- rglShared(text3d(mtcars[, 1:3], text = 1:32,
                                  adj = -0.5),
                           group = sharedData$groupName(),
                           deselectedFade = 0,
                           selectedIgnoreNone = FALSE) 
    rglMouse(rglwidget(shared = list(sharedData, sharedLabel)))
  })
}

shinyApp(ui = ui, server = server)

我使用的是Shiny版本1.4.0,rgl版本0.100.30和串扰版本1.0.0,带有R 3.6.1。

r shiny rgl
1个回答
0
投票

从使用RGL更改为在Shiny内使用plotly创建3D图在很大程度上解决了我的问题,因为plotly工具提示能够准确显示我想要的信息。

© www.soinside.com 2019 - 2024. All rights reserved.