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/

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
数据可视化
R绘图 | 包含/比例关系环图
R绘图 | 包含/比例关系环图
172 0
【代码】读取图像,计算面宽比,并保存至表格
【代码】读取图像,计算面宽比,并保存至表格
ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
250 0
ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
|
数据可视化 数据挖掘
常用 7 大类型图形可视化——排序关系图形
常用 7 大类型图形可视化——排序关系图形
167 0
MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系
MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系
382 0
MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系
MPAndroidChart_并列柱状图,及如何实现点击隐藏掉不需要的条目。
在比赛中遇到了MP的并列柱状图,看网上对这方面记录并不是很多,所以今天就做一个教程吧。
206 0
MPAndroidChart_并列柱状图,及如何实现点击隐藏掉不需要的条目。
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
PowerDesigner16:显示工具栏、物理模型绘制表之间关系、设计图导出成图片
PowerDesigner16:显示工具栏、物理模型绘制表之间关系、设计图导出成图片
603 0
PowerDesigner16:显示工具栏、物理模型绘制表之间关系、设计图导出成图片
|
C#
C# 操作Excel图形——绘制、读取、隐藏、删除图形
简介 本篇文章将介绍C# 如何处理Excel图形相关的问题,包括以下内容要点: 1.绘制图形    1.1 绘制图形并添加文本到图形    1.2 添加图片到图形    1.3 设置图形阴影效果 2. 提取图形中的文本、图片 3.
1735 0
|
测试技术 C#
C# 操作PDF 图层(Layer)——添加、删除图层、设置图层可见性
前言 通过添加图层,我们可以将文本、图片、表格、图形等元素精确定位于页面指定位置,将这些元素进行叠放、组合形成页面的最终效果。此外,对于页面中已有的图层我们也可以进行设置图层可见性、删除图层等操作。因此,在本篇文章中,将介绍如何在C#中进行PDF图层的操作。
1939 0