gpt4 book ai didi

r - 填充R渐变曲线

转载 作者:行者123 更新时间:2023-12-04 02:02:51 25 4
gpt4 key购买 nike

我有一条曲线,我使用 R 来制作(见下面的代码):

library(rgl)

y = seq(-5,25,by=0.01)
x = seq(5,20,by=0.02)

sd = 0.3*x
NAs <- rep(NA, length(x)*length(y))
z <- matrix(NAs, length(x), byrow = T)
for(i in seq(1,length(x))) {
for(j in seq(1,length(y))) {
val = dnorm(y[j],mean=7.5,sd=sd[i])
z[i,j] = val
if(z[i,j] < 0.02) {
z[i,j] = NA
}
}
}

col <- rainbow(length(x))[rank(x)]

open3d()
persp3d(x,y,z,color=col,xlim=c(5,20),ylim=c(5,10),axes=F,box=F,xlab="exp",ylab="obs",zlab="p")

这就是它的作用:
enter image description here

稍微旋转一下,就能看出这是一个空心管型的人偶。

enter image description here

但我试图让它被填充(用颜色渐变),这样它就不会是空心的。想象一下,在任何位置进行切片,如果有意义的话,您会得到一个 2D 平面,而不是 2D 曲线。我怎样才能做到这一点?

最佳答案

要填充 3-d 中的间隙(2-d 形状),您不应该使用线条,因为它们是 1-d 对象。用三角形或四边形(具有四个角的平面对象)填充间隙。

library(rgl)

y <- seq(-5,25,by=0.1)
x <- seq(5,20,by=0.2)
z <- outer(.3*x, y, function(my.sd, my.y) dnorm(my.y, mean=7.5, sd=my.sd))
z[z < .02] <- NA

col <- rainbow(length(x))[rank(x)]
xn <- length(x)
yn <- length(y)

open3d()
persp3d(x, y, z, color=col, xlim=c(5,20), ylim=c(5,10), axes=F, box=F,
xlab="exp", ylab="obs", zlab="p")
rgl.quads(rep(x[xn], (yn-1)*4),
sapply(2:yn, function(i) y[i-c(0:1,1:0)]),
sapply(2:yn, function(i) c(z[xn,i-0:1], 0, 0)),
color=col[xn])

enter image description here
outersapply如果您对 R 不太熟悉,命令可能会令人困惑,但可以将它们视为矢量化 for循环。 outer call 执行坐标的外连接以创建所有 z一口气和 sapply s 提取四边形的坐标。回避的原因 for R(或任何其他高级非编译语言)中的循环非常慢,并且还会使代码变得庞大。

关于r - 填充R渐变曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com