69-R可视化12-用easylabel轻松手动添加标记

2021-12-17 10:58:51 浏览数 (1)

参考:

  • easylabel (r-project.org)[1]

前言

先前我介绍过ggrepel 这个包:[[67-R可视化11-用ggrepel更加美观的添加标记(火山图的实现)]]

其实现的文本标记更加美观,且个性化程度远远优于:[[66-R可视化10-自由的在ggplot上添加文本(柱状图加计数)]]

那么我们可不可以直接指哪打哪,连代码都不用呢?

基于shiny 的easylabel 包或许是你的选择。

这里我以火山图为例。

1-准备工作

加载包、制作假数据:

代码语言:javascript复制
my_packages<- c("RColorBrewer", "paletteer", "ggplot2",
                "ggpubr", "tidyverse", "ggrepel", "devout",
                "ggforce", "easylabel")
tmp <- sapply(my_packages, function(x) library(x, character.only = T)); rm(tmp, my_packages)

# make fake data
DEG <- data.frame(
  genes = paste0("gene", 1:100),
  fold_change = round(runif(100, -10, 10), 2),
  P_value = runif(100, 0.001, 0.1)
)
DEG$group <-  ifelse((DEG$P_value > 0.05) | (abs(DEG$fold_change) < 2) , "no-Significant",
                     ifelse(DEG$fold_change > 2, "increase", "decrease"))
DEG$group <- factor(DEG$group, levels = c("decrease", "no-Significant", 
                                          "increase"))
sig_DEG <- DEG[!DEG$group %in% "no-Significant",]

2-直接操作easylabel

开始我以为,这个包会像ggthemeassistant 一样,直接操作绘图对象p,直接修改代码,更加方便且个性化。

没想到,它是需要直接以数据框操作的。

这里因为以火山图为例,先使用火山图绘图函数easyVolcano :需要注意这里的数据框的行名需要是基因名

代码语言:javascript复制
# 开始之前修改一下数据框
DEG$new_P <- -log10(DEG$P_value)
easylabel(DEG)
rownames(DEG) <- DEG$genes

easyVolcano(DEG, x = "fold_change", 
            y = "P_value",
            fccut = 1, fdrcutoff = 0.05,
            ylim = c(0, 6), xlim = c(-5, 5),
            colScheme = colScheme,
            vline = c(-1, 1))

这里参数分别表示:

  • fccut 是fold change 阈值,也是x轴;
  • fdrcutoff 是P 的阈值,也是y轴;
  • ylim 是整个坐标轴y 的边界范围;
  • xlim 同上,超过这两个边界的点会被标记为outlier;
  • colScheme 为指定的颜色版;
  • vline 标记y 轴线段,用于分割结果,类似之前的geom_hline 操作;

接下来我们就可以在shiny 中交互添加了:

在shiny 界面,你还可以对标签的位置进行个性化设置:

此外,除了在图上标记,还有一个非常有意思的筛选框,你可以通过输入基因名的方式标记:

还有一个非常简单的shiny 数据模块:

3-导出结果

官方支持多种导出格式:

这里我尝试直接pdf:

你们觉得好看吗?

4-拓展内容

其实不止这一个函数,官方提供了:

等多个例子。

直接参考:easylabel (r-project.org)[2] 官方教程啦。

个人觉得,如果这个包可以直接给出绘图代码就好了,或者直接操作ggplot 对象,毕竟我对这种封装的美观体验,还是有要求的,你怎么知道你的绘图代码就能让我满意呢?

不过话说回来,这个包的一些绘图细节,比如火山图,还蛮值得学习的:

比如这个的小操作,还是蛮对我胃口的:

参考资料

[1]easylabel (r-project.org): https://cran.r-project.org/web/packages/easylabel/vignettes/easylabel.html

[2]easylabel (r-project.org): https://cran.r-project.org/web/packages/easylabel/vignettes/easylabel.html

0 人点赞