如何在闪亮页面内渲染scatter3d而不是弹出窗口

Mar*_*ark 3 3d plot r rgl shiny

我正在寻找在我的闪亮应用程序中实现3D交互式绘图,到目前为止我一直在使用情节.然而,情节有一个主要缺点,渲染时速度极慢.我已经完成了检查,尽管涉及大量数据集,但更新的outplot $ plot < - renderPlotly({.....})和plotlyOutput("plot")的整个创建时间不到0.5秒.多年来这是一个众所周知的问题,但似乎仍然是最新的.

因此,我正在寻找一个名为car的软件包,也因为它有很多选项,其中一些我特别想要在其他软件包中没有.有关汽车包装的信息如下:http://www.sthda.com/english/wiki/amazing-interactive-3d-scatter-plots-r-software-and-data-visualization问题是它是单独渲染的弹出窗口而不是闪亮的应用程序内部,我想把它放在里面,甚至更好,添加一个按钮,允许用户将其作为弹出窗口,但只有当被问及时.但是,我无法弄清楚如何将虫子塞进实际的闪亮页面.

这是我的最小示例,其中包含单个文本元素和图形代码(在我的示例中)不断出现在单独的窗口中而不是应用程序中.

install.packages(c("rgl", "car", "shiny"))

library("rgl")
library("car")
library(shiny)

cars$time <- cars$dist/cars$speed


ui <- fluidPage(
  hr("how do we get the plot inside this app window rather than in a popup?"),

  plotOutput("plot",  width = 800, height = 600)
  )


server <- (function(input, output) {


  output$plot <- renderPlot({
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
    })
})


shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

还有这个包,scatterplot3d,但这不是交互式的http://www.sthda.com/english/wiki/scatterplot3d-3d-graphics-r-software-and-data-visualization

并且有一些RGL包但它们具有相同的问题(单独的窗口)并且不提供我正在寻找的选项.

Mik*_*ise 6

你需要使用一个rglwidget最后一个rgl图并放入一个htmlwidget.它曾经是一个单独的包,但它最近被集成到`rgl.

这是执行此操作的代码:

library(rgl)
library(car)
library(shiny)

cars$time <- cars$dist/cars$speed

ui <- fluidPage(
  hr("how do we get the plot inside this app window rather than in a popup?"),

  rglwidgetOutput("plot",  width = 800, height = 600)
)

server <- (function(input, output) {

  output$plot <- renderRglwidget({
    rgl.open(useNULL=T)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
    rglwidget()
  })
})   
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

产生这个:

在此输入图像描述