Наложение карты поверх карты трехмерной поверхности в r

Я создал 3D-карту с помощью rgl.surface (), в основном следуя ответу Шейна в это сообщение. Используя мои собственные данные, я получил эту карту

enter image description here

Поверх этой карты поверхности я хотел бы добавить карту плотности растительности, чтобы получить что-то вроде этого (получено с помощью программного обеспечения Surfer):

enter image description here

Возможно ли сделать это с помощью rgl или, если на то пошло, любого другого пакета в r, или это единственное решение, имеющее две карты, как в ответе Шейна?

Спасибо.

Изменить:

По запросу @ 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. Надеюсь, это проясняет ситуацию ...?

Edit 2, final version

Это карта, которую я создал с помощью R. У меня еще нет легенды, но я кое-что сделать на более позднем этапе.

enter image description here

Окончательный код для этого -

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 в этом сообщении за их помощь. Надеюсь, этот пост поможет многим другим!

23
задан Community 23 May 2017 в 12:25
поделиться