2017-05-27 76 views
1

两步向前,退一步。在过去的几周里,我遇到了几个我自己无法解决的问题,作为一个拥有1年R经验的自我购买用户,但幸运的是,这个网站上有很多人帮助了我很多!首先,感谢那些人。scatter3d椭圆体参数里面闪亮的R失败

好像现在我们已经找到了一种方法来将scatter3d图绘制到我正在构建的Shiny App中,并让鼠标左键工作(请参阅我以前的问题)我现在遇到了一个bug,不明白。

这个bug说明了这一点:第3阶段的主要未成年人不确定 经过一段时间的困惑之后,我发现它位于scatter3d的椭圆体参数内。

运行这工作得很好:

library(rgl) 
library(car) 
library(shiny) 

colors <- rep("grey", 25) ### dummy palette of all greys 
groups <- as.factor(rep(1:25,2)) ### make 5 categories 

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 = FALSE, groups = groups, surface.col = colors) 
    par3d(mouseMode = "trackball") 
    rglwidget() 
    }) 
}) 
shinyApp(ui = ui, server = server) 

切换到椭圆形= TRUE给出了错误,并没有什么光泽

使得仅通过运行这些线路没有闪亮的运行图:

rgl.open(useNULL=F) 
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE, groups = groups, surface.col = colors) 

的工作原理是它在rgl窗口内呈现,但仍然打印错误当然。

改变组的数量小于14似乎解决它: 基< - as.factor(REP(1:13,5)) 基< - 基团[1:50]
没有给出错误。 groups < - as.factor(rep(1:14,5)) groups < - groups [1:50] 给出错误.....很奇怪。

起初我以为它可能与散列3d的颜色的nr版本有关,因为多达8组,它会自动着色,而不指定surface.col。只要你有9组,你需要给它自己的调色板,但这NR 13截止显得颇为尴尬....

  • 我标记它RGL以及虽然它不是问题的一部分,所以一些跟随我的其他RGL相关问题的人可以看到我已经在一个新问题中提出了这个问题。
+0

因为'scatter3d'使用'rgl'这绝对是一个'rgl'相关的问题。不需要为标签设置应用程序。 –

回答

1

你的问题是你根本没有足够的数据。这导致它在没有足够的点时尝试计算椭圆体(每个组我需要至少3个)。错误信息显然可能会更好,但这并没有错,它指的是计算中出现了什么问题。

我创建了一个参数化的ncars,它对原始数据只是一个更大的重新采样,所以它应该看起来很相似。

这就是:

library(rgl) 
library(car) 
library(shiny) 

makebigcars <- function(n){ 
    newspeed <- sample(cars$speed,n,replace=T) 
    newdist <- sample(cars$dist,n,replace=T) 
    bigcars <- data.frame(speed=newspeed,dist=newdist) 
    bigcars$time = bigcars$dist/bigcars$speed 
    return(bigcars) 
} 
ncars <- makebigcars(150) 

n <- nrow(ncars) 
colors <- rep("grey", n) ### dummy palette of all greys 
groups <- as.factor(rep(1:5,n))[1:n] ## groups 

ui <- fluidPage(
    hr("Scatter3d"), 

    rglwidgetOutput("plot", width = 800, height = 600) 
) 

server <- (function(input, output) { 

    output$plot <- renderRglwidget({ 
    rgl.open(useNULL=F) 
    scatter3d(x=ncars$speed, y=ncars$dist, z=ncars$time, surface=FALSE, 
       ellipsoid = T, groups = groups, surface.col = colors) 
    par3d(mouseMode = "trackball") 
    rglwidget() 
    }) 
}) 
shinyApp(ui = ui, server = server) 

,这里是一个情节:

enter image description here

+0

没错。嗯,我的实际数据超过10。000行粒子数据,但我猜测某些聚类在模型中分配给它们的数据点太少,因此按照您解释的方式搞乱了我的绘图代码。谢谢迈克! – Mark

+0

'scatter3d'在10k行上可能非常慢。 –

+0

它虽然工作,只是试了一下。 –