优雅地结合连续和因子栅格
Elegantly combining continuous and factor rasters
当使用 rasterVis::levelplot
使用 print(..., more=TRUE)
绘制连续栅格和因子栅格的混合时,面板的高度和宽度不一致。这似乎是由于色键(图例)和色键的刻度标签的宽度不同所致。
例如:
library(raster)
library(rasterVis)
r1 <- raster(matrix(runif(100), 10))
r2 <- as.factor(raster(matrix(rbinom(100, 1, 0.8), 10)))
levels(r2)[[1]]$name <- c('gray', 'lightblue')
p1 <- levelplot(r1, margin=FALSE, scales=list(draw=FALSE),
at=seq(0, 1, length.out=100))
p2 <- levelplot(r2, scales=list(draw=FALSE),
col.regions=c('gray90', 'lightblue'))
print(p1, split=c(1, 1, 1, 2), more=TRUE)
print(p2, split=c(1, 2, 1, 2))
有没有办法修改网格图形参数(例如,布局 widths/heights?)以实现大小一致的绘图,使其看起来更像绘制 RasterStack 时使用的布局?
或者是否有一种组合这些栅格的替代方法,可以缩放到具有多列和多行的布局? (其他绘图框架很好,但基本图不支持因子栅格。)
您可以使用 latticeExtra
包中的 ?c.trellis
函数。
library(latticeExtra)
c(p1, p2, layout = c(1, 2), merge.legends = TRUE)
但是,在您的例子中,图例略有重叠。如果图的顺序不相关,您可以改用
c(p2, p1, layout = c(1, 2), merge.legends = TRUE)
或者您可以添加一些 space 到您的第一个图,如下所示。
p1 <- levelplot(r1, margin=FALSE, scales=list(draw=FALSE),
at=seq(0, 1, length.out=100),
par.settings = rasterTheme(layout.widths = list(key.right = 1.5)))
c(p1, p2, layout = c(1, 2), merge.legends = TRUE)
当使用 rasterVis::levelplot
使用 print(..., more=TRUE)
绘制连续栅格和因子栅格的混合时,面板的高度和宽度不一致。这似乎是由于色键(图例)和色键的刻度标签的宽度不同所致。
例如:
library(raster)
library(rasterVis)
r1 <- raster(matrix(runif(100), 10))
r2 <- as.factor(raster(matrix(rbinom(100, 1, 0.8), 10)))
levels(r2)[[1]]$name <- c('gray', 'lightblue')
p1 <- levelplot(r1, margin=FALSE, scales=list(draw=FALSE),
at=seq(0, 1, length.out=100))
p2 <- levelplot(r2, scales=list(draw=FALSE),
col.regions=c('gray90', 'lightblue'))
print(p1, split=c(1, 1, 1, 2), more=TRUE)
print(p2, split=c(1, 2, 1, 2))
有没有办法修改网格图形参数(例如,布局 widths/heights?)以实现大小一致的绘图,使其看起来更像绘制 RasterStack 时使用的布局?
或者是否有一种组合这些栅格的替代方法,可以缩放到具有多列和多行的布局? (其他绘图框架很好,但基本图不支持因子栅格。)
您可以使用 latticeExtra
包中的 ?c.trellis
函数。
library(latticeExtra)
c(p1, p2, layout = c(1, 2), merge.legends = TRUE)
但是,在您的例子中,图例略有重叠。如果图的顺序不相关,您可以改用
c(p2, p1, layout = c(1, 2), merge.legends = TRUE)
或者您可以添加一些 space 到您的第一个图,如下所示。
p1 <- levelplot(r1, margin=FALSE, scales=list(draw=FALSE),
at=seq(0, 1, length.out=100),
par.settings = rasterTheme(layout.widths = list(key.right = 1.5)))
c(p1, p2, layout = c(1, 2), merge.legends = TRUE)