Построить растр с дискретными цветами с помощью rasterVis
У меня есть несколько растров, которые я хотел бы построить с помощью gplot в пакете rasterVis. Я только что обнаружил gplot (который фантастичен и намного быстрее, чем data.frame(rasterToPoints(r))). Тем не менее, я не могу получить дискретное изображение для показа. Обычно, если r - растр, я бы сделал:
rdf=data.frame(rasterToPoints(r))
rdf$cuts=cut(rdf$value,breaks=seq(0,max(rdf$value),length.out=5))
ggplot(rdf)+geom_raster(aes(x,y,fill=cuts))
Но есть ли способ избежать вызова rasterToPoints? Это очень медленно с большими растрами. Я нашел, что мог сделать:
cuts=cut_interval(r@data@values,n=5)
но если вы установите заполнение для сокращений, оно отображает целочисленное представление факторов.
Вот некоторые воспроизводимые данные:
x=seq(-107,-106,.1)
y=seq(33,34,.1)
coords=expand.grid(x,y)
rdf=data.frame(coords,depth=runif(nrow(coords),0,2)))
names(rdf)=c('x','y','value')
r=rasterFromXYZ(rdf)
Спасибо
1 ответ
gplot
это очень простая оболочка вокруг ggplot
так что не ждите от этого слишком многого. Вместо этого вы можете использовать часть его кода для создания собственного решения. Главное здесь заключается в использовании sampleRegular
уменьшить количество отображаемых точек.
library(raster)
library(ggplot2)
x <- sampleRegular(r, size=5000, asRaster = TRUE)
dat <- as.data.frame(r, xy=TRUE)
dat$cuts <- cut(dat$value,
breaks=seq(0, max(dat$value), length.out=5))
ggplot(aes(x = x, y = y), data = dat) +
geom_raster(aes(x, y, fill=cuts))
Тем не менее, если вы открыты для заговора без ggplot2
Вы можете найти полезным этот другой ответ.