Построить растр с дискретными цветами с помощью 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 Вы можете найти полезным этот другой ответ.

Другие вопросы по тегам