• R绘图 第三篇:布局(gridExtra)


    在绘图时,有时候会遇到这样一种情景,客户想把多个代表不同KPI的图形分布到同一个画布(Page)上,而且每一个图形都是单独绘制的。对于这种需求,可以使用gridExtra包来实现,gridExtra包能把图形逐个地添加到画布中,并按照业务的需求,把图形摆放到合适的位置上去。在布局完成之后,把图形绘制出来。也就是说,gridExtra用于把几张图拼成一组图,可以把ggplot2绘制的多张图形组合到一个大图中。通常情况下,gridExtra包常用于控制图形的复杂布局和绘制文本表,本文简单介绍gridExtra包的布局功能。

    一,友好函数

    gridExtra提供用于布局的友好函数:

    arrangeGrob(..., grobs = list(...), layout_matrix, vp = NULL,
    name = "arrange", as.table = TRUE, respect = FALSE, clip = "off",
    nrow = NULL, ncol = NULL, widths = NULL, heights = NULL, top = NULL,
    bottom = NULL, left = NULL, right = NULL, padding = unit(0.5, "line"))
    
    grid.arrange(..., newpage = TRUE)

    这两个函数的区别是:arrangeGrob()返回未绘制的grob,而grid.arrange()函数在当前的设备上绘图图形。

    参数注释:

    • ...:grobs、ggplot、lattice等grob(图形对象)
    • grobs:对象对象的list
    • layout_matrix:表示布局的矩阵

    gridExtra是grid包的友好版本,在grid包中,grob是一个可编辑的绘图对象,grob是graphical object两个单词的前两个字符的组合。常用于表示ggplot对象,lattice等高级图形系统创建图形对象。

    二,gridExtra布局的基本用法

    grid.arrange()函数,不仅能够控制个数已知的图形布局,还能对控制未知个数的图形布局,功能十分强大。

    1,控制多个grob的布局

    把ggplot2和lattice绘制的图形对象,分两列,并排显示:

    library(gridExtra)
    library(ggplot2)
    library(lattice)
    
    p <- qplot(1,1)
    p2 <- xyplot(1~1)   ##lattice包
    
    grid.arrange(p,p2,ncol = 2)

    2,控制grob列表的布局

    把绘图对象添加到列表中,并把该列表传递给grid.arrange()函数的grobs参数:

    library(gridExtra)
    library(ggplot2)
    library(lattice)
    
    gs <- list(NULL)
    gs[[1]] <- qplot(1,1)
    gs[[2]] <- xyplot(1~1)   ##lattice包
    
    grid.arrange(grobs=gs,ncol = 2)

    3,使用矩阵设置复杂布局

    各个图形对象排放的位置,可以通过布局矩阵(layout_matrix)来控制:

    lay <- rbind(c(1,1,1,2,3),
                 c(1,1,1,4,5),
                 c(6,7,8,9,9))
    
    grid.arrange(grobs = gs,layout_matrix = lay)

    三,在图形内部绘图

    ggplot2包中有一个用于创建grob对象的函数,参数x是一个ggplot对象:

    ggplotGrob(x)

    我们可以通过添加注释(annotate)的方式,向一个图形内部添加一个图形:

    annotation_custom(grob, xmin = -Inf, xmax = Inf, ymin = -Inf,  ymax = Inf)

    例如:向大图形中添加一个小图形:

    library(gridExtra)
    library(ggplot2)
    
    g <- ggplotGrob(qplot(1, 1) +
          theme(plot.background = element_rect(colour = "black")))
    qplot(1:10, 1:10) +
      annotation_custom(
        grob = g,
        xmin = 1, xmax = 5, ymin = 5, ymax = 10
      ) 

    参考文档:

    Package gridExtra

    Laying out multiple plots on a page

  • 相关阅读:
    百度Tera数据库介绍——类似cassandra,levelDB
    Cassandra——类似levelDB的基于p2p架构的分布式NOSQL数据库
    Greenplum——升级的分布式PostgresSQL
    Neo4j图数据库简介和底层原理
    445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
    22. Generate Parentheses——本质:树,DFS求解可能的path
    LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新
    es根据磁盘使用情况来决定是否分配shard
    ES mlockall作用——preventing that memory from being paged to the swap area
    我相信我会反击!围绕艰苦的开局迫使程序员初尝体验
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5042002.html
Copyright © 2020-2023  润新知