gpt4 book ai didi

r - 在R中的3D表面 map 上覆盖 map

转载 作者:行者123 更新时间:2023-12-03 11:29:47 26 4
gpt4 key购买 nike

我使用rgl.surface()创建了3d map ,主要是按照this帖子中Shane的回答。使用我自己的数据,我得到了这张 map

在此表面图的顶部,我想添加一张植被密度图,以便获得类似的信息(通过软件Surfer获得):

是否可以用rgl做到这一点,或者就此而言,可以使用r中的任何其他软件包,还是像Shane的答案中那样拥有两个映射的唯一解决方案?

谢谢。

编辑:

按照@ gsk3的请求,以下是此 map 的代码:

library(rgl)

# Read the z (i.e. elevation) dimension from file
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
#create / open x y (i.e. easting and northing coordinates) dimensions
y=8*(1:ncol(z)) # Each point is 8 m^2
x=8*(1:nrow(z))

# See https://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r for details of code below
zlim <- range(z)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen,alpha=0) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x,y,z)

我无法发布海拔代码,因为有65536(即x * y = 256 * 256)个点,但是它是一个看起来像这样的矩阵
            [,1]     [,2]     [,3]     [,4]     [,5] 
[1,] 1513.708 1513.971 1514.067 1513.971 1513.875
[2,] 1513.622 1513.524 1513.578 1513.577 1513.481

等等。
植被密度图也一样,格式完全相同,每个x * y点的值都只有一个。我希望这可以使事情变得更清楚...?

编辑2,最终版本

这是我用R制作的 map 。我还没有图例,但是我稍后会做。

最终的代码是
library(rgl)
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
# Multiply z by 2 to accentuate the relief otherwise it looks a little bit flat.
z= z1*2

#create / open x y dimensions
y=8*(1:ncol(z))
x=8*(1:nrow(z))

trn = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
fv = trn*100
trnlim = range(fv)

fv.colors = colorRampPalette(c("white","tan4","darkseagreen1","chartreuse4")) ## define the color ramp
colorlut =fv.colors(100)c(1,seq(35,35,length.out=9),seq(35,75,length.out=30),seq(75,100,length.out=61))]

# Assign colors to fv for each point
col = colorlut[fv-trnlim[1]+1 ]
open3d()
rgl.surface(x,y,z,color=col)

非常感谢 this帖子中的@ gsk3和@nullglob对他们的帮助。希望这篇文章对其他人有帮助!

最佳答案

修改以上代码以给出答案。请注意,地形应该是与高程矩阵格式相同的矩阵。我在函数调用中添加了,color参数,因此它实际上使用了您创建的颜色矩阵。

library(rgl)

# Read the z (i.e. elevation) dimension from file
z1 = matrix(scan("myfile.txt"),nrow=256, ncol=256, byrow=TRUE)
#create / open x y (i.e. easting and northing coordinates) dimensions
y=8*(1:ncol(z)) # Each point is 8 m^2
x=8*(1:nrow(z))

# Read the terrain types from a file
trn = matrix(scan("terrain.txt"),nrow=256, ncol=256, byrow=TRUE)

# See http://stackoverflow.com/questions/1896419/plotting-a-3d-surface-plot-with-contour-map-overlay-using-r for details of code below
trnlim <- range(trn)
trnlen <- trnlim[2] - trnlim[1] + 1
colorlut <- terrain.colors(trnlen,alpha=0) # height color lookup table
col <- colorlut[ trn-trnlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x,y,z,color=col)

关于r - 在R中的3D表面 map 上覆盖 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901238/

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