5

我想使用栅格属性表信息来创建栅格的图例,例如栅格1,并仅显示栅格中显示的类的图例。我建立了一个例子来解释我想要得到什么。

1/ 构建栅格

r <- raster(ncol=10, nrow=10)
values(r) <-sample(1:3,ncell(r),replace=T)

2/ 添加栅格属性表

r <- ratify(r) # build the Raster Attibute table
rat <- levels(r)[[1]]#get the values of the unique cell frot the attribute table
rat$legend <- c('Class A', 'Class B', 'Class C')
levels(r) <- rat

3/ 绘制栅格1

my_col=c('blue','red','green')
plot(r,col=my_col,legend=F,box=F,axes=F)
legend(x='top', legend =rat$legend,fill = my_col)

我想用legend =rat$legend链接到ratser属性表的栅格属性替换参数。我尝试了不同的组合,levels()例如,c(levels(r)[[1]][1])但我生成了一个列表,而不是在 legend 参数中不可用的字符。

4/ 将栅格裁剪并绘制到只有 2 个类别的部分(这里是右下方范围的 4 个像素)2

rcrop<-crop(r,extent(r,9,10,9,10))
plot(rcrop,col=my_col,legend=F,box=F,axes=F)

对于第二个图,我想只自动显示光栅2上显示的类的图例。

带有图例的栅格

带有图例的裁剪栅格


这是 Roman 4提出的解决方案。 Roman提出的解决方案

4

3 回答 3

2

如果您愿意使用lattice图形,levelplot中定义的方法能够显示带有基于 RAT 的图例的分类数据:rasterVis

library(raster)
library(rasterVis)

r <- raster(ncol=10, nrow=10)
values(r) <- rep(1:4, each=25)

r <- ratify(r) 
rat <- levels(r)[[1]]
rat$legend <- c('Class A', 'Class B', 'Class C', 'Class D')
levels(r) <- rat

levelplot(r)

老鼠.png

此外,我 在 GitHub 上提供 的 开发版本中进行了一些更改, 以管理其 RAT 级别并非全部存在于数据中:Raster*

rcrop <- crop(r,extent(r,6,10,1,10))
levelplot(rcrop)

大鼠作物

rcrop <- crop(r,extent(r,1,5,1,10))
levelplot(rcrop)

大鼠作物2

于 2013-10-26T18:39:25.583 回答
1

也许查询rcrop栅格以找出裁剪栅格中的级别并将其传递给图例?

legend(x = 'top', legend = unique(getValues(rcrop)), fill = my_col)
于 2013-10-25T10:37:52.183 回答
1

谢谢。根据您的建议,我找到了解决方案:

plot(rcrop,col=my_col[unique(getValues(rcrop))],legend=F,box=F,axes=F)
legend_full<-data.frame(levels(rcrop))
legend(x='top', legend =as.character(unlist(legend_full[unique(getValues(rcrop)),2])),fill = my_col[unique(getValues(rcrop))])

它工作并允许独立于栅格中显示的值。

于 2013-10-25T12:55:48.707 回答