2017-05-27 31 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

它雖然工作,只是試了一下。 –