【R语言学习笔记】| 如何将本地图片与数据图形完美组合?

文摘   科技   2024-08-27 14:17   甘肃  

本笔记为个人学习整理,仅供参考。主要参考内容在文末附有链接。如有侵权,请联系删除。

在科研工作中,精确且具解释力的图形是展示研究成果的关键之一。将本地图形与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_wrapfig_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

本文为个人学习笔记,整理过程难免有误。如有错误,欢迎指正。仅供个人学习使用,如有侵权,请联系删除


可凡的学习笔记本
在读硕士生,R、Python爱好者
 最新文章