R语言进阶之图形的合并
时间:2022-07-22
本文章向大家介绍R语言进阶之图形的合并,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
为了节省版面,我们通常会将多张图片合成一张图,在R语言中我们可以使用par( )或者layout( )函数来轻松实现这个功能。
1. 函数par( )的使用
在使用函数par( )时, 你需要添加参数mfrow=c(n, m) 去创建一个n行 x m列 的画布,画布中的每一格可以放一张图片,此时图片是按照行排列的。如果你想按照列排列,则需要改用参数mfcol=c(n, m)。
# 创建一个2行2列的画布
# 使用mtcars数据集作为示例
attach(mtcars) # 固定数据集
par(mfrow=c(2,2)) # 2行2列的画布,按行排列
plot(wt,mpg, main="Scatterplot of wt vs.mpg") # 绘制变量wt和 mpg之间的散点图
plot(wt,disp, main="Scatterplot of wt vsdisp") # 绘制变量wt和disp之间的散点图
hist(wt, main="Histogram of wt") # 绘制变量wt的直方图
boxplot(wt, main="Boxplot of wt") # 绘制变量wt的箱线图
# 创建3行1列的画布
attach(mtcars) # 固定数据集
par(mfrow=c(3,1)) # 3行1列画布,按行排列
hist(wt) # 绘制变量wt的直方图
hist(mpg) # 绘制变量mpg的直方图
hist(disp) # 绘制变量disp的直方图
2. 函数layout( )的使用
使用函数layout(mat)合并图片时需要注意其参数mat是一个矩阵,主要是用于指定单个图片的位置:
#画布第一行包含一张图片,而第二行包含两张图片
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
另外,我们可以通过参数widths= 和 heights= 来更精准地控制每张图片的尺寸,其中widths= 代表的是每一列的宽度,heights= 代表的是每一行的高度:
# 画布第一行包含一张图片,而第二行包含两张图片
# 第一行的高度是第二行的1/3
# 第二列的宽度是第一列的1/4
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE), widths=c(3,1),heights=c(1,2))
hist(wt)
hist(mpg)
hist(disp)
3. 图片高级合并
在接下来的例子里,我们将学会如何将两张箱线图添加到散点图上:
# 给散点图添加上箱线图
par(fig=c(0,0.8,0,0.8),new=TRUE)
plot(mtcars$wt, mtcars$mpg, xlab="CarWeight",
ylab="Miles Per Gallon")
par(fig=c(0,0.8,0.55,1), new=TRUE)
boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE)
par(fig=c(0.65,1,0,0.8),new=TRUE)
boxplot(mtcars$mpg, axes=FALSE)
mtext("Enhanced Scatterplot", side=3,outer=TRUE, line=-3)
为了明白上述绘图原理,我们可以将整个画布理解成一个从左下角坐标点(0,0)到右上角坐标点(1,1)的平面坐标系,函数par( )里的参数fig=代表的就是图片左下角和右上角的坐标。
以第1个par( )函数的fig= c(0,0.8,0,0.8)为例,它实际上是指该图的横坐标从0到0.8,纵坐标也是从0到0.8,而第2个fig=c(0,0.8,0.55,1)则是指箱线图的横坐标从0到0.8,纵坐标从0.55到1,也即在上方的那个箱线图。
关于图形的合并就讲到这里,在后续的内容中我会简单和大家介绍一下如何使用“cowplot”包来对ggplot的对象进行合并,敬请期待!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 网络原理(二)——应用层
- 13年毕业,用两年时间从外包走进互联网大厂!
- 网络原理(三)——一文了解传输层UDP/TCP协议
- Spring Cloud Gateway结合注册中心使用路由失败?那就自己定制路由功能呗
- 动态内存管理
- list类
- 一文了解STL容器deque类
- 如何让SpringMVC框架使用我们封装的JsonUtils实现消息的序列化和反序列化
- 一文了解stack和queue类的实现
- 继承
- 什么是多态?如何实现?只看这一篇就够了
- 【DB笔试面试865】序列cache值过小导致CPU利用率过高
- 二叉树由浅至深(上)
- map和set的概念及使用
- AVL树和红黑树(map和set的底层实现)