R Error: Coloring Graphs According to Values Within a Matrix

R Error: Coloring Graphs According to Values Within a Matrix

我正在使用 R 编程语言。

我正在尝试在变量“x、y 和 w”之间制作一个 3 维图,并根据“z”的值为该图着色:

library(plotly)
library(dplyr)

X <- seq(0,3.1,0.1)
Y <- seq(0,3.1,0.1)
W <- seq(0,3.1,0.1)
DF <- expand.grid(X,Y, W)

#Compute variable for colors
DF$Z <- sin(DF$Var1) + cos(DF$Var2) + sin(DF$Var3)

#make a matrix of color values
Mat <- matrix(DF$Z,nrow = 32)

#make a matrix for z values

Mat2 <- matrix(rep(c(1:16,16:1),32),nrow=32)

#plot
    plot_ly(y=~Y,x=X,  z=~W) %>%  
      add_surface(surfacecolor=~Mat)

但这会产生错误:

Error: `z` must be a numeric matrix

任何人都可以告诉我如何解决这个问题吗?

谢谢

注意:出于某种原因,以下代码有效:

X <- seq(0,3.1,0.1)
Y <- seq(0,3.1,0.1)
DF <- expand.grid(X,Y)

#Compute variable for colors
DF$Z <- sin(DF$Var1) + cos(DF$Var2)

#make a matrix of color values
Mat <- matrix(DF$Z,nrow = 32)

#make a matrix for z values
Mat2 <- matrix(rep(c(1:16,16:1),32),nrow=32)

plot_ly(y=~Y,x=X,  z=~Mat2) %>%  
    add_surface(surfacecolor=~Mat)

您的数据本质上是 一条线上的点 的三个维度(XYW),所以不清楚是什么您要绘制的曲面。 add_surface 期望 z-values 是一个 32x32 矩阵(因为 XY 每个都有 32 个条目)但是你在你的(第一个) 调用,因此出现错误。在您的第二次尝试中,您提供 Mat2 这是一个具有适当维度的矩阵。另请注意,surfacecolor 也需要是 32x32 矩阵。

所以设置W矩阵,计算颜色矩阵colors(为了简单起见,我在下面使用一个矩阵),

W <- matrix(rep(1, 32^2), ncol = 32)
grid <- data.frame(W = c(W), X = rep(X, each = 32), Y = Y)
colors <- 
  matrix(
    mapply(function(x,y,z) sin(x)+cos(y)+sin(z), grid$X, grid$Y, grid$W), 
    nrow = 32, byrow = T
  )

和情节:

plot_ly(y = ~Y, x = ~X,  z = ~W) %>%  
  add_surface(surfacecolor = ~colors)

编辑

要绘制 XYZ,适当地将 DF$Z 转换为 32x32 矩阵:

DF <- expand.grid(X,Y)
DF$Z <- sin(DF$Var1) + cos(DF$Var2)
Z <- matrix(DF$Z, nrow = 32)

plot_ly(y = ~Y, x = ~X, z=~Z) %>%  
  add_surface()