我使用 rgl.surface() 创建了一个 3d 地图,主要遵循 Shane 在这篇文章中的回答。使用我自己的数据,我得到了这张地图
在这张地表图之上,我想添加一张植被密度图,以便获得类似这样的东西(使用软件 Surfer 获得):
是否可以使用 rgl 来做到这一点,或者就此而言,r 中的任何其他包,或者是像 Shane 的答案那样拥有两张地图的唯一解决方案?
谢谢你。
编辑:
按照@gsk3 的要求,这里是这张地图的代码:
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 制作的地图。我还没有上面的图例,但这是我稍后会做的事情。
最终代码是
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)
非常感谢本文中的 @gsk3 和 @nullglob提供的帮助。希望这篇文章能帮助更多人!