gpt4 book ai didi

r - 使用点阵和线框在 R 中的表面下制作点 "look"

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

我一直在用 R 制作一个相当复杂的图表。我有一个线框,上面有一个表面,点分布在整个 X、Y、Z 空间中(例如在表面下方和上方)。

问题是绘制的点不像它们在表面之下那样“看起来”。

我试图弄清楚如何最好地可视化此图表以使点看起来在表面之下。线框和云的一些示例代码来自这里:R-List Posting

示例中的代码:

library(lattice)
surf <-
expand.grid(x = seq(-pi, pi, length = 50),
y = seq(-pi, pi, length = 50))

surf$z <-
with(surf, {
d <- 3 * sqrt(x^2 + y^2)
exp(-0.02 * d^2) * sin(d)
})

g <- surf

pts <- data.frame(x =rbind(2,2,2), y=rbind(-2,-2,-2), z=rbind(.5,0,-.5))

wireframe(z ~ x * y, g, aspect = c(1, .5),
drape=TRUE,
scales = list(arrows = FALSE),
pts = pts,
panel.3d.wireframe =
function(x, y, z,
xlim, ylim, zlim,
xlim.scaled, ylim.scaled, zlim.scaled,
pts,
...) {
panel.3dwire(x = x, y = y, z = z,
xlim = xlim,
ylim = ylim,
zlim = zlim,
xlim.scaled = xlim.scaled,
ylim.scaled = ylim.scaled,
zlim.scaled = zlim.scaled,
...)
xx <-
xlim.scaled[1] + diff(xlim.scaled) *
(pts$x - xlim[1]) / diff(xlim)
yy <-
ylim.scaled[1] + diff(ylim.scaled) *
(pts$y - ylim[1]) / diff(ylim)
zz <-
zlim.scaled[1] + diff(zlim.scaled) *
(pts$z - zlim[1]) / diff(zlim)
panel.3dscatter(x = xx,
y = yy,
z = zz,
xlim = xlim,
ylim = ylim,
zlim = zlim,
xlim.scaled = xlim.scaled,
ylim.scaled = ylim.scaled,
zlim.scaled = zlim.scaled,
...)
})

Screen Capture

看我的例子,pts 中的点实际上在垂直线上,其中 X,Y =(2,-2) 并且 z 从 0.5 到 -.5。

然而,在我看来,第三点看起来不像在表面之下,看起来像是在坐标(2,-3,0)处。

这只是我的眼睛误解了吗?

有人对如何让我的点看起来更“3D”有建议吗?也许通过在表面上使用某种透明度来使点的颜色静音以使其看起来“在表面下”?

我尝试使点的颜色不同(表面上为红色,表面下为蓝色)但这并没有真正帮助图形。

最佳答案

这可能会让你开始:

library(emdbook)
sfun <- function(x,y) {
d <- 3 * sqrt(x^2 + y^2)
exp(-0.02 * d^2) * sin(d)
}

cc <- curve3d(sfun(x,y),xlim=c(-pi,pi),ylim=c(-pi,pi),n=c(50,50),
sys3d="rgl")

colvec <- colorRampPalette(c("pink","white","lightblue"))(100)
with(cc,persp3d(x,y,z,col=colvec[cut(z,100)],alpha=0.5))
pts <- data.frame(x=c(2,2,2), y=c(-2,-2,-2), z=c(.5,0,-.5))
with(pts,spheres3d(x,y,z,col="blue",radius=0.1))
rgl.snapshot("rgltmp1.png")

enter image description here

关于r - 使用点阵和线框在 R 中的表面下制作点 "look",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608044/

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