2016-11-09 1 views
1

verwenden, würde Ich mag ein 3D-Oberflächendiagramm zeichnen, wie auf der Abbildung:Wie das `group_by` Argument in der plot_ly Funktion in R

enter image description here

Mein Versuch, mit dem plotly Paket ist unten:

library(plotly) 
packageVersion("plotly") 
# [1] ‘4.5.2’ 


# random data 
a <- 0; s <- c(1:16) 
x <- seq(a-3*max(s), a+3*max(s), len=10) 
f <- sapply(s, function(ss) dnorm(x, a, ss)) 

df0=data.frame(x=rep(x,length(s)), 
       y=rep(s,each=length(x)), 
       z=f, 
col=rep(seq(1,31,2),each=length(x))) 

df0 %>% group_by(y) %>% 
plot_ly(x = ~x, y = ~y, z = ~f, type = 'scatter3d', mode = 'lines', 
line = list(width = 6,color = ~col,colorscale = 'Viridis')) 

ich habe die Fehlermeldung:

Error in function_list[[i]](value) : could not find function "group_by" 

Das group Argument ist veraltet und ich hatte keinen Erfolg mit group_by.

Frage. Wie umschreiben Sie das group_by Argument?

+0

Fehler 'in eval (expr, envir, enclos): Objekt' z 'nicht gefunden'. – CCurtis

+0

Danke, ich habe den Code in der Zeile 'plot_ly' (x = ~ x, y = ~ y, z = ~ f, typ = 'scatter3d', mode = 'Linien', ' – Nick

Antwort

3

Es gibt ein Problem beim Aufbau des Datasets 'df0'. Wenn wir uns die

str(df0) 
#'data.frame': 160 obs. of 19 variables: 
# $ x : num -48 -37.33 -26.67 -16 -5.33 ... 
# $ y : int 1 1 1 1 1 1 1 1 1 1 ... 
# $ z.1 : num 0.00 8.83e-304 1.53e-155 1.03e-56 2.66e-07 ... 
# $ z.2 : num 1.67e-126 4.33e-77 4.97e-40 2.53e-15 5.70e-03 ... 
# $ z.3 : num 3.42e-57 3.13e-35 9.26e-19 8.85e-08 2.74e-02 ... 
# $ z.4 : num 5.37e-33 1.21e-20 2.23e-11 3.35e-05 4.10e-02 ... 
# $ z.5 : num 7.76e-22 6.25e-14 5.31e-08 4.77e-04 4.52e-02 ... 
# $ z.6 : num 8.42e-16 2.60e-10 3.42e-06 1.90e-03 4.48e-02 ... 
# $ z.7 : num 3.51e-12 3.79e-08 4.02e-05 4.18e-03 4.26e-02 ... 
# $ z.8 : num 7.59e-10 9.31e-07 1.93e-04 6.75e-03 3.99e-02 ... 
# $ z.9 : num 2.95e-08 8.13e-06 5.50e-04 9.13e-03 3.72e-02 ... 
# $ z.10: num 3.96e-07 3.75e-05 1.14e-03 1.11e-02 3.46e-02 ... 
# $ z.11: num 2.66e-06 1.14e-04 1.92e-03 1.26e-02 3.22e-02 ... 
# $ z.12: num 1.12e-05 2.63e-04 2.81e-03 1.37e-02 3.01e-02 ... 
# $ z.13: num 3.36e-05 4.97e-04 3.74e-03 1.44e-02 2.82e-02 ... 
# $ z.14: num 7.98e-05 8.14e-04 4.64e-03 1.48e-02 2.65e-02 ... 
# $ z.15: num 0.000159 0.001201 0.005477 0.015058 0.024967 ... 
# $ z.16: num 0.000277 0.001639 0.006217 0.015123 0.023586 ... 
# $ col : num 1 1 1 1 1 1 1 1 1 1 ... 

ansehen, wird es offensichtlich sein. die f gibt ein matrix und es sollte die ‚z‘

df0 <- data.frame(x=rep(x,length(s)), 
      y=rep(s,each=length(x)), 
      z=c(f), ###### 
    col=rep(seq(1,31,2),each=length(x))) 
str(df0) 
#'data.frame': 160 obs. of 4 variables: 
#$ x : num -48 -37.33 -26.67 -16 -5.33 ... 
#$ y : int 1 1 1 1 1 1 1 1 1 1 ... 
#$ z : num 0.00 8.83e-304 1.53e-155 1.03e-56 2.66e-07 ... 
#$ col: num 1 1 1 1 1 1 1 1 1 1 ... 

Ein weiterer Fehler erwähnt ist die group_by-vector umgewandelt werden zu erstellen. Wenn wir

library(dplyr) 

geladen haben, würde diese Fehlermeldung auch weg sein.

Verwandte Themen