2013-11-28 3 views
0

У меня есть несколько растров, которые я хотел бы построить с помощью gplot в пакете rasterVis. Я только что открыл gplot (что фантастично и намного быстрее, чем делать data.frame (rasterToPoints (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([email protected]@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) 

Благодаря

ответ

2

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 вы можете найти полезную этого другого answer.

+0

Спасибо за советы. sampleRegular выглядит многообещающим, не знал об этом. Я также не связан с ggplot2, хотя мое знакомство с ним делает его привлекательным. – Dominik