2017-05-27 4 views
1

Deux pas en avant, un pas en arrière. Les dernières semaines, j'ai rencontré quelques problèmes que je ne pouvais pas résoudre seul en tant qu'utilisateur autonome avec 1 an d'expérience en R, mais heureusement il y a des gens formidables sur ce site qui m'ont beaucoup aidé! Tout d'abord, merci pour ce gars. Il semble maintenant que nous avons trouvé un moyen d'obtenir des parcelles scatter3d dans l'application brillante que je construis, et que le bouton gauche de la souris fonctionne (voir mes questions précédentes) J'ai maintenant rencontré un bug que je fais ne comprends pas.argument scatter3d ellipsoïde à l'intérieur brillant r échec

Le bug dit ceci: le principal mineur de l'ordre 3 n'est pas positif défini après un moment de curieux, j'ai découvert qu'il est à l'intérieur de l'argument ellipsoïde de scatter3d.

courir ceci fonctionne très bien:

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) 

Le passage à ellipsoïde = TRUE donne l'erreur et rien ne rend en brillant

Courir le graphique sans brillant en lançant juste ces lignes:

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

fonctionne en ce sens qu'il rend à l'intérieur de la fenêtre de réglage, mais imprime toujours l'erreur bien sûr.

changer le nombre de groupes à moins de 14 semble résoudre: groupes < - as.factor (rep (1: 13,5)) groupes < - groupes [01:50]
ne donne aucune erreur . groupes < - as.factor (rep (1: 14,5)) groupes < - groupes [1:50] donne l'erreur ..... très étrange. Au début, je pensais qu'il pourrait être lié à la construction en nr de couleurs de scatter3d car jusqu'à 8 groupes, il colorie les choses automatiquement sans spécifier surface.col. Dès que vous avez 9 groupes, vous devez donner une palette vous-même, mais ce n ° 13 coupure semble assez maladroit ....

  • Je taggé comme RGL et bien qu'il ne fait pas partie du problème afin que certaines personnes suivant mon autre question liée aux RGL peuvent voir que j'ai mis cette question dans une nouvelle question.
+0

Comme 'scatter3d' utilise' ce rgl' est certainement un problème lié 'de rgl'. Pas besoin d'appolguer pour l'étiquette. –

Répondre

1

Votre problème est que vous n'avez tout simplement pas assez de données. Cela l'amène à essayer de calculer un ellipsoïde quand il n'a pas assez de points (nécessite au moins 3 par groupe j'imagine). Le message d'erreur pourrait évidemment être meilleur, mais il n'est pas faux, il se réfère à ce qui ne va pas dans le calcul.

J'ai créé un ncars paramétré qui est juste un plus grand ré-échantillonnage de vos données d'origine, donc il devrait ressembler.

Ici, il est:

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) 

et voici un terrain:

enter image description here

+0

à droite. hmmm bien mes données réelles sont plus de 10.000 lignes de données de particules, mais je suppose que certaines grappes reçoivent trop peu de points de données qui leur sont attribués dans le modèle et par conséquent gâchent mon code de tracé comme vous l'expliquez. Merci Mike! – Mark

+0

'scatter3d' peut être terriblement lent sur 10k lignes. –

+0

Cela fonctionne cependant, juste essayé. –