代码之家  ›  专栏  ›  技术社区  ›  jbaums

优雅地组合连续和因子光栅

  •  3
  • jbaums  · 技术社区  · 6 年前

    当绘制连续光栅和因子光栅的混合时 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))
    

    enter image description here

    是否有方法修改网格图形参数(例如,布局宽度/高度?)为了实现大小一致的绘图,使其看起来更像绘制光栅堆栈时使用的布局?

    或者,是否有一种组合这些光栅的替代方法,可以缩放到具有多列和多行的布局(其他绘图框架很好,但基本绘图不支持因子光栅。)

    1 回复  |  直到 6 年前
        1
  •  1
  •   shadow    6 年前

    你可以使用 ?c.trellis 功能来自 latticeExtra 包裹。

    library(latticeExtra)
    c(p1, p2, layout = c(1, 2), merge.legends = TRUE)
    

    但是,在您的情况下,图例稍微重叠如果绘图顺序不相关,可以使用

    c(p2, p1, layout = c(1, 2), merge.legends = TRUE)
    

    或者,您可以在第一个绘图中添加一些空间,如下所示。

    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)