在 R 中使用 persp3d() 函数不显示颜色
Colors don't show using persp3d() function in R
我在 R 中使用 persp3d() 函数时遇到一些问题。这是我的代码:
library(rgl)
vero=function(mu,sigma,datos)
{
n=length(datos)
media=mean(datos)
S2=sd(datos)^2
lvero=(-n/2)*log(2*pi*sigma)-(n/(2*sigma))*S2-(n/(2*sigma))*(media-mu)^2
return(exp(lvero))
}
nbebes=rnorm(20, mean=75, sd=2.5)
mu.seq <- seq(60,100,length=2000)
sigma.seq <- seq(1,20,length=2000)
f <- Vectorize(vero,vectorize.args=c("mu","sigma"))
z <- outer(mu.seq,sigma.seq,f,datos=nbebes)
zlim <- range(z[!is.na(z)])
palette <- rev(rainbow(20))
colors <- palette[19*(z-zlim[1])/diff(zlim) + 1]
persp3d(mu.seq,sigma.seq,z,col=colors)
代码的输出是这张图:
我究竟做错了什么?有时我会得到另一个结果,它是一个像这样的彩虹色函数:
但是正如您所见,它并没有完全着色,我不知道要更改或重写什么才能获得正确的结果。
我不能准确地说出为什么这是一个问题,但这似乎与您的 z-axis 的限制有关。当我将 z
重新调整为 z2 <- z / max(z)
时,它的范围在 0 和 1 之间并且绘制得很好。这可能是 rgl
的问题。这是一个例子:
nbebes=rnorm(20, mean=75, sd=2.5)
mu.seq <- seq(60,100,length=500)
sigma.seq <- seq(1,20,length=500)
f <- Vectorize(vero,vectorize.args=c("mu","sigma"))
z <- outer(mu.seq,sigma.seq,f,datos=nbebes)
z2 <- z/max(z)
colors <- rev(rainbow(20))
breaks <- seq(zlim[1], zlim[2], length.out=(length(colors)+1))
CUT <- cut(z2, breaks=breaks, include.lowest = TRUE)
colorlevels <- colors[match(CUT, levels(CUT))] # assign colors to heights for each point
persp3d(mu.seq,sigma.seq,z2,color=colorlevels)
我在 R 中使用 persp3d() 函数时遇到一些问题。这是我的代码:
library(rgl)
vero=function(mu,sigma,datos)
{
n=length(datos)
media=mean(datos)
S2=sd(datos)^2
lvero=(-n/2)*log(2*pi*sigma)-(n/(2*sigma))*S2-(n/(2*sigma))*(media-mu)^2
return(exp(lvero))
}
nbebes=rnorm(20, mean=75, sd=2.5)
mu.seq <- seq(60,100,length=2000)
sigma.seq <- seq(1,20,length=2000)
f <- Vectorize(vero,vectorize.args=c("mu","sigma"))
z <- outer(mu.seq,sigma.seq,f,datos=nbebes)
zlim <- range(z[!is.na(z)])
palette <- rev(rainbow(20))
colors <- palette[19*(z-zlim[1])/diff(zlim) + 1]
persp3d(mu.seq,sigma.seq,z,col=colors)
代码的输出是这张图:
我不能准确地说出为什么这是一个问题,但这似乎与您的 z-axis 的限制有关。当我将 z
重新调整为 z2 <- z / max(z)
时,它的范围在 0 和 1 之间并且绘制得很好。这可能是 rgl
的问题。这是一个例子:
nbebes=rnorm(20, mean=75, sd=2.5)
mu.seq <- seq(60,100,length=500)
sigma.seq <- seq(1,20,length=500)
f <- Vectorize(vero,vectorize.args=c("mu","sigma"))
z <- outer(mu.seq,sigma.seq,f,datos=nbebes)
z2 <- z/max(z)
colors <- rev(rainbow(20))
breaks <- seq(zlim[1], zlim[2], length.out=(length(colors)+1))
CUT <- cut(z2, breaks=breaks, include.lowest = TRUE)
colorlevels <- colors[match(CUT, levels(CUT))] # assign colors to heights for each point
persp3d(mu.seq,sigma.seq,z2,color=colorlevels)