R闪烁的RGL在鼠标左键单击时不旋转

时间:2017-05-22 11:47:37

标签: r shiny interactive rgl scatter3d

就在不久之前,迈克回答了关于如何嵌入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=F)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
    rglwidget()

    })

  })   
shinyApp(ui = ui, server = server)

rgl.open(useNULL=F)更改为rgl.open(useNULL=T)将停止显示弹出窗口,但在任何一种情况下,闪亮页面中的rgl都会执行ZOOM,但不会旋转。

似乎鼠标右键单击注册并工作,而鼠标左键单击无法识别....

> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

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

other attached packages:
[1] shiny_1.0.0 car_2.1-4   rgl_0.97.0 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9        knitr_1.15.1       magrittr_1.5       splines_3.3.3      MASS_7.3-45        xtable_1.8-2       lattice_0.20-34   
 [8] R6_2.2.0           minqa_1.2.4        tools_3.3.3        nnet_7.3-12        pbkrtest_0.4-7     parallel_3.3.3     grid_3.3.3        
[15] nlme_3.1-131       mgcv_1.8-17        quantreg_5.33      MatrixModels_0.4-1 htmltools_0.3.5    yaml_2.1.14        lme4_1.1-13       
[22] digest_0.6.11      Matrix_1.2-8       nloptr_1.0.4       htmlwidgets_0.8    mime_0.5           SparseM_1.77       jsonlite_1.2      
[29] httpuv_1.3.3    

1 个答案:

答案 0 :(得分:3)

你的场景正在使用mouseMode“polar”(可能是因为scatter3d正在设置它)。该模式目前尚未在rglwidget代码中实现。

解决方法是在调用rglwidget()之前将mouseMode设置为“trackball”,例如在输出$ plot中把这个:

open3d(useNULL=TRUE)
scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
par3d(mouseMode = "trackball")
rglwidget()

请注意我的编辑:我已经简化了上面的代码。要设置鼠标左键,只需指定mouseMode的一个组件。

另一个编辑:rgl的最新版本是0.98.8,可以在R-forge上获得,也可能在其他地方(见How do I install the latest version of rgl?),现在支持“极地”鼠标处理。它与R中的行为不同,但它很接近。