不用PS!patchwork快速解决多子图组合问题~~

如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的化,那么这篇文章你就得好好看看了,今天小编就给大家安利一个超强的突变自由组合包-patchwork,让你轻松实现多图的自由组合。

更多详细的数据可视化教程,可订阅我们的店铺课程:

下面小编结合实例介绍一下该包的主要用法:

patchwork 基本功能介绍

  1. 使用自带的数据进行单个图表的绘制:

library(tidyverse)
library(ggtext)
library(hrbrthemes)
library(patchwork)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')
  1. patchwork的基础用法

patchwork合并不同图表的基本操作十分简单,使用 + 号进行不同图表之间的组合,如下:

p1 + p2

p1 + p2

p1 + p2

当突变进行合并之后,我们可对最后一个(p2)进行其他ggplot2图层元素的添加,如添加标题(title):

p1 + p2 + labs(subtitle = 'This will appear in the last plot',caption = "Visualization by DataCharm")

p1 + p2_with_title_caption

p1 + p2_with_title_caption

  1. 控制布局(Controlling layout)

默认情况下,patchwork将按行顺序排列图表,并使网格保持正方形。如下:

p1 + p2 + p3 + p4

by row

by row

如果不想按照默认的行排列的化,你可以通过使用plot_layout() 函数进行组合布局的调整。如下:

p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE)

nrow_byrow_set

nrow_byrow_set

注意这次结果和上一个结果的不同(图中红圈标出),plot_layout()函数还有很多其他功能,小伙伴们可自行探索哈~~

  1. 堆叠和包装不同图表(Stacking and packing plots)

这个功能也是小编最喜欢的功能之一了,而patchwork包提供了 |- 并排图表,和 / -堆叠图表 操作,来灵活的对不同图表进行排列组合。下面通过实例进行说明:

p1 / p2

p1 / p2

p1 / p2

p1 | (p2 / p3)

p1 | (p2 / p3)

p1 | (p2 / p3)

  1. 添加注释文本信息(Annotating the composition)

在对图表进行合并后,我们通常需要添加一些注释文本(标题、序号等),这时,可通过 plot_annotation()进行快速添加:

(p1 | (p2 / p3)) + plot_annotation(title = 'The surprising story about mtcars', caption = "Visualization by DataCharm")

exam of plot_annotation

exam of plot_annotation

此外,plot_annotation()还可以自动添加标签功能,这个在绘制多幅图表时可是经常用的方法哦~

p1 + p2 + p3 + plot_annotation(tag_levels = 'a')

tag_levels

tag_levels

标签功能这里只介绍基本的,还有跟多用法,小伙伴们可去官网进行了解。

以上就完成了对patchwork包基本功能的介绍,当然,这些都是基础,想要探索更多功能,小伙伴们可去官网查看:https://patchwork.data-imaginist.com/articles/patchwork.html,接下来,还是老样子,小编再进行一幅定制化图表的操作(会用上以上全部方法)

patchwork 定制化出图

单独绘制每个可视化图表:

library(ggpol)
library(ggpubr)ToothGrowth$dose <- as.factor(ToothGrowth$dose)
# Comparisons against reference
stat.test <- compare_means(len ~ dose, data = ToothGrowth, group.by = "supp",method = "t.test", ref.group = "0.5"
)
# plot01
bp <- ggbarplot(ToothGrowth, x = "supp", y = "len",fill = "dose", palette = "jco",add = "mean_sd", add.params = list(group = "dose"),position = position_dodge(0.8))
plot_01 <- bp + stat_pvalue_manual(stat.test, x = "supp", y.position = 33,label = "p.signif",position = position_dodge(0.8)
)#plot02
library(ggsci)
df <- data.frame(score = rgamma(150, 4, 1), gender = sample(c("M", "F"), 150, replace = TRUE), genotype = factor(sample(1:3, 150, replace = TRUE)))plot_02 <- ggplot(df) + geom_boxjitter(aes(x = genotype, y = score, fill = gender),jitter.shape = 21, jitter.color = NA, jitter.height = 0, jitter.width = 0.04,outlier.color = NA, errorbar.draw = TRUE) +ggsci::scale_fill_jco() #plot03
set.seed(1234)
wdata = data.frame(sex = factor(rep(c("F", "M"), each=200)),weight = c(rnorm(200, 55), rnorm(200, 58)))
plot_03 <- ggdensity(wdata, x = "weight", fill = "lightgray",add = "mean", rug = TRUE) 
# plot04
set.seed(1234)
wdata = data.frame(sex = factor(rep(c("F", "M"), each=200)),weight = c(rnorm(200, 55), rnorm(200, 58)))plot_04 <- gghistogram(wdata, x = "weight", fill = "sex",add = "mean", palette = c("lightgray", "gray50"),add_density = TRUE,rug = TRUE)# 使用patchwork进行组合并添加主题
patchwork_example <- plot_01 + plot_02 + plot_03 + plot_04 +plot_annotation(tag_levels = 'A',title = "Example of <span style='color:#D20F26'>patchwork Process</span>",subtitle = "processed charts with <span style='color:#1A73E8'>plot_annotation & theme()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") & theme_minimal(base_family = "Roboto Condensed") &theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",face = 'bold',size = 20, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),plot.caption = element_markdown(face = 'bold',size = 12),)

最终的可视化结果如下:

patchwork_example

可以看出,patchwork包提供了一键设置全部图表主题风格的(& 添加图层即可),这个功能再对绘制多图时可是非常便利的。 https://patchwork.data-imaginist.com/

总结

今天小编推荐的这个绘图技巧对需绘制多图且需要合并的小伙伴来说,可谓是一大绘图利器,希望感兴趣的小伙伴可以学习下哦~~

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

科研绘图系列:R语言绘制中国地理地图

文章目录 介绍加载R包导入数据图a图b图c图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码。该图展示了不同省份的物种分布情况。 加载R包 library(geojsonsf) library(sf) library(ggplot2) library(RColorBrewer) library(ggspatial) library(</

Springboot网上书城小程序—计算机毕业设计源码38707

目 录 摘要 1 绪论 1.1 研究背景及意义 1.2国内外研究现状 1.3系统开发的内容 1.4论文结构与章节安排 1.5小程序框架以及目录结构介绍 2 网上书城小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析…

PowerJob做定时任务调度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、区别对比二、使用步骤1. 定时任务类型2.PowerJob搭建与部署 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; PowerJob是基于java开…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限&#xff0c;从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签&#xff08;Security Labels&#xff09;&#xff1a;每个文件、目录、…

Nginx中,413 Request Entity Too Large错误

背景 在Nginx中&#xff0c;413 Request Entity Too Large错误通常发生在尝试上传或发送超过Nginx配置文件中的client_max_body_size限制的文件时。这个错误意味着请求的正文大小超过了Nginx允许的最大值。 解决这个问题的方法是在Nginx配置文件中增加client_max_body_size的值…

运动耳机选哪个品牌比较好?盘点五大高品质运动耳机推荐!

在骨传导耳机日益普及的同时&#xff0c;一个不容忽视的问题也逐渐暴露在大众视野之中。根据可靠消息&#xff0c;有超过九成的运动爱好者反馈在使用骨传导耳机时感到佩戴不适&#xff01;作为一名有着5年经验的运动达人&#xff0c;我秉持着对消费者负责的态度&#xff0c;同时…

【力扣刷题实战】(顺序表)移除元素

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 移除元素 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 解题思路 具体思路 题目要点 完整代码 兄弟们共勉 &#xff01;&#xff01;&#xff01; 每篇前言 博客主页&#xff1a;小卡…

【新品发布】数字能源EMS管理再掀新篇章

致远电子EM系列工商业储能网关累计装机容量突破2GWh&#xff01;聚焦数字综合能源应用&#xff0c;全新一代EM-800/EM-1000G发布&#xff0c;见证光储充时代的来临&#xff01; 早在2008年&#xff0c;致远电子的工程师在为国内某新能源企业设计光伏通讯管理机方案时&#xff0…

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现

问题&#xff1a;Leetcode 50. Pow ( x , n ) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数。 算法&#xff1a; 具体实现流程如下&#xff1a; 代码&#xff1a; class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…

研究生异地报名,需要社保缴费记录,没有社保记录怎么办。

1、户籍在安徽省&#xff0c;在北京工作&#xff0c;想报北京科技大学&#xff1b; 招生简章中没有提社保记录&#xff0c;但是在报名的时候&#xff0c;又出来要求&#xff1a;北京连续6个月的社保记录。这里是指在北京市考试的要求。没有连续社保缴费记录&#xff0c;肯定不能…

软考《信息系统运行管理员》- 4.1信息系统软件运维概述

4.1信息系统软件运维概述 信息系统软件运维的概念 信息系统软件运维是指信息系统软件在开发完成投入使用后&#xff0c;对信息系统软件进行的改正 性维护、适应性维护、完善性维护、预防性维护等软件工程活动。 信息系统软件的可维护性及维护类型 信息系统软件维护工作直接…

dvwa:sql注入、sql盲注全难度解析

sql注入 easy 单引号闭合 id2 and if(11,sleep(3),1) and 11 ​ 联合注入&#xff1a; id2 union select database(),user() -- ​ 报错注入&#xff1a; id2 and updatexml(1,concat(0x7e,database(),0x7e),1) -- medium mysql_real_escape_string() 调用 mysql 库的函数 mys…

gbase8s的事务、并发控制、锁机制、隔离级别

一、事务概念 事务是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元&#xff0c;可以简化错误恢复并使应用程序更…

SpringBoot美发店解决方案:打造智能门店

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

收银系统源码营销活动-商品组合套餐

1. 功能描述 商品组合套餐&#xff1a;商家可以把不同的商品组合成套餐在收银台售卖&#xff0c;同时可以利用该套餐做一些会员拉新活动&#xff0c;如设置该活动仅限会员用户才可以购买等。还可以针对套餐的商品选择进行设置&#xff0c;如超市开业活动&#xff0c;价值19.8元…

JVM性能调优-JVM工具使用

命令行工具 jps jps -q 只看进程id jps -l 显示java进程的完整类名 jps -m 查看传递给主类main()的参数 jps -v 列出虚拟机启动时的jvm参数 以上参数可以组合使用 jstat 查看JVM统计信息 例&#xff1a;jstat -gc -t 19788 1000 10 -gc&#xff1a;打印gc统计信息 ;-t&am…

微信+AI应用平台之BotChoice 插件实现灵活调用扣子、dify

github地址&#xff1a;https://github.com/javak8/bot_choice.git 说明 BotChoice项目插件是作者原创插件, 根据提示词调用不同bot/model,可以实现多指令执行 目前bot/model只支持openai接口规范 可以多指令执行 &#xff0c;比如&#xff1a; /热点文案 /搜图片 杭州超市…

【Elasticsearch 实战与原理解析】好书推荐

Elasticsearch 实战与原理解析 在当今这个信息爆炸的时代&#xff0c;数据的存储、检索和分析变得越来越重要。Elasticsearch&#xff0c;作为一个基于 Lucene 的开源搜索引擎&#xff0c;以其强大的全文搜索能力、分布式特性和易用性&#xff0c;成为了数据检索领域的佼佼者。…

基于Java实现(APP)智能停车场管理系统

移动应用开发系统设计说明书&#xff08;智能停车场管理系统&#xff09; 服务集成流程详细设计 实现功能 序号功能点1新增用户2注册用户3修改场地信息4列出场地信息5新增认证车辆6列出认证车辆7删除认证车辆8车辆进入信息录入9停车记录列表展示10出停车场信息录入 参数说明…

SOMEIP_ETS_178: Subscribe_using_wrong_SOMEIP_MessageID

测试目的&#xff1a; 验证DUT能够拒绝一个SOME/IP头部使用错误消息ID进行服务发现的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个使用错误消息ID的服务发现SubscribeEve…