rgl快照在Shiny app中失败

时间:2015-09-02 20:16:32

标签: r shiny rgl

使用带有Shiny的修补(rgl.snapshot)rgl版本时,install_github("rgl", "trestletech", "js-class")失败。

rgl.snapshot适用于rgl> = 0.95.1247。但是,由于最新rgl的已知问题无法使用闪亮,因此输出是最初在此ticket中报告的内容,快照只是空白/黑色图像。

以下是一个可重复的示例,取自shinyRGL github

server.R

library(shiny)
library(shinyRGL)

#' Define UI for application that plots random 3d points
#' @author Jeff Allen \email{jeff@@trestletech.com}
shinyUI(pageWithSidebar(

    # Application title
    headerPanel("Shiny WebGL!"),
    # Sidebar with a slider input for number of points
    sidebarPanel(
        sliderInput("pts",
        "Number of points:",
        min = 10,
        max = 1000,
        value = 250),
        HTML("<hr />"),
        helpText(HTML("Created using <a href = \"http://github.com/trestletech/shinyRGL\">shinyRGL</a>."))
    ),

    # Show the generated 3d scatterplot
    mainPanel(
        webGLOutput("sctPlot")
    )
))

ui.R

# Must be executed BEFORE rgl is loaded on headless devices.
options(rgl.useNULL=TRUE)

library(shiny)
library(shinyRGL)
library(rgl)

xPts <- runif(1000, 0, 1)
yPts <- runif(1000, 0, 1)
zPts <- runif(1000, 0, 1)

#' Define server logic required to generate and 3d scatterplot
#' @author Jeff Allen \email{jeff@@trestletech.com}
shinyServer(function(input, output) {

# Expression that generates a rgl scene with a number of points corresponding
# to the value currently set in the slider.
    output$sctPlot <- renderWebGL({
        points3d(xPts[1:input$pts],
            yPts[1:input$pts],
            zPts[1:input$pts])
        axes3d()
        rgl.snapshot('./test.png', fmt = 'png')
   })
})

退出

Warning in rgl.snapshot("./test.png", fmt = "png") : snapshot failed

sessionInfo

# sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server release 6.4 (Santiago)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] shinyRGL_0.1.1 shiny_0.12.2   rgl_0.93.963 

loaded via a namespace (and not attached):
[1] R6_2.1.1        htmltools_0.2.6 Rcpp_0.12.0     digest_0.6.8   
[5] xtable_1.7-4    httpuv_1.3.3    mime_0.3

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

shinyRGL的作者不再维护它了,正如自述文件在他的Github回购中说的那样。但是,我最近一直在向rgl添加交互功能。请参阅插图“WebGL中的用户交互”。

它们仍然非常粗糙,并且不使用Shiny,它们直接插入Javascript。我目前正在通过在htmlwidgets框架内编写rgl小部件来重写它们以与Shiny更兼容。目前代码在R-forge的rglwidget包中,但我希望它最终会合并回主rgl包。

编辑添加:

所有代码都在R-forge上的rgl项目页面上,https://r-forge.r-project.org/projects/rgl/。要安装rglwidget,您应该能够运行

install.packages(c("rgl", "rglwidget"), repos="http://R-Forge.R-project.org")
R中的

(尽管两个软件包都在开发中,因此有时可能会失败)。

第二次补充:

事实上,它确实失败了。所以你必须手动完成:从R-forge更新rgl,然后使用svn下载rglwidget并从本地副本安装。