R实战 第七篇:网格(grid)
在绘图时,有时候会遇到这样一种情景,客户想把多个代表不同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 =
)

参考文档:
Laying out multiple plots on a page
R实战 第七篇:网格(grid)的更多相关文章
- R实战 第七篇:绘图文本表
文本表是显示数据的重要图形,一个文本表按照区域划分为:列标题,行标题,数据区,美学特征有:前景样式.背景央视.字体.网格线等. 一,使用ggtexttable绘图文本表 载入ggpubr包,可以使用g ...
- R实战 第三篇:数据处理(基础)
数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...
- R实战 第五篇:绘图(ggplot2)
ggplot2包实现了基于语法的.连贯一致的创建图形的系统,由于ggplot2是基于语法创建图形的,这意味着,它由多个小组件构成,通过底层组件可以构造前所未有的图形.ggplot2可以把绘图拆分成多个 ...
- R实战 第三篇:数据处理
在实际分析数据之前,必须对数据进行清理和转化,使数据符合相应的格式,提高数据的质量.数据处理通常包括增加新的变量.处理缺失值.类型转换.数据排序.数据集的合并和获取子集等. 一,增加新的变量 通常需要 ...
- R绘图 第七篇:绘制条形图(ggplot2)
使用geom_bar()函数绘制条形图,条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_ba ...
- R实战 第十一篇:处理缺失值
在真实的世界中,缺失数据是经常出现的,并可能对分析的结果造成影响.在R中,经常使用VIM(Visualization and Imputation of Missing values)包来对缺失值进行 ...
- R实战 第八篇:重塑数据(reshape2)
数据重塑通常使用reshape2包,reshape2包用于实现对宽数据及长数据之间的相互转换,由于reshape2包不在R的默认安装包列表中,在第一次使用之前,需要安装和引用: install.pac ...
- R实战 第六篇:数据变换(aggregate+dplyr)
数据分析的工作,80%的时间耗费在处理数据上,而数据处理的主要过程可以分为:分离-操作-结合(Split-Apply-Combine),也就是说,首先,把数据根据特定的字段分组,每个分组都是独立的:然 ...
- R实战 第十篇:列联表和频数表
列联表是观测数据按两个或更多属性(定性变量)分类时所列出的频数分布表,它是由两个以上的变量进行交叉分类的频数分布表.交互分类的目的是将两变量分组,然后比较各组的分布状况,以寻找变量间的关系. 按两个变 ...
随机推荐
- JPA(三)之实体关系一对多(多对一)
1.背景介绍: 对于购买商品时,订单信息(Order)和订单商品信息(OrderItem)的关系就是一对多的关系. 2.实体bean: Order.java代码 ? 1 2 3 4 5 6 7 ...
- MVPHelper更新日志 --- 新增常规分包模式
MVPHelper是一款可以自动生成MVP接口以及实现类的android studio插件,彻底解放双手! MVPHelper更新版本啦. 由于之前只支持contract模式,不是很符合大众口味 所以 ...
- Win8.1开启Hyper-V并设置虚拟机联网
虚拟机用惯了VM,听说win8自带的hype-v不错比原来有了较大的改进,特地来试试. win8开启hype-v的方式如下 安装完重启下就可以了. 接着说联网,Hype-v的设置个人感觉稍微比VM麻烦 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m ...
- Docker教程:使用docker配置python开发环境
http://blog.csdn.net/pipisorry/article/details/50808034 Docker的安装和配置 [Docker教程:docker的安装] [Docker教程: ...
- [Python]django使用多进程连接msyql错误
问题 mysql 查询出现错误 error: (2014, "Commands out of sync; you can't run this command now") 查询 m ...
- USB OTG原理+ ID 检测原理
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...
- 分析比较KafkaWordCount及DierctKafkaWordCount
参考spark官方文档,Spark Streaming + Kafka Integration Guide,其中提到Spark Streaming如何从Kafka中接收数据.主要有两种方法,一种是使用 ...
- Thinkpad W520 + Ubuntu 12.04LTS, 13.10, 14.04LTS安装Nvidia显卡驱动设置
Thinkpad W520 + Ubuntu 12.04LTS, 13.10, 14.04LTS安装Nvidia显卡驱动设置 http://henzhai.com/tech/2012/07/w520- ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(五)
上一篇我们建立了机器人物理对象,下面我们来看看对应的逻辑代码. 进入Xcode,新建Robot和Arm类,分别继承于CCNode和CCSprite类.代码全部留空,后面再实现. 我们再看一下这个机器人 ...