如何在闪亮页面内渲染scatter3d而不是popup

时间:2017-05-21 18:17:41

标签: r plot 3d shiny rgl

我正在寻找在我闪亮的应用程序中实现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)

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

并且有一些RGL包但它们有相同的问题(单独的窗口),并且不提供我值得注意的选项。

1 个答案:

答案 0 :(得分: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)

产生这个:

enter image description here