本笔记为个人学习整理,仅供参考。主要参考内容在文末附有链接。如有侵权,请联系删除。
在科研工作中,精确且具解释力的图形是展示研究成果的关键之一。将本地图形与R绘制的图形相结合,可以帮助我们更直观地呈现复杂的数据和研究结果,为读者提供清晰且深刻的理解。无论是为了展示实验结果中的显微图像,还是将地图与数据结合进行地理分析,这种组合方式都能大大提升科研图表的表达效果。在本文中,我们将介绍如何使用R语言的各种工具,将本地图形无缝整合到数据可视化中,为科研绘图增添新的维度。
本地图形实例:
R绘制图形实例:
R绘制图形实例代码:
rm(list = ls())
library(ggplot2)
library(ggrain)
iris
p1 <- ggplot(iris, aes(Species, Sepal.Width, fill = Species, color = Species)) +
geom_rain(alpha = .5,
boxplot.args = list(color = "black", outlier.shape = NA),
boxplot.args.pos = list(
width = .08, position = position_nudge(x = .13)
),
violin.args.pos = list(
width = .87,
side = "r",
position = position_nudge(x = .25)
),
point.args = list(
size = 1.5,
alpha = .6,
shape = 21
)) +
theme_classic() +
scale_fill_brewer(palette = 'Dark2') +
scale_color_brewer(palette = 'Dark2') +
coord_flip()
figpatch
包
figpatch
包是一个用于处理和组合图形的R包。特别适用于创建复杂的出版质量图形,其中包括图像和绘图的组合。允许用户对图形进行拼接、调整和修饰。
安装figpatch
包:
install.packages("figpatch")
或
install.packages("devtools")
devtools::install_github("rstudio/figpatch")
我们仍然使用前面的图形进行拼合。
# 清空当前R环境
rm(list = ls())
# 加载必要的包
library(ggplot2)
library(ggrain)
library(figpatch)
library(patchwork)
# 创建数据集
data(iris)
# 创建geom_rain图形
p1 <- ggplot(iris, aes(Species, Sepal.Width, fill = Species, color = Species)) +
geom_rain(
alpha = .5,
boxplot.args = list(color = "black", outlier.shape = NA),
boxplot.args.pos = list(width = .08, position = position_nudge(x = .13)),
violin.args.pos = list(width = .87, side = "r", position = position_nudge(x = .25)),
point.args = list(size = 1.5, alpha = .6, shape = 21)
) +
theme_classic() +
scale_fill_brewer(palette = 'Dark2') +
scale_color_brewer(palette = 'Dark2') +
coord_flip()
img <- fig("./1724723670371.png")
combined_plot <- p1 + img
# 显示组合图形
print(combined_plot)
显然,拼合的效果很不错!但在这段代码中,我们使用的是figpatch包仅作为本地图形的导入工具,随后使用的patchwork进行组合。
fig()
将它们转换为{ggplot}
对象。
如果出于某种原因,需要调整本地图形的大小或长宽比,那么可以指定一个特定的 aspect.ratio
或让它free
!
img <- fig("./1724723670371.png", aspect.ratio = "free")
combined_plot <- p1 + img + plot_layout(ncol = 1)
# 显示组合图形
print(combined_plot)
Patchwork
已经支持使用 plot_annotation()
轻松标记子图。
img <- fig("./1724723670371.png", aspect.ratio = "free")
combined_plot <- p1 + img + plot_layout(ncol = 1) +
plot_annotation(tag_levels = "A")
# 显示组合图形
print(combined_plot)
plot_annotation()
函数参数:
plot_annotation(
title = NULL, # 图形的整体标题
subtitle = NULL, # 图形的副标题
caption = NULL, # 图形的注释(如数据来源)
tag_levels = c("a", "A"), # 标签的级别(小写或大写)
tag_prefix = NULL, # 标签的前缀
tag_suffix = NULL, # 标签的后缀
theme = NULL, # 图形的主题,覆盖默认设置
...
)
如果要向图形添加内部标签
,则建议使用 fig_tag()
函数。使用 {patchwork}
进行拼合即可。
img <- fig("./1724723670371.png")
img1 <- fig_tag(img, "S")
combined_plot <- img1 + img + plot_layout(ncol = 2) +
plot_annotation(tag_levels = "A")
# 显示组合图形
print(combined_plot)
使用
fig_tag()
时,请删除aspect.ratio = "free"
参数。
可以使用 pos
参数来指定文本标签的位置。这些位置是基于 npc(Normalized Parent Coordinates)
坐标系统的,其中 (0,0)
表示图形的左下角,(1,1)
表示右上角。
如果图形较少,且要快速为多个图形添加标记
,可以使用fig_wrap
。fig_wrap
函数是 figpatch
包中的一个函数,用于将多个图像(或图形)组合在一起,并添加标签。 【!!!不推荐!!!】
fig_wrap
函数参数:
fig_wrap(
figs, # 图像对象的列表
tag, # 标签(一个字符或标签)
prefix = NULL, # 标签的前缀
suffix = NULL, # 标签的后缀
b_col = "black", # 标签的边框颜色
b_size = 0.5, # 标签的边框线宽
hjust = 0.5, # 标签的水平对齐(0: 左对齐, 0.5: 居中, 1: 右对齐)
vjust = 0.5, # 标签的垂直对齐(0: 底部对齐, 0.5: 中心对齐, 1: 顶部对齐)
size = 3, # 标签的文本大小
color = "black" # 标签的文本颜色
)
img <- fig("./1724723670371.png")
img1 <- fig_tag(img, "S", pos = c(0.05,0.05))
fig_wrap(
list(img, img, img),
"A",
b_col = "NA"
)
不推荐使用
fig_wrap
,图形组合有上限限制。
推荐使用
figpatch
包仅作为本地图形的导入工具,随后使用的patchwork
进行组合,plot_annotation()
进行标签标记
更多使用技巧请参考:https://github.com/BradyAJohnston/figpatch
主要参考:
[1]. https://www.nature.com/articles/s41467-024-50106-5
[2]. https://github.com/BradyAJohnston/figpatch
本文为个人学习笔记,整理过程难免有误。如有错误,欢迎指正。仅供个人学习使用,如有侵权,请联系删除