美文网首页
单细胞36计之24---在火山图上标记基因名字

单细胞36计之24---在火山图上标记基因名字

作者: Seurat_Satija | 来源:发表于2021-04-24 00:29 被阅读0次

    24、第二十四计 假道伐虢
    以借路为名,实际上要侵占该国(或该路)。虢,诸侯国名。也作“假道灭虢”。

    代码来源

    下面代码来源于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))
    
    

    做出的图是这样:

    image

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

    学以致用

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

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

    (美图预警)

    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
    
    
    image

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

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

    ⭐重点就在这里:

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

    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)
    
    
    image

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

    了解更多可参考链接:https://www.jianshu.com/p/aaae171ffe75

    相关文章

      网友评论

          本文标题:单细胞36计之24---在火山图上标记基因名字

          本文链接:https://www.haomeiwen.com/subject/xohkcltx.html