使用ggplot绘制栅格因子值

时间:2012-03-30 09:39:21

标签: r ggplot2 raster

我在使用ggplot2绘制具有因子值的栅格时遇到问题。

library(ggplot2)
library(raster)

首先,加载栅格数据

f <- system.file("external/test.grd", package="raster")
r <- raster(f)

提取坐标和值

val <- getValues(r)
xy <- as.data.frame(xyFromCell(r,1:ncell(r)))
xy <- cbind(xy,val)

使用geom_raster()绘制网格。一切正常。

ggplot(xy, aes(x=x, y=y, fill=val)) + geom_raster() + coord_equal()

我没有连续的光栅,但是没有分类。重新格式化光栅:

r <- reclass(r, c(0,500,1, 500,2000,2))

val <- getValues(r)
xy <- as.data.frame(xyFromCell(r,1:ncell(r)))
xy <- cbind(xy,val)

绘制分类栅格。也行,但传说是连续的

ggplot(na.omit(xy), aes(x=x, y=y, fill=val)) + geom_raster() + coord_equal()

如果我将值绘制为因子,则地图会出错

ggplot(na.omit(xy), aes(x=x, y=y, fill=factor(val))) + geom_raster() + coord_equal()

1 个答案:

答案 0 :(得分:2)

使用R版本2.15.1,ggplot2_0.9.2.1和raster_2.0-12绘制重新分类的图表适用于我。如果适用,请尝试更新R,包和依赖项。从稍微修改过的代码版本开始:

f <- system.file("external/test.grd", package="raster")
r <- raster(f)
r <- reclassify(r, c(0,500,1, 500,2000,2))
val <- getValues(r)
xy <- as.data.frame(xyFromCell(r,1:ncell(r)))
xy <- cbind(xy,val)
ggplot(na.omit(xy), aes(x=x, y=y, fill=val)) + geom_raster() + coord_equal()
p <- ggplot(na.omit(xy), aes(x=x, y=y, fill=factor(val))) + 
  geom_raster() + 
  coord_equal()
try(ggsave(plot=p,<some file>,height=8,width=8))

我得到: graham jeffries - reclassified raster

请注意,classify()已弃用,reclassify()是其替代品。