Ggplot2 ile bir raster yığını çizme
Oct 25 2020
Amacım, ggplot2 kullanarak bir rasterstack'i tek bir resim olarak çizmek. İlk olarak, ggplotaşağıdaki kodu kullanarak tek katmanlı bir raster üzerine başvuruyorum :
#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)
Şimdi başvuruyorum gglpot()
ggplot(data = rdf)+
geom_raster(mapping=aes(x=x, y=y, fill=magnitude))+
scale_fill_gradientn(colours= rev(terrain.colors(10)), name='Magnitude')
Başarıyla yazdırır. Şimdi 10 katmanlı bir raster yığını oluşturup buna diyorum 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)
Bu yığını kullanarak nasıl çizebilirim ggplot2? Bir data.frame oluşturmalı mıyım ama sonra aes()ve içinde doldurma bağımsız değişkenini nasıl sağlayabilirim facet_wrap()?
Yanıtlar
3 Liman Oct 26 2020 at 02:20
Dolguyu scale_fill_gradientnbelirtmek için kullanabilirsiniz ve facet_wraporadan renkleri seçmelisiniz:
- Yüklü
rasterVispaketiniz varsagplot,ggplotnesneyi oluşturmak için işlevi kullanabilirsiniz.
library(rasterVis)
gplot(ndvi) +
geom_tile(aes(fill = value)) +
facet_wrap(~ variable) +
scale_fill_gradientn(colours = rev(terrain.colors(225))) +
coord_equal()
- Aksi takdirde, verileri kendiniz oluşturabilirsiniz, temelde
gplotişlev ne yapar?
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()
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'