双y轴如何合并图例_如何对图表批量组合、对齐、画中画、合并图例、自动化加标签。。。...

关于图表的组合排版,在之前的微信文章中介绍过很多常规的方法,比如《绘制复杂组合图表的独家秘笈分享》、《如何用Graphpad Prism绘制超复杂组合图?》、《如何用Origin完成图表排版?》等。可是,有小伙伴就问了,正如小项羽所言,“剑一人敌,不足学,学万人敌”,那么有没有批量自动化拼图的方法?既然是批处理,就免不了需要写脚本,这里推荐两个专职拼图的R包:cowplot和patchwork,二者在很多地方都很相似,下面我们就一起比较、学习下如何使用这两个R包实现图表的批量组合、嵌套、对齐、画中画、自动化加标签、图例合并等操作。
#先使用ggplot2绘制4个范例图表,数据为R自带的mtcars数据集;
library(ggplot2)
head(mtcars)

9e6ac7031e68dd90cde80594bc3544ec.png

p1 p1p2 "skyblue")
p2
p3   theme(axis.text.x = element_text(size = 10, angle = 60, vjust = 0.5))
p3
p4 "skyblue") + facet_wrap(~cyl)
p4
#载入patchwork包;library(patchwork)#载入cowplot包;library(cowplot)

整合多个图表 

patchwork:
#使用“+”操作符组合图表;p p

fe006b8afa2fef7a680d9549dfe65a06.png

#patch可以自动添加图表标签;p+plot_annotation(tag_levels = 'A',tag_suffix='.')#tag_levels:'a' 小写字母, 'A' 大写字母, '1' 数字, 'i' 小写罗马数字, 'I' 大写罗马数字;#tag_prefix和tag_suffix设置序号的前后缀字符 ;

20b3d1f64f70f8411c7fce6f180eddd1.png

cowplot:
#使用plot_grid()函数组合图表;plot_grid(p1, p2, p3, p4)

f12f8f60cca5a04e9aadca89bb04fe10.png

#cowplot也可自动添加编号标签;plot_grid(p1, p2, p3, p4,labels = "AUTO")#调整标签的字体大小(默认14)、样式、颜色等;plot_grid(p1, p2, p3, p4,labels = c('A.', 'B.','C.', 'D.'),label_size = 12,label_fontfamily = "serif",label_fontface = "plain",label_colour = "black")

fd386a9e1c1138000364662c6467a6b9.png

通过比较组合效果可以发现,默认情况下,二者会保持拼图结果为正方形;patchwork有自动对齐图形区域的功能,而cowplot的组合效果更紧凑。

指定排列顺序

patchwork:
#cowplot主要使用nrow 和 ncol两个参数确定排列方式,并“逐行”填充;plot_grid(p1, NULL, p2,p3, ncol = 2,align = "hv")

21f17e5f68bc20d757f63888ac146276.png

cowplot:
#cowplot主要使用nrow 和 ncol两个参数确定排列方式:plot_grid(p1, NULL, p2,p3,labels = "AUTO", ncol = 2)

41447130704234fc58df3440c3abec0a.png

设置拼图比例

patchwork:
#设置宽高比例;pp pp + plot_layout(widths = c(3, 1), heights = c(3,1))

877733bf1178dc298f19c88bd5966734.png

cowplot:

#设置宽高比例;类似的使用rel_widths 和 rel_heights 设置图表的相对大小;plot_grid(p2, p3, p1, NULL, rel_widths = c(1.5, 1),rel_heights=c(2,1))

0daefc45382061dbaa6441311c58c876.png

嵌套拼图

patchwork:patchwork提供了两个操作符来直接实现不同图表的嵌套拼接。
#|:将这些图横向排列,/:将图表竖向堆叠(竖排优先级高于横排);p1 | (p2 / p3)
(p2 | p3 )/ (p1 | plot_spacer())

c7b917e0fc5cefb423a34d8afb877ab9.png

cowplot:
#“手工”嵌套;bottom_row bottom_rowplot_grid(p1, bottom_row, ncol = 2)

db859c9fb0965513f7e8b900daf99956.png

指定对齐方式

patchwork:
#拼图时自动对齐;p1 + p2 + p3 + p4

b2aaee84e384020c973fa16266821f5f.png

#Tips:获取维度信息;p3_dims p1_aligned p3p1_aligned#注意p1_aligned无法和其他图表组合;
cowplot:
#使用plot_grid()函数的align参数使网格线和坐标轴对齐;#可组合使用:align = "vh"` 或 `align = "hv"plot_grid(p1, p3, ncol = 2, align = "h")#垂直对齐失败;plot_grid(p1, p3, nrow = 2, align = "v")#坐标轴范围不一致时,可以对齐坐标轴;#组合关系:"t" (top), "r" (right), "b" (bottom), and "l" (left);plot_grid(p1, p2, p3, p4, nrow = 2, align = "v", axis = "tlbr")

aba8a1715d2951edef86b798f9287fdf.png

合并图例

patchwork:
#如果图例颜色、样式不同,会同时保留;p1 + p2 + p3 + p4 +plot_layout(guides = 'collect')

9d52c42dca13404bcec5609ff98279f7.png

(p2 / p3 + plot_layout(guides = 'collect')) | p1
((p2 / p3 + plot_layout(guides = 'auto')) | p1) + plot_layout(guides = 'collect')

31aca1332d29dafd283a164a70c34db8.png

默认guides = 'auto',当guides = 'collect'时合并图例,当guides = 'keep'时强制将图例置于原图旁。cowplot:
#对于cowplot,需先绘制无图例的组合图;p3a "none")
plot2 plot2

#提取图例;
legend #将图例组合进来;
plot_grid(plot2, legend, rel_widths = c(3, 0.5))

ea319dd066784cca42ee30a65513989b.png

#同样的方法,可以将图例加到底部;legend_b "bottom"))
plot_grid(plot2, legend_b, nrow = 2,rel_heights = c(3, 0.5))

2ceb64216fdc355b1fcccde732bca987.png

画中画效果

patchwork:
#inset_element()指定相对位置插入图形;#align_to ='panel' (默认), 'plot', 'full';p1 + inset_element(p2, left = 0.6, bottom = 0.6, right = 1, top = 1,align_to = 'panel', ignore_tag = TRUE)+theme_cowplot(10)#这里使cowplot的theme_cowplot()主题,字体为10号;

9d30bc19c3065552403f32c7bd67eb20.png

cowplot:
#先应用主题;p2a #使用draw_plot()函数在指定的位置添加图形;ggdraw(p1) + draw_plot(p2a, x=0.58, y=0.58, width =0.4, height =0.4)

b736abdce10868f1f88271531d44e97f.png

#可以加上标签;ggdraw(p1 +theme_half_open(14)) + draw_plot(p2a, x=0.58, y=0.58, width =0.4, height =0.4) +draw_plot_label(c("A", ""),c(0, 0.45),c(1, 0.95),size = 15)

d09a2acd71c131f2945637296c0e7a3a.png

通过对这两个R包的拼图方法和效果比较,我可能更喜欢patchwork的一些,操作简单更容易上手,好啦,今天的内容就分享到这里啦~4edd4f77ab430d78510c264b5365309f.gif

实用科研工具推荐      
详实生信软件教程分享
前沿创新组学文章解读
独家生信视频教程发布

7010874acb3e1a8feb0ef723637bc745.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米5s的位置服务器,小米手机NFC在哪里?告诉你小米手机NFC位置(包括小米5/5s/6/MIX2/Note3)...

NFC功能的普及为智能手机锦上添花,闪付、充值交通卡、模拟门卡、模拟交通卡...NFC的功能越来越强大了,日常生活中需要用到的地方也越来越多了。可问题往往会在这个时候被发现,许多人在使用NFC的时候总是失败。比如说充值交通卡吧,…

微信转发的文件服务器留存吗,微信转发这种视频会感染病毒泄露隐私?网警的查证结果来了...

原标题:微信转发这种视频会感染病毒泄露隐私?网警的查证结果来了最近网上流传一条“紧急通知”,称微信上流传着一些必须转发后才能继续观看的视频,这些视频其实被内植病毒,一旦转发,机主隐私立马被泄露。真…

微软Connect教程系列--自动生成增删改查页面工具介绍(二)

本章课程描述了vs2015的三个特点,其中主要将描述在vs2015下面,使用命令自动生成增删改查界面,具体如下: 1、web.config文件不在存在,用config.json替代,以适应支撑vs的插件化。 即config.json可以在项目中不…

PI数据库的使用-PI System Management Tools

1、PI连接管理器 2、标记搜索 3、当前值 转载于:https://www.cnblogs.com/jumahe/p/4107790.html

一种用css实现图片在父框中等比缩放并垂直居中的办法

一个网页中往往会有很多图片&#xff0c;而网站的编辑上传图片时可能并不一定按照为父框设定的那个宽高来传&#xff0c;这样图片往往会将父框撑开或者被父框截断。一种比较好的解决的办法是这样的&#xff1a; HTML代码结构&#xff1a; <div class"dimg"><…

CLR VIA

标题 状态 内容 什么是CLR? 什么是托管模块&#xff1f; 托管模块由什么组成&#xff1f; 。net代码的执行过程 http://www.cnblogs.com/aaa6818162/p/4726581.html http://www.cnblogs.com/kingmoon/archive/2012/07/16/2594459.html 为了执行程序&#xff0c;首…

jQuery表格排序总成-tablesorter

一个、进口单证<script type"text/javascript" src"js/jquery.js"></script> <script type"text/javascript" src"js/jquery.tablesorter.js"></script> <!-- 引入下面样式则表头出现排序图标。同一时候…

5渲染判断_云渲染怎么收费,5大云渲染平台实测,您选对了吗?

3DMAX云渲染平台都怎么收费&#xff1f;5大云渲染平台测试后才知道差距这么大&#xff0c;您用对了吗&#xff1f;本次共计测试了3个镜头&#xff0c;为了让大家很直观地感受各个平台渲染时间和费用上的对比&#xff0c;我整理了个表格&#xff0c;供大家自行参考和判断。若有疑…

Android工程的编译过程

现在很多人想对Android工程的编译和打包进行自动化&#xff0c;比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解&#xff0c;至少要知道它的每一步都做了什么&#xff0c;需要什么环境和工具&#xff0c;输入和输出是什…

activiti 工作流设置并行审批_activity、jbpm5、snakerflow常用工作流审批流对比

# 审批流调研背景由于目前产品研发组支持的产品项目越来越多&#xff0c; 同时几乎每个项目都会有导出审批&#xff0c;流程流转等需求&#xff0c;本着提高开发效率和组件化的目的&#xff0c;调研和开发通用的工作流组件&#xff0c;为后面的项目和新的需求提供快速支持。主要…

Spring web应用最大的败笔

第一篇 介绍下IOC DI Spring主要是业务层框架&#xff0c;现在已经发展成为一个完整JavaEE开发框架&#xff0c;它的主要特点是IoC DI和AOP等概念的融合&#xff0c;强项在面向切面AOP。推出之初因为Ioc/AOP等新设计理念值得框架设计者学习&#xff0c;现在已经成为Java世界主流…

***PHP 去除换行符

PHP在不同的系统中&#xff0c;换行是不同的 Linux&#xff1a;\n Windows&#xff1a;\r\n mac&#xff1a;\r 所以去除回车换行的方法: 1.使用php定义好的变量&#xff08;比较好的方法&#xff0c;推荐&#xff09; $str str_replace(PHP_EOL, , $str); 2.使用str_replace …

01C语言的概述

一、计算机常识在学习C语言之前&#xff0c;先要了解一些计算机常识1.计算机只能识别0和1大家都知道&#xff0c;计算机要通电才能工作&#xff0c;说白了&#xff0c;它跟电视、洗衣机一样&#xff0c;都是电器。电器都有个共同的能力&#xff1a;懂得判断通电还是断电&#x…

mysql5.7物理备份_Mysql5.7—运维常用备份方式

一、 Mysqldump备份结合binlog日志恢复使用mysqldump进行全库备份&#xff0c;并使用binlog日志备份&#xff0c;还原时&#xff0c;可以使用binlog日志恢复到备份前的任意位置或时间1. Binlog简介主要用于主从复制和恢复数据库&#xff0c;使用mysqlbinlog命令查看binlog二进制…

二叉查找树之二

BST树的经典问题 首先构造如下一棵二元查找树&#xff08;BST树&#xff09;&#xff1a; C代码实现&#xff1a; typedef struct _BSTreeNode {int value;struct _BSTreeNode *left;struct _BSTreeNode *right;} BSTreeNode;static BSTreeNode* insert(BSTreeNode* q, int x) …

PS滤镜绘制漂亮线条制作

先看最后效果   1&#xff0e;新建一图层&#xff0d;&#xff0d;&#xff0d;选择画笔画条垂直线&#xff08;颜色为白色&#xff09;。  2&#xff0e;滤镜里面的动感模糊&#xff08;大小视效果而定吧&#xff09;  3&#xff0e;两头细的线条出来了  执行后效果如…

ffmpeg.exe 笔记

2019独角兽企业重金招聘Python工程师标准>>> open_input_file: avformat_open_input 打开了输入文件 av_dict_get 获取信息 setup_find_stream_info_opts avformat_find_stream_info codec avcodec_find_decoder open_output_file avformat_alloc_output_context2(…

java comparator排序顺序_Java 集合排序策略接口 Comparator

1. 前言 最近用到了集合排序&#xff08;基于 Java 8&#xff09;。现在我能用 Stream 的就用 Stream &#xff0c;真香&#xff01;排序可以这么写&#xff1a; List<People> peoples new ArrayList<>();// 中间省略// 按照年龄从小到大排序 peoples.sort(Compar…

TCP/IP、Http的区别

2019独角兽企业重金招聘Python工程师标准>>> TPC/IP协议是传输层协议&#xff0c;主要解决数据如何在网络中传输&#xff0c;而HTTP是应用层协议&#xff0c;主要解决如何包装数据。关于TCP/IP和HTTP协议的关系&#xff0c;网络有一段比较容易理解的介绍&#xff1a…

小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...

引言都说 StringBuilder 在处理字符串拼接上效率要强于 String&#xff0c;但有时候我们的理解可能会存在一定的偏差。最近我在测试数据导入效率的时候就发现我以前对 StringBuilder 的部分理解是错误的。后来我通过实践测试 找原理 的方式搞清楚了这块的逻辑。现在将过程分享…