【问题标题】:rgl snapshot fails in Shiny apprgl 快照在 Shiny 应用程序中失败
【发布时间】:2015-09-02 20:16:31
【问题描述】:

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

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()
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

非常感谢任何帮助。

【问题讨论】:

    标签: r shiny rgl


    【解决方案1】:

    如自述文件在他的 Github 存储库中所说,shinyRGL 的作者不再维护它。但是,我最近一直在向 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 并从本地副本安装。

    【讨论】:

    • 我无法访问R-forge package page,说“权限被拒绝。没有选择项目,项目不存在或您无法访问。”我确实找到了example page
    • 我在上面添加了详细信息。
    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多