将sp.points键添加到levelplot colorkey

时间:2016-06-16 00:52:10

标签: r plot legend lattice levelplot

是否可以将sp.points图层的密钥添加到levelplot生成的颜色键中?

采用以下示例:

library(rasterVis)
library(latticeExtra)
library(sp)

r <- as.factor(raster(matrix(rbinom(100, 1, 0.5), 10)))
levels(r)[[1]] <- data.frame(ID=0:1, z=c('a', 'b'))
p <- SpatialPoints(matrix(runif(20), 10))

levelplot(r, margin=list(draw=FALSE), scales=list(draw=FALSE),
          col.regions=c('white', 'gray90')) +
  latticeExtra::layer(sp.points(p, pch=20, col=1))

enter image description here

我想在现有的颜色键下方为点添加一个键输入。

一个kludgy解决方案是为levelplot调用添加密钥,如下所示,调整xy值,直到它位于所需位置,但(1)找到正确的位置xy值是一种痛苦,需要交互,(2)右边的填充不会调整大小以容纳密钥,(3)字体大小不会自动缩放以与colorkey的。

k <- list(x = 1.02, y = 0.4, corner = c(0, 0), points=list(pch=20, col=1), 
          text=list('foo', cex=0.9))

levelplot(r, margin=list(draw=FALSE), scales=list(draw=FALSE),
          col.regions=c('white', 'gray90'), key=k) +
  latticeExtra::layer(sp.points(p, pch=20, col=1))

enter image description here

假设我需要坚持lattice图形,那么克服上面列出的问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

虽然它没有解决您提出的所有问题,但latticeExtra::mergedTrellisLegendGrob函数可能对您有用:

p1 <- levelplot(r, scales=list(draw=FALSE),
                col.regions=c('white', 'gray90'))

myPoints <- SpatialPoints(matrix(runif(20), 10))
p2 <- spplot(myPoints, pch=20)

## Merge graphics
p <- p1 + p2

## Merge legends
l1 <- p1$legend$right
l2 <- p2$legend$bottom
ll <- mergedTrellisLegendGrob(l1, l2)
p$legend$right$fun <- ll

p

mergedLegends