ggplot2로 래스터 스택 플로팅
Oct 25 2020
내 목표는 ggplot2를 사용하여 래스터 스택을 단일 이미지로 플롯하는 것입니다. 먼저 ggplot다음 코드를 사용하여 단일 레이어 래스터에 적용 합니다.
#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)
이제 신청합니다 gglpot()
ggplot(data = rdf)+
geom_raster(mapping=aes(x=x, y=y, fill=magnitude))+
scale_fill_gradientn(colours= rev(terrain.colors(10)), name='Magnitude')
성공적으로 인쇄됩니다. 이제 10 개의 레이어가있는 래스터 스택을 만들고 이것을 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)
이 스택을 ggplot2어떻게 그릴 수 있습니까? 나는 data.frame을 만들려면 어떻게해야합니까하지만 어떻게에서 채우기 인수를 제공 할 aes()및 facet_wrap()?
답변
3 Liman Oct 26 2020 at 02:20
scale_fill_gradientn채우기를 지정하는 데 사용할 수 있으며 facet_wrap여기에서 색상을 선택해야합니다.
rasterVis패키지가 설치되어 있으면gplot함수를 사용하여ggplot개체 를 만들 수 있습니다.
library(rasterVis)
gplot(ndvi) +
geom_tile(aes(fill = value)) +
facet_wrap(~ variable) +
scale_fill_gradientn(colours = rev(terrain.colors(225))) +
coord_equal()
- 그렇지 않으면 데이터를 직접 구성 할 수 있습니다. 기본적으로
gplot함수가 수행하는 작업입니다.
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()