前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >69-R可视化12-用easylabel轻松手动添加标记

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

作者头像
北野茶缸子
发布2021-12-17 10:58:51
8080
发布2021-12-17 10:58:51
举报
文章被收录于专栏:北野茶缸子的专栏

参考:

  • 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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1-准备工作
  • 2-直接操作easylabel
  • 3-导出结果
  • 4-拓展内容
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档