7 votos

Trazado de una pila raster con ggplot2

Mi objetivo es trazar un rasterstack como una sola imagen usando ggplot2. En primer lugar, aplico ggplot en un raster de una sola capa utilizando el siguiente código:

#Load packages
library(raster)
library(ggplot2)

#Create a random raster layer
set.seed(11)
r <- raster(nrows = 10, ncols = 10, res = 30, xmn = 267195, xmx = 267375, ymn = 4016985, ymx = 4017135)
r <- setValues(r, runif(ncell(r), min = -10000, max = 10000))
crs(r) <- "+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
plot(r) #Produce simple plot

rdf <- as.data.frame(r, xy=TRUE) #Convert raster to data.frame
names(rdf)[3] <- 'magnitude' #Name value column
head(rdf)

Ahora aplico gglpot()

ggplot(data = rdf)+
  geom_raster(mapping=aes(x=x, y=y, fill=magnitude))+
  scale_fill_gradientn(colours= rev(terrain.colors(10)), name='Magnitude')

Se imprime correctamente. Ahora creo una pila de trama con 10 capas y llamo a esto ndvi .

rr <- lapply(1:10, function(i) setValues(r, runif(ncell(r), min = -10000, max = 10000)))
ndvi <- stack(rr)
crs(ndvi) <- "+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
plot(ndvi)

¿Cómo podría trazar esta pila utilizando ggplot2 ? ¿Creo un data.frame pero entonces cómo suministro el argumento fill en aes() et facet_wrap() ?

10voto

Liman Puntos 170

Puede utilizar scale_fill_gradientn para especificar el relleno, y facet_wrap debería elegir los colores a partir de ahí:

  1. Si tiene rasterVis instalado, puede utilizar gplot para crear el ggplot objeto

    library(rasterVis) gplot(ndvi) + geom_tile(aes(fill = value)) + facet_wrap(~ variable) + scale_fill_gradientn(colours = rev(terrain.colors(225))) + coord_equal()

  2. De lo contrario, puede construir los datos usted mismo, que es básicamente lo que gplot La función

    coords <- xyFromCell(ndvi, seq_len(ncell(ndvi))) ndvi <- stack(as.data.frame(getValues(ndvi))) names(ndvi) <- c('value', 'variable')

    ndvi <- cbind(coords, ndvi) ggplot(ndvi) + geom_tile(aes(x, y, fill = value)) + facet_wrap(~ variable) + scale_fill_gradientn(colours = rev(terrain.colors(225))) + coord_equal()

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X