R海拾遗-图片拼接
时间:2022-07-25
本文章向大家介绍R海拾遗-图片拼接,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
R图片拼接
sunqi
2020/7/16
1. 概述
对于ggplot,不支持将多个图片拼接的操作,因此绝大多数的人使用ps或者ppt进行拼接图片,包括我,现在可以使用软件包来完成
安装包:patchwork
patchwork的作用是将不同的ggplot组合到同一个图形中。
2. 安装
# devtools::install_github("thomasp85/patchwork")
# 或者采用镜像
if(F){
install.packages("patchwork")
}
3. 正文
library(patchwork)
# 开始
library(ggplot2)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
ggtitle('Plot 1')
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('Plot 2')
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
p4 <- ggplot(mtcars) +
geom_bar(aes(gear)) +
facet_wrap(~cyl) +
ggtitle('Plot 4')
## 使用加号拼接图片
p1 + p2
## 拼接图片后,作为一个新的绘图单元,可以添加ggplot2的元素
p1 + p2 + labs(subtitle = 'This will appear in the last plot')
# 默认情况下,patchwork将尝试保持网格是正方形的,并按行顺序填写
p1 + p2 + p3 + p4
## 但是同时也支持页面布局调整
p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE)
## 使用/布局
p1 / p2
## 更复杂的布局
p1 | (p2 / p3)
## 对图片添加注释
(p1 | (p2 / p3)) +
plot_annotation(title = 'The surprising story about mtcars')
## 自动添加图的序号
p1 + p2 + p3 +
plot_annotation(tag_levels = 'A')
## 4.额外的包ggpubr
同时在浏览patchwork包中,其实很多包能够完成这些操作,比较简单的是ggpubr
library(ggpubr)
# 基础拼接
ggarrange(p1,p2,p3,p4,ncol=2,nrow=2,labels=c("A","B","C","D"))
##嵌套拼接
ggarrange(p2,ggarrange(p1,p3,ncol=2,labels=c("B","C")),nrow=2,labels="A")
5.结束语
对于patchwork来说,这只是一个简单的开始,当然里面还有很多的参数可以修改,达到自己修图的目的,对于ggpubr来说拼图只是它的一个功能,其他绘图功能也比较出众,后面想起来就更一下。另外关于meta分析,想写一个专题,但是感觉我又用不到,就说这么多吧。
love&peace
- Docker Swarm mode 详解
- Docker 私有仓库安装配置 (Registry v2)
- CoreOS 安装服务本地服务器 Docker 化
- 硬盘安装 CoreOS 三节点集群
- 从javascript脚本混淆说起
- CoreOS etcd3 集群实践
- Spring MVC学习教程之流程表单提交,3步实现这个功能
- PXE 模式启动 CoreOS
- iPXE 模式启动 CoreOS(简单、推荐使用)
- CoreOS 已废弃组件
- Docker Compose version 3 使用详解
- Virtualbox 安装 Alpine Linux
- LinuxKit 使用
- Docker 实践遇到的问题(持续更新)
- 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 数组属性和方法
- 利用C#编写的绕过360安全卫士添加系统用户
- 小生归一(七)sprintf字符串格式化漏洞
- FastAdmin后台GetShell
- scRNA-seq Clustering
- Dizzy Blog
- LeetCode 392. 判断子序列
- LeetCode 5473. 灯泡开关 IV
- LeetCode 5472. 重新排列字符串
- BootStrap 导航栏实现下滑消失,上滑出现
- 七日Python之路--第六天
- 超性感的React Hooks(六)自定义hooks的思维方式
- 七日Python之路--第五天(之找点乐子)
- 超性感的React Hooks(七)useReducer
- 七日Python之路--第四天(之Django官方文档)
- 六、setTimeout与循环闭包经典面试题详解