当我有 3 个解释变量时如何为 3D 图形着色(persp)?
How to colour 3D graph (persp) when I have 3 explanatory variables?
如何为使用 persp
完成的 3D 图形着色?
请使用此数据重现问题:https://www.dropbox.com/s/vay1e86tdtclrf1/data.xlsx?dl=0
此 link 中显示的代码对我不起作用,因为我有 3 个解释变量和 2 个交互:Create 3D Plot Colored According to the Z-axis
当我试图使它适应我的情况时,我遇到了各种各样的错误。在我的情况下如何使用外部?或者得到 zfacet = z1[-1, -1] + z1[-1, -ncz] + z1[-nrz, -1] + z1[-nrz, -ncz]
例如:
Error in seq.int(rx[1L], rx[2L], length.out = nb) : 'from' must be finite
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
这个link用到了一个函数,但是我不是很懂:http://pj.freefaculty.org/guides/Rcourse/plot-3d/plots-3d.pdf
rv 是我的因变量
x, y, y2 是我的解释变量(请注意 y2 只是 y^2)
那么我的模型是 rv~x*y+y2+x:y2
我绘制 3D 图形的代码如下所示
library(akima)
x <- data$x
y <- data$y
y2 <- y^2
z <- data$rv
m <- glm(rv ~ x*y+y2+x:y2, family=gaussian)
i <- 5
xtemp <- seq(min(x),max(x),length.out=i)
xrange <- rep(xtemp,times=i)
ytemp <- seq(min(y),max(y),length.out=i)
yrange <- rep(ytemp,each=i)
y2temp <- seq(min(y),max(y),length.out=i)
y2range <- rep(ytemp,each=i)
newdata <- data.frame(x=xrange,y=yrange,y2=y2range)
zhat <- predict(m,newdata=newdata,type=c("response"))
xyz <- interp(xrange,yrange,that)
quartz()
persp(xyz,theta = 35, phi = 50,col="white", border="grey40", ticktype = "detailed", zlim=c(1,7)) -> res2
你能帮帮我吗?
遵循link中函数的逻辑:
jet.colors <- colorRampPalette( c("#ffcccc", "#cc0000") )
nbcol <- 100
color <- jet.colors(nbcol)
nrz <- length(xyz[[1]])
ncz <- length(xyz[[2]])
z<-xyz[[3]]
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)
persp(xyz,theta = 35, phi = 50,col=color[facetcol], border="grey40", ticktype = "detailed", zlim=c(1,7))
如何为使用 persp
完成的 3D 图形着色?
请使用此数据重现问题:https://www.dropbox.com/s/vay1e86tdtclrf1/data.xlsx?dl=0
此 link 中显示的代码对我不起作用,因为我有 3 个解释变量和 2 个交互:Create 3D Plot Colored According to the Z-axis
当我试图使它适应我的情况时,我遇到了各种各样的错误。在我的情况下如何使用外部?或者得到 zfacet = z1[-1, -1] + z1[-1, -ncz] + z1[-nrz, -1] + z1[-nrz, -ncz]
例如:
Error in seq.int(rx[1L], rx[2L], length.out = nb) : 'from' must be finite
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
这个link用到了一个函数,但是我不是很懂:http://pj.freefaculty.org/guides/Rcourse/plot-3d/plots-3d.pdf
rv 是我的因变量 x, y, y2 是我的解释变量(请注意 y2 只是 y^2) 那么我的模型是 rv~x*y+y2+x:y2
我绘制 3D 图形的代码如下所示
library(akima)
x <- data$x
y <- data$y
y2 <- y^2
z <- data$rv
m <- glm(rv ~ x*y+y2+x:y2, family=gaussian)
i <- 5
xtemp <- seq(min(x),max(x),length.out=i)
xrange <- rep(xtemp,times=i)
ytemp <- seq(min(y),max(y),length.out=i)
yrange <- rep(ytemp,each=i)
y2temp <- seq(min(y),max(y),length.out=i)
y2range <- rep(ytemp,each=i)
newdata <- data.frame(x=xrange,y=yrange,y2=y2range)
zhat <- predict(m,newdata=newdata,type=c("response"))
xyz <- interp(xrange,yrange,that)
quartz()
persp(xyz,theta = 35, phi = 50,col="white", border="grey40", ticktype = "detailed", zlim=c(1,7)) -> res2
你能帮帮我吗?
遵循link中函数的逻辑:
jet.colors <- colorRampPalette( c("#ffcccc", "#cc0000") )
nbcol <- 100
color <- jet.colors(nbcol)
nrz <- length(xyz[[1]])
ncz <- length(xyz[[2]])
z<-xyz[[3]]
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)
persp(xyz,theta = 35, phi = 50,col=color[facetcol], border="grey40", ticktype = "detailed", zlim=c(1,7))