varias superponer studio lineas hacer graficos graficas como r rgl

studio - superponer graficas en r



Superponer un mapa sobre un mapa de superficie 3d en r (1)

He creado un mapa en 3D usando rgl.surface (), principalmente siguiendo la respuesta de Shane en this publicación. Usando mis propios datos, obtengo este mapa.

En la parte superior de este mapa de superficie, me gustaría agregar un mapa de densidad de vegetación tal que obtenga algo como esto (obtenido con el software Surfer):

¿Es posible hacer esto con rgl, o para el caso cualquier otro paquete en r o es la única solución para tener dos mapas como en la respuesta de Shane?

Gracias.

Editar:

Siguiendo la solicitud de @gsk3, aquí está el código para este mapa:

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)

No puedo publicar el código de elevación porque hay 65536 (es decir, x * y = 256 * 256) puntos, pero es una matriz que se ve así.

[,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

y así. Lo mismo para el mapa de densidad de vegetación, que es exactamente el mismo formato y para el que tengo un solo valor para cada punto x * y. Espero que esto haga las cosas un poco más claras ...?

Edición 2, versión final.

Este es el mapa que he producido con R. Todavía no tengo la leyenda, pero es algo que haré en una etapa posterior.

El código final para esto es

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)

Muchas gracias a @gsk3 y @nullglob en this post por su ayuda. Espero que esta publicación ayude a muchos otros!


Modificado el código anterior para dar una respuesta. Tenga en cuenta que el terreno debe ser una matriz en el mismo formato que la matriz de elevación. Y agregué un argumento de ,color a tu llamada de función para que realmente use la matriz de color que creaste.

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://.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)