2016-11-09 84 views
1

我想画出像图中的3D表面图:如何使用`group_by`参数在plot_ly功能中的R

enter image description here

我与plotly包尝试低于:

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')) 

我有错误消息:

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

group参数已被弃用,我还没有成功group_by

问题。如何重写group_by参数?

+0

在eval(expr,envir,enclos)中找到'Error':找不到对象'z'。 – CCurtis

+0

谢谢,我已经修复了代码行'plot_ly(x =〜x,y =〜y,z =〜f,type ='scatter3d',mode ='lines',' – Nick

回答

3

在构建数据集“df0”时存在一个问题。如果我们看看

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 ... 

它将是显而易见的。所述f返回matrix和它应转换为vector创建“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 ... 

提到的另一个误差是group_by。如果我们已经加载了

library(dplyr) 

那个错误信息也不见了。