【问题标题】:How to render scatter3d inside shiny page instead of popup如何在闪亮的页面而不是弹出窗口中呈现 scatter3d
【发布时间】:2017-10-21 08:49:35
【问题描述】:

我正在寻找在我闪亮的应用程序中实现 3D 交互式绘图,到目前为止我一直在使用 plotly。但是,plotly 有一个主要缺点,渲染时非常慢。 我已经完成了检查,尽管涉及大量数据集,但更新后的 outplot$plot

因此,我希望使用一个名为 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 包,但它们有相同的问题(单独的窗口)并且不提供我正在寻找的选项。

【问题讨论】:

    标签: r plot 3d shiny rgl


    【解决方案1】:

    您需要使用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)
    

    产生这个:

    【讨论】:

    • 嘿迈克,谢谢!我只找到了一个用于 rgl 的 webGL 包装器,它最终打印了版权信息而不是情节哈哈。但是,这行得通,现在我得到了一个弹出和嵌入式图。它也为你这样做了吗?如果不。如何让我的弹出窗口停止。谢谢!
    • 好的,也解决了这个问题。试试看。如果它有效,将受到赞赏:)
    • 其实我还在看。认为它可以简单得多。
    • 嗯,努力摆脱弹出窗口(我也尝试了 rgl.close 技巧),但现在它不再可旋转了。
    • 很奇怪,实际上是鼠标左键没有被识别,因为您仍然可以使用鼠标中键进行放大和缩小。可能是某种错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2018-09-23
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多