R Shiny中的RGL不会在鼠标左键单击时旋转
RGL in R Shiny not rotating on left mouse button click
就在不久前,迈克回答了我关于如何在 shiny 中嵌入 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 都会缩放,但不会旋转。
似乎鼠标右键单击注册并起作用,而鼠标左键单击不被识别....
> 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
您的场景正在使用 mouseMode "polar"(可能是因为 scatter3d 正在设置它)。该模式当前未在 rglwidget 代码中实现。
解决方法是在调用 rglwidget() 之前将 mouseMode 设置为 "trackball",例如在 output$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 上可用,最终可能在其他地方可用(参见 ),现在支持 "polar" 鼠标处理。它与 R 中的行为不同,但很接近。
就在不久前,迈克回答了我关于如何在 shiny 中嵌入 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 都会缩放,但不会旋转。
似乎鼠标右键单击注册并起作用,而鼠标左键单击不被识别....
> 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
您的场景正在使用 mouseMode "polar"(可能是因为 scatter3d 正在设置它)。该模式当前未在 rglwidget 代码中实现。
解决方法是在调用 rglwidget() 之前将 mouseMode 设置为 "trackball",例如在 output$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 上可用,最终可能在其他地方可用(参见