在绘图时,有时候会遇到这样一种情景,客户想把多个代表不同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(,)
p2 <- xyplot(~) ##lattice包 grid.arrange(p,p2,ncol = )

2,控制grob列表的布局

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

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

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

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

lay <- rbind(c(,,,,),
c(,,,,),
c(,,,,)) 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(, ) +
theme(plot.background = element_rect(colour = "black")))
qplot(:, :) +
annotation_custom(
grob = g,
xmin = , xmax = , ymin = , ymax =
)

参考文档:

Package gridExtra

Laying out multiple plots on a page

R实战 第七篇:网格(grid)的更多相关文章

  1. R实战 第七篇:绘图文本表

    文本表是显示数据的重要图形,一个文本表按照区域划分为:列标题,行标题,数据区,美学特征有:前景样式.背景央视.字体.网格线等. 一,使用ggtexttable绘图文本表 载入ggpubr包,可以使用g ...

  2. R实战 第三篇:数据处理(基础)

    数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...

  3. R实战 第五篇:绘图(ggplot2)

    ggplot2包实现了基于语法的.连贯一致的创建图形的系统,由于ggplot2是基于语法创建图形的,这意味着,它由多个小组件构成,通过底层组件可以构造前所未有的图形.ggplot2可以把绘图拆分成多个 ...

  4. R实战 第三篇:数据处理

    在实际分析数据之前,必须对数据进行清理和转化,使数据符合相应的格式,提高数据的质量.数据处理通常包括增加新的变量.处理缺失值.类型转换.数据排序.数据集的合并和获取子集等. 一,增加新的变量 通常需要 ...

  5. R绘图 第七篇:绘制条形图(ggplot2)

    使用geom_bar()函数绘制条形图,条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_ba ...

  6. R实战 第十一篇:处理缺失值

    在真实的世界中,缺失数据是经常出现的,并可能对分析的结果造成影响.在R中,经常使用VIM(Visualization and Imputation of Missing values)包来对缺失值进行 ...

  7. R实战 第八篇:重塑数据(reshape2)

    数据重塑通常使用reshape2包,reshape2包用于实现对宽数据及长数据之间的相互转换,由于reshape2包不在R的默认安装包列表中,在第一次使用之前,需要安装和引用: install.pac ...

  8. R实战 第六篇:数据变换(aggregate+dplyr)

    数据分析的工作,80%的时间耗费在处理数据上,而数据处理的主要过程可以分为:分离-操作-结合(Split-Apply-Combine),也就是说,首先,把数据根据特定的字段分组,每个分组都是独立的:然 ...

  9. R实战 第十篇:列联表和频数表

    列联表是观测数据按两个或更多属性(定性变量)分类时所列出的频数分布表,它是由两个以上的变量进行交叉分类的频数分布表.交互分类的目的是将两变量分组,然后比较各组的分布状况,以寻找变量间的关系. 按两个变 ...

随机推荐

  1. Mpg123源代码详解

    Mpg123与libmad一样,支持mpeg1,2,2.5音频解码.目前来看mpg123比libmad支持了网络播放功能.而且libmad基本上开源社区在2005年左右,基本停止更新,mpg123至今 ...

  2. LOV里的值直接引用系统里定义的值集的值,且具有值集的安全性控制

    fnd_flex_server.check_value_security(p_security_check_mode => 'YH', p_flex_value_set_id => p_f ...

  3. 导航控制器&nbsp;UI_08(上)

    主要内容:UINavigationController 重要:属性传值(向后一个界面传值).代理传值(向前相邻的界面传值).单例传值(不相邻的界面向前传值) 1.UINavigationControl ...

  4. Material Design之RecyclerView的使用(一)

    Android 5.0开始就推荐使用Material Design这个设计语言,本文开始就逐一讲解Material Design中控件的使用.本章主要讲解RecyclerView,期中会带有ToolB ...

  5. 新手自定义view练习实例之(一) 泡泡弹窗

    转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50455412 本系列是为新手准备的自定义view练习项目(大牛请无视),相信在学习过程 ...

  6. linux的string操作(字符串截取,长度计算)

    按指定的字符串截取 1.第一种方法: ${varible##*string} 从左向右截取最后一个string后的字符串 ${varible#*string}从左向右截取第一个string后的字符串 ...

  7. AngularJS进阶(二十六)实现分页操作

    JS实现分页操作 前言 项目开发过程中,进行查询操作时有可能会检索出大量的满足条件的查询结果.在一页中显示全部查询结果会降低用户的体验感,故需要实现分页显示效果.受前面"JS实现时间选择插件 ...

  8. java--交通灯管理系统

    转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9944947 .交通灯管理系统的业务和需求分析 交通灯管理系统的项目需求: 模拟实现十字路口的交 ...

  9. Graph Cuts学习笔记2014.5.16----1

    进行了一段时间的论文学习后,现在下载了一些代码,准备从OpenCV跟matlab两个方面着手搭建自己的图像分割平台,计划耗时一个月左右的时间! 昨天去西工大,听了一场Graph Asia的报告,里面有 ...

  10. LeetCode之旅(20)-Power of Three

    题目: Given an integer, write a function to determine if it is a power of three. Follow up: Could you ...