• 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

  • 相关阅读:
    【C#】Dictionary使用汇总
    【C#】ArrayList使用汇总
    【C#】List使用汇总
    【WPF】ComboBox汇总
    【WPF】TextBox汇总
    【VS】VS2008 在文件中按 Ctrl + F 查找,不弹出查找框
    【VS】调试异常:CLR无法从COM上下文 0x622b440转换为COM上下文 0x622b5b0
    【C#】反序列化时程序集名称不同导致错误
    scrollTop兼容
    iOS下的 Fixed + Input(时间日期选择、select 选择等等) 出现的问题
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5042002.html
Copyright © 2020-2023  润新知