R 问题|如何合并图形并共享同一个图例?

简介: R 问题|如何合并图形并共享同一个图例?

简介

小编在科研中,需要将多个图形进行合并,并共享同一个图例。此时应该如何实现?关于图形合并的相关推文写了很多了:R可视乎|合并多幅图形、cowplot包,ggplot2图形排版R包。但是对于今天这个问题,小编很少注意,在进行查阅资料后,将该技巧进行总结。主要介绍三种方法,参考资料如下:cowplot[1]、ggpubr[2]、patchwork[3]。

绘制示例图形

这里以 mpg 数据集为例,前几行数据预览如下:

以 displ/cty 为 x 轴, hwy 为 y 轴,颜色用 class 来刻画,绘制散点图。并进行了简单细节调整。

library(ggplot2)
library(viridis)
## 创建图形
plot1 <- ggplot(data = mpg, aes(x = displ, y = hwy, color = class)) +
  geom_point(size=1.7) + scale_color_viridis(discrete = T) + 
  theme_bw() + theme(panel.grid = element_blank())  
plot2 <- ggplot(data = mpg, aes(x = cty, y = hwy, color = class)) +
  geom_point(size=1.7) + scale_color_viridis(discrete = T) +
  theme_bw() + theme(panel.grid = element_blank())

此时合并后的结果如下:

可以看到,两个图形的图例是相同的,为了图形更佳清晰,美观。我们需要将两个图形的图例进行合并。接下来,小编整理了三种方法供大家参考:

方法一 ggpubr::ggarrange()

使用 ggarrange() 并配合参数 common.legend = TRUE。此外,调整共享图例位置使用 legend="top"。

library(ggpubr)
ggarrange(plot1, plot2, common.legend = TRUE, legend="top")

方法二 cowplot::plot_grid()

使用 plot_grid() 并配合参数 get_legend()提取某个图形的图例。

library(cowplot)
combined_plot <- plot_grid(plot1 + theme(legend.position = 'none'), plot2 + theme(legend.position = 'none'), ncol = 2)
# 将图例添加到合并后的图形中
plot_grid(combined_plot, get_legend(plot1),rel_widths = c(4, 1))

方法三 patchwork::plot_layout()

使用 plot_layout() 并配合参数 guides = "collect"。此外,调整共享图例位置使用 & theme(legend.position='bottom')。

library(patchwork)
plot1 + plot2 + plot_layout(guides = "collect") &
  theme(legend.position='bottom')

参考资料

[1]

cowplot: https://wilkelab.org/cowplot/articles/shared_legends.html

[2]

ggpubr: https://rpkgs.datanovia.com/ggpubr/index.html

[3]

patchwork: https://patchwork.data-imaginist.com/

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
数据可视化
R语言多图合成:优雅地在一个画布上展示多个图形
【8月更文挑战第30天】R语言提供了多种方法来实现多图合成,从基础的`par()`函数到高级的`gridExtra`、`ggplot2`和`cowplot`包,每种方法都有其独特的优势和应用场景。通过掌握这些技术,你可以根据实际需求灵活地组合图形,从而更高效地展示和解读数据。希望本文能为你提供一些有益的参考和启示。
1380 2
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
898 4
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
并行计算 数据可视化 算法
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
`CMplot`和`rMVP`是R语言中的两个包,用于全基因组关联分析(GWAS)的数据可视化。`CMplot`专注于曼哈顿图和QQ图的绘制,支持多种图表类型,如常见的SNP密度图、环状曼哈顿图、矩阵图、单条染色体图和多重曼哈顿图等。`rMVP`不仅包含了`CMplot`的功能,还支持更复杂的GWAS方法,如线性/混合线性模型和基因组选择算法,优化了内存管理和计算效率,特别适合大规模数据集。此外,它还提供PCA图和柱状图。两者都提供了丰富的参数定制图表。
2759 1
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
|
机器学习/深度学习 人工智能 图形学
NPU(Neural Processing Unit)和GPGPU(
NPU(Neural Processing Unit)和GPGPU(General-Purpose Graphics Processing Unit)在AI任务处理方面虽然都能发挥重要作用,但它们在设计、功能和适用场景上存在一些明显的差异。
3191 3
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
【Matlab 2019b】Matlab在figure中如何把横坐标或者纵坐标单位转换为10的几次方
本文提供了在Matlab中如何改变图形坐标轴单位的方法,举例说明了如何将横轴刻度标签设置为特定的年份,并调整刻度取值以匹配自变量的变化。
3006 1
|
机器学习/深度学习 监控 算法
基于YOLOv8深度学习的100种蝴蝶智能识别系统【python源码+Pyqt5界面+数据集+训练代码】目标识别、深度学习实战
基于YOLOv8深度学习的100种蝴蝶智能识别系统【python源码+Pyqt5界面+数据集+训练代码】目标识别、深度学习实战
|
监控 Java Linux
Linux下JVM相关指令详解及案例介绍
Linux下JVM相关指令详解及案例介绍
433 1
|
数据采集 数据可视化 数据挖掘
使用R语言进行主成分分析(PCA)
【4月更文挑战第26天】本文介绍了如何使用R语言进行主成分分析(PCA),包括安装必要包`stats`、`FactoMineR`和`factoextra`,数据预处理如标准化,使用`PCA()`函数执行PCA,以及通过`summary()`、`fviz_pca_ind()`和`fviz_pca_var()`进行结果解读和可视化。此外,还讨论了如何通过载荷系数解释主成分,强调PCA在数据降维和探索数据结构中的作用。
1780 1
|
存储 测试技术 API
BackTrader 中文文档(十二)(1)
BackTrader 中文文档(十二)
435 0