如何在R中的plot_ly函数中使用`group_by`参数

时间:2016-11-09 00:34:47

标签: r group-by plotly

我想在图中绘制一个3D表面图:

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参数?

1 个答案:

答案 0 :(得分: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)

该错误消息也会消失。