使用R中的persp3d()函数不显示颜色

时间:2015-01-06 14:48:13

标签: r function graph colors 3d

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

代码的输出是这个图:

enter image description here 我究竟做错了什么?有时候我会得到另一个彩虹色功能的结果:

enter image description here 但是你可以看到它没有完全着色,我不知道要改变什么或重写以获得正确的结果。

1 个答案:

答案 0 :(得分:1)

我无法解释为什么这是一个问题,但它似乎与z轴的极限有关。当我将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)

enter image description here

相关问题