He creado un mapa en 3D usando rgl.surface(), principalmente siguiendo la respuesta de Shane en this publicación. Usando mis propios datos, consigo este mapaSuperponer un mapa en la parte superior de un mapa de superficie 3D en r
En la parte superior de este mapa de la superficie, me gustaría añadir un mapa de densidad de la vegetación de tal manera que puedo obtener algo como esto (obtenido con el Surfer software):
¿es posible hacer esto con RGL, o para el caso cualquier otro paquete en I o es la única solución para tener dos mapas como en la respuesta de Shane?
Gracias.
Editar:
Siguiendo @ petición de GSK3, aquí es el código de 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 enviar el código de elevación debido a que hay 65.536 (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í sucesivamente. Lo mismo para el mapa de densidad de vegetación, que es exactamente el mismo formato y para el que tengo un valor único para cada punto x * y. Espero que esto aclare un poco ...?
Editar 2, versión final
Este es el mapa que he producido con R. No tengo la leyenda en él todavía, pero esto es algo que voy a hacer en una etapa posterior.
El código final de 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 puesto por su ayuda. Espero que esta publicación ayude a muchos otros!
Pregunta interesante pero difícil de responder sin más información. Por favor publique su código y si puede su mapa en alguna parte, o al menos descríbalo. Una posibilidad sería poner la fracción de vegetación como un mapa de color, que estoy bastante seguro de que 'rgl.surface()' apoyaría ... Sin embargo, es difícil decirlo sin más información. –
Para obtener información, no sé cómo poner la fracción de vegetación en un mapa de color como lo sugiere @ gsk3, así que sería genial si pudiera obtener un ejemplo de cómo hacerlo. Gracias. – SnowFrog
Simplemente cambie todas las líneas de color con las que está trabajando para trabajar con la matriz de terreno en lugar de la matriz z .... –