欢迎光临散文网 会员登陆 & 注册

手把手教学-使用ggpubr进行文章的组图合并!!!

2023-11-07 10:48 作者:尔云间  | 我要投稿

小伙伴在阅读生信文章的时候,肯定都见过许多精美的图片,而他们的图片中往往都是有许多个不同结果的图进行组合,这种是发表文献是,小伙伴必须需要学会的技能。多个图形进行组图的展示,可以让我们的结果可以多角度的展示出来,也可以进行结果差异比对的需求。 当然,我们平时用的最多的就是PS,AI软件处理,但是软件对图片中大小,位置,布局,文字等调整麻烦的很,也不是一个小工程。小果在这里教大家一个其他的方法,利用R包ggpubr进行组图的合并,或许比AI,PS更容易呢,小果从0开始给大家介绍,我们开始学习吧!

小果在这里教学用的数据都是来自R包中自带的数据集: 首先我们载入R包还有数据集: #install.packages("ggpubr")#这里注意的是 我们要首先载入ggplot2,在载入ggpubr包 library(ggplot2) library(ggpubr) # ToothGrowth数据集 data("ToothGrowth") head(ToothGrowth)

接下来是# mtcars 数据集 data("mtcars") mtcars$name <- rownames(mtcars) mtcars$cyl <- as.factor(mtcars$cyl) head(mtcars[, c("name", "wt", "mpg", "cyl")])

我们主要学习的是组图,小伙伴对数据出的子图可以更具自己需求来完成。 我们先创建单个的图片 首先是箱线图: Box_plot <- ggboxplot(ToothGrowth, x = "dose", y = "len",color = "dose", palette = "jco") Box_plot

接下里是点图#点图 Dot_plot <- ggdotplot(ToothGrowth, x = "dose", y = "len",                       color = "dose", palette = "jco", binwidth = 1) Dot_plot

然后是#有序条形图 Bar_plot <- ggbarplot(mtcars, x = "name", y = "mpg",                       fill = "cyl",              # change fill color by cyl                       color = "white",           # Set bar border colors to white                       palette = "jco",           # jco journal color palett. see ?ggpar                       sort.val = "asc",          # Sort the value in ascending order                       sort.by.groups = TRUE,     # Sort inside each group                       x.text.angle = 90          # Rotate vertically x axis texts ) + font("x.text", size = 8) Bar_plot

后面就是#散点图 Scatter_plots <- ggscatter(mtcars, x = "wt", y = "mpg",                            add = "reg.line",              # Add regression line                            conf.int = TRUE,               # Add confidence interval                            color = "cyl", palette = "jco", # Color by groups "cyl"                            shape = "cyl"                  # Change point shape by groups "cyl" )+   stat_cor(aes(color = cyl), label.x = 3)      # Add correlation coefficient Scatter_plots

上述的单图是不是都很熟悉,都是平时我们做的比较多的图,我们创建完成后,就开始绘制组合图片把 这里使用ggpubr包中函数ggarrange()在一页上进行展示上述的结果 对ToothGrowth数据集的箱线图,点图组合展示: ggarrange(Box_plot, Dot_plot,labels = c("A", "B"),ncol = 2, nrow = 1)

是不是就完成了呢,AB序号小伙伴可以自行调整 后面我们对#mtcars 数据集的条形图,散点图组合展示   figure <- ggarrange(Scatter_plots, Bar_plot + font("x.text", size = 10),ncol = 1, nrow = 2)                     #添加图形的注释信息(标题,副标题,坐标轴,字体,颜色等)                                          annotate_figure(figure,                                     top = text_grob("Visualizing mpg", color = "red", face = "bold", size = 14),                                     bottom = text_grob("Data source: mtcars data set", color = "blue",                                                        hjust = 1, x = 1, face = "italic", size = 10),                                     left = text_grob("Figure arranged using ggpubr", color = "green", rot = 90),                                     right = "Here )!",                                     fig.lab = "Figure 1", fig.lab.face = "bold"                     )

这是组图的一个,我们还可以调整细节,不只是简简单单的拼图, 接下来我们使用ggarrange()函数更改绘图的列/行的跨度 这里我们将#散点图在第一行跨两列,箱形图和点图并于第二行                      ggarrange(Scatter_plots,                                                # First row with scatter plot           ggarrange(Box_plot, Dot_plot, ncol = 2, labels = c("B", "C")), # Second row with box and dot plots           nrow = 2,           labels = "A"                                       # Labels of the scatter plot                     )

这样一来,一行中平均排行好,图片更加美观 但是有时候图片内容多了,会显得很拥挤,我们可以利用NULL构建空白图 我们这里示例一下边际密度图的散点图,去学习一下吧: #绘制主要散点图   Scatter_plots <- ggscatter(iris, x = "Sepal.Length", y = "Sepal.Width",                            color = "Species", palette = "jco",                            size = 3, alpha = 0.6)+   border() #上侧,右侧添加密度图                                    xplot <- ggdensity(iris, "Sepal.Length", fill = "Species",                    palette = "jco") yplot <- ggdensity(iris, "Sepal.Width", fill = "Species",                    palette = "jco")+   rotate() # 设置主题 yplot <- yplot + clean_theme() xplot <- xplot + clean_theme()   # 通过width和height参数调整图的大小 # 利用NULL设置空白图   ggarrange(xplot, NULL, Scatter_plots, yplot,           ncol = 2, nrow = 2, align = "hv",           widths = c(2, 1), heights = c(1, 2),           common.legend = TRUE) 

这样边际图周围留出来一些空白,我们可以将NULL套用在自己数据图中。 当然我们还可以添加统计的图表还有文本的信息,我们可以利用绘制变量“Sepal.Length” 的密度图以及描述性统计(mean,sd,...)的汇总表 # Sepal.Length密度图   density.p <- ggdensity(iris, x = "Sepal.Length",                        fill = "Species", palette = "jco") # Sepal.Length描述性统计   stable <- desc_statby(iris, measure.var = "Sepal.Length",                       grps = "Species") stable <- stable[, c("Species", "length", "mean", "sd")]     # 设置table的主题   stable.p <- ggtexttable(stable, rows = NULL,                         theme = ttheme("mOrange")) # text 信息   text <- paste("iris data set gives the measurements in cm",               "of the variables sepal length and width",               "and petal length and width, reScatter_plotsectively,",               "for 50 flowers from each of 3 Scatter_plotsecies of iris.",               "The Scatter_plotsecies are Iris setosa, versicolor, and virginica.", sep = " ") text.p <- ggparagraph(text = text, face = "italic", size = 11, color = "black")     # 组图展示,调整高度和宽度   ggarrange(density.p, stable.p, text.p,           ncol = 1, nrow = 3,           heights = c(1, 0.5, 0.3))

这样一来,下面就是对上述图的统计介绍,我们组合在一张图中。 我们在调整一下布局:进行#子母图展示 density.p + annotation_custom(ggplotGrob(stable.p),                               xmin = 5.5, ymin = 0.7,                               xmax = 8)   #嵌套布局展示   p1 <- ggarrange(Scatter_plots, Bar_plot + font("x.text", size = 9),                 ncol = 1, nrow = 2) p2 <- ggarrange(density.p, stable.p, text.p,                 ncol = 1, nrow = 3,                 heights = c(1, 0.5, 0.3)) #先组合P1,P2,然后自定义行 列 ,嵌套组合展示 ggarrange(p1, p2, ncol = 2, nrow = 1)

这样是不是就大功告成了,小伙伴有没有心动呢,快去试试吧,不要忘记多多理解代码的意义,这样才能套用自己数据进行展示。

手把手教学-使用ggpubr进行文章的组图合并!!!的评论 (共 条)

分享到微博请遵守国家法律