• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      生信星球

      • 首页
      • 博客
      • 生信星球
      • 在火山图上标记基因(方法一)

      在火山图上标记基因(方法一)

      • 发布者 weinfoeditor
      • 分类 生信星球
      • 日期 2019年7月18日
      测试开头

       今天是生信星球陪你的第412天


         大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

         就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

         这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

      要玩图,离不开哈德雷大神的《R数据科学》,第1章和21章是专门讲图的,我写过对应的笔记:来自小洁的《R数据科学》目录

      关于火山图加标签的需求,有几种方法来实现,今天介绍方法一。

      示例数据

      方法一的示例数据是data.Rdata,方法二三的示例数据是test.Rdata。我将数据打包放在了“生信星球”公众号后台,回复“火山图”即可获得。你解压后双击文件夹里的volcano.Rproj,复制粘贴运行本文代码即可。

      在火山图上标记基因(方法一)

      原理:空字符串“”=nothing

      关于空字符串,我曾写过一篇文章来讲他:R数据框里的空格子不是NA是什么

      这种方法的参照是帮助文档里的一段代码:
      (先准备好包)

      if(!require(ggplot2)) install.packages("ggplot2")
      if(!require(ggrepel)) install.packages("ggrepel")
      library(ggplot2)
      library(ggrepel)

      代码来源

      下面代码来源于geom_text_repel的帮助文档

      p <- ggplot(mtcars,
                  aes(wt, mpg, label = rownames(mtcars), colour = factor(cyl))) +
        geom_point()
      # Hide some of the labels, but repel from all data points
      mtcars$label <- rownames(mtcars)
      mtcars$label[1:15] <- ""
      p + geom_text_repel(data = mtcars, aes(wt, mpg, label = label))

      做出的图是这样:

      在火山图上标记基因(方法一)


      可以看到,一部分点有标签, 一部分没有,思路就是把不要标签的部分变成空字符串“”。


      学以致用

      火山图的本质就是点图,那么在火山图上标记部分基因,就是在点图上标记部分点。

      参考这个思路为火山图加标签:

      (美图预警)

      step1:先把图画出来

      load("data.Rdata")
      head(data)
      #       symbol     p.value        FC change 
      #1            PCMTD2 1.53544e-11 1.3548360 Stable      
      #2                KIAA0087 6.71382e-13 0.7314603 Stable      
      #3                 AFAP1L1 4.24611e-12 0.6284560 Stable      
      #4                  CHMP1A 3.76821e-09 1.6035994 Stable      
      #5                  TRERF1 1.80652e-08 0.6875469 Stable      
      #6                     C8B 7.88047e-04 1.2374303 Stable      
      data$change = ifelse(data$p.value < 0.000001 & abs(log2(data$FC)) >= 1, 
                              ifelse(log2(data$FC)> 1 ,'Up','Down'),
                              'Stable')

      p <- ggplot(data = data, 
               aes(x = log2(data$FC), 
                   y = -log10(data$p.value), 
                   colour=change,
                   label = data$symbol)) +
        geom_point(alpha=0.4, size=3.5) +
        scale_color_manual(values=c("blue", "grey","red"))+
        xlim(c(-4.5, 4.5)) +
        geom_vline(xintercept=c(-1,1),lty=4,col="black",lwd=0.8) +
        geom_hline(yintercept = -log10(0.000001),lty=4,col="black",lwd=0.8) +
        labs(x="log2(fold change)",
             y="-log10 (p-value)",
             title="Differential metabolites")  +
        theme_bw()+
        theme(plot.title = element_text(hjust = 0.5), 
              legend.position="right", 
              legend.title = element_blank())
      p
      在火山图上标记基因(方法一)

      step2:筛选部分基因,用于显示在图上

      想在图上做修改,一半是调参数,一半是调数据。我们现在要做的就是调数据:要标记的,label=基因,无需标记的,label=“”。

      ⭐重点就在这里:

      data$label=ifelse(data$p.value < 0.000001 & abs(log2(data$FC)) >= 1,data$symbol,"")

      如果看不懂ifelse的语法,请看这一篇:从前提到条件语句只知道if else

      step3:将文字图层叠加上去

      p+geom_text_repel(data = data, aes(x = log2(data$FC), 
                                         y = -log10(data$p.value), 
                                         label = label),
                            size = 3,box.padding = unit(0.5, "lines"),
                            point.padding = unit(0.8, "lines"), 
                            segment.color = "black", 
                            show.legend = FALSE)
      在火山图上标记基因(方法一)

      但是我发现,这个只是适用于数据量比较小的时候,这个例子只有170个点,而一般来说火山图数以万计的行,用这个方法容易失败。下午尝试了几次大的数据,结果Rstudio无一例外的嘎嘣了。

      另外两种方法我将在后续推文中继续更新。

      向大家隆重推荐隔壁生信技能树的一系列干货!

      全球公益巡讲、招学徒

      B站公益74小时生信工程师教学视频合辑


      点击底部的“阅读原文”,获得更好的阅读体验哦😻

      初学生信,很荣幸带你迈出第一步。

      我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~

      在火山图上标记基因(方法一)

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoeditor

      上一篇文章

      Bioconductor 3.9 Release Schedule
      2019年7月18日

      下一篇文章

      数据发现:中国爱情故事
      2019年7月18日

      你可能也喜欢

      8-1651673488
      生信零基础入门学习小组长期报名中(2022仍继续)
      7 4月, 2022
      2-1651673738
      简化版的ROC曲线
      21 2月, 2022
      8-1651674718
      支持向量机模型
      19 11月, 2021

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?