双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的时候总是失败。比如说充值交通卡吧,…

lastb

lastb命令系统安全lastb命令用于显示用户错误的登录列表,此指令可以发现系统的登录异常。单独执行lastb命令,它会读取位于/var/log目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。语法…

扫地机器人滤网顺序_1分钟小课堂:扫地机器人滤网多久换一次?

作为扫地机器人使用中的一大耗材,滤网的更换你了解吗?扫地机器人通常会在尘盒的排气位置安装滤网,这是为了保证排出的空气是洁净的,防止二次污染。滤网用一段时间就会沾满灰尘,但市面上绝大多数扫地机器人的滤网是不能…

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

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

在Linux中创建静态库.a和动态库.so

转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用函数制作成函数库,供其它程序使用。 函数库分为静态库和动态库两种。 1. 静态函数库 这类库的名字一般是libxxx.a&#x…

带通滤波器作用和用途_带通滤波器作用

带通滤波器作用带通滤波器是一个允许特定频段的波通过同时屏蔽其他频段的设备。比如RLC振荡回路就是一个模拟带通滤波器。带通滤波器是指能通过某一频率范围内的频率分量、但将其他范围的频率分量衰减到极低水平的滤波器,与带阻滤波器的概念相对。一个模拟带通滤波器…

服务器升级虚拟化,刀片服务器内置虚拟化 IBM升级服务器

IBM 宣布推出内置VMWare管理程序的新型,以使客户更加快捷、简便地实现。带有内置VMware ESX 3i管理程序的新型BladeCenter HS21 XM刀片服务器将帮助客户加快服务器虚拟化或者升级到更先进的虚拟功能,在提供高可靠性的同时,简化系统。HS21 XM刀…

WEB开发新人指南

写给母校UESTCweb开发方向的同学,也分享给大家,希望多提好的意见,沟通交流。 博客原文链接:http://leuisken.github.io/2015/07/17/web-dev/ 转载请注明出处 一、首先要知道的 如今我们使用的互联网,客户端与服务器端的…

skywalking服务端_skywalking部署

文件列表apache-skywalking-apm-7.0.0.tar.gz:服务端文件mysql-connector-java-5.1.30.jar:mysql jdbc驱动jar包需要条件Jdk1.8以上mysql5.7以上服务端部署把文件上传到服务器上/root目录下scp apache-skywalking-apm-7.0.0.tar.gz root192.168.3.211:/r…

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

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

新增成功到编制为空bug_36 个JS 面试题为你助力,让面试更有力(面试必读)

来源:javapoint译者:前端小智点赞再看,养成习惯本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试…

Lua协程

协作例程 1、同一时刻仅一个例程在运行 2、执行权让渡和恢复【栈】转载于:https://www.cnblogs.com/freebird92/p/4713106.html

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

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

在python中模块可以封装_python 制作python包,封装成可用模块教程

首先编写py程序:printtest.pydef test():print(print test)将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup.py中输入配置信息:from setuptools import setupsetup(nameprinttest,version1.0,py_modules[printtest],)打开终端&…

F# 4.0于全平台发布

随着Visual Studio 2015的发布,由微软创建的函数式编程语言F#也迎来了它的第四个版本。新版本中的变动包括大量的新特性、bug修复、语言本身的一些增强,以及一些性能方面的改进。此外,新版本的F#还简化了在VS2015中进行调试与编辑的方式。\\微…

一种用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;首…

python ansys workbench联动_联合ANSYS WORKBENCH和经典界面进行后处理

WORKCENCH主要是为不大懂ANSYS命令和编程的工程师服务的&#xff0c;而经典界面则适用于初学者和研究人员。初学者和研究人员是完全不同的两个层次&#xff0c;为什么ANSYS经典界面却同时适合二者呢&#xff1f;实际上&#xff0c;学好ANSYS&#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;供大家自行参考和判断。若有疑…