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