分享

TCGA数据分析系列之火山图

 公号生信小课堂 2021-10-28

前面我们做了TCGA的差异分析,并且用ggplot2验证了差异分析的准确性,TCGA差异分析及ggplot作图验证,而差异分析后一般会又热图和火山图,热图我们之前也有说过热图系列1R语言学习系列之“多变的热图”,今天我们来了解一下火山图的画法

加载数据

加载差异分析的结果

rm(list = ls())load(file='limma差异分析结果.Rda')library(ggplot2)class(DEG_limma_voom)volcano<-DEG_limma_voom


数据处理

我们先把差异分析结果增加一列,以区分上调下调和无差异的基因。我们以adj.P.Val < 0.05,logFC>2或者logFC<-2作为有明显差异的基因

volcano$type[(volcano$adj.P.Val > 0.05|volcano$adj.P.Val=="NA")|(volcano$logFC < 2)& volcano$logFC > -2] <- "none significant"volcano$type[volcano$adj.P.Val <= 0.05 & volcano$logFC >= 2] <- "up-regulated"volcano$type[volcano$adj.P.Val <= 0.05 & volcano$logFC <= -2] <- "down-regulated"

纵坐标一般取-log10,绘图看一下

p = ggplot(volcano,aes(logFC,-1*log10(adj.P.Val),color=type))       p + geom_point()

给横坐标设定界限,自定义颜色,加上临界值的虚线

x_lim <- max(volcano$logFC,-volcano$logFC) gg=p + geom_point( size=1) + xlim(-x_lim,x_lim) +labs(x="log2(FC)",y="-log10(adjP)")+ scale_color_manual(values =c("#A52A2A","grey","#f8766d"))+ geom_hline(aes(yintercept=-1*log10(0.05)),colour="black", linetype="dashed") + geom_vline(xintercept=c(-2,2),colour="black", linetype="dashed")print(gg)

看起来还不错

加上基因名

如何把差异最明显的基因名标在火山图上呢?这里提供了几种方法可供选择

方法一

volcano1<-volcanovolcano1$gene_name<-row.names(volcano1)
library(dplyr)top <- volcano1 %>% group_by(type) %>% top_n(n = 10, wt = -1*log10(adj.P.Val)) %>% filter(type !='none significant') # 取上下调中显著差异表达基因前10个
gg + geom_text(data=top,aes(x=logFC, y=-1*log10(adj.P.Val),label=as.character(gene_name)),size=3)

基因名重叠的可以下载PFD格式,在AI里面修改

如果想把背景的灰色去掉们也有办法

library(ggthemes)gg + geom_text(data=top,aes(x=logFC, y=-1*log10(adj.P.Val),label=as.character(gene_name)),size=3)+theme_few()


方法二

library(ggrepel)up <- subset(volcano1, type == 'up-regulated')up <- up[order(up$adj.P.Val), ][1:10, ]down <- subset(volcano1, type == 'down-regulated')down <- down[order(down$adj.P.Val), ][1:10, ]p1 <- gg + theme(legend.position = 'right') +
  geom_text_repel(data = rbind(up, down), aes(x = logFC, y = -log10(adj.P.Val), label = gene_name),
                  size = 3,box.padding = unit(0.5, 'lines'), segment.color = 'black', show.legend = FALSE)
print(p1)

这样基因名就不会重叠在一起,还有箭头指示

方法三

library(ggrepel)up <- subset(volcano1, type == 'up-regulated')up <- up[order(up$adj.P.Val), ][1:10, ]down <- subset(volcano1, type == 'down-regulated')down <- down[order(down$adj.P.Val), ][1:10, ]p2 <- gg + theme(legend.position = 'right') + geom_label_repel(data = rbind(up, down), aes(label = gene_name), show.legend = FALSE)print(p1)

比方法二多了基因的框,看起来也不错。

最后再介绍一个画热图的在线网站:http://www./ImageGP/index.php/Home/Index/Volcanoplot.html,只要准备好数据输入进去就行了,不过要注意,数据的行名和列名有要求,不能包含特殊字符,比如空格,逗号等,最好就只用字母表示就行。比如我们把数据整理成下面格式

粘贴到网站中,出图

参数可以调节,图片可以下载。

好了,今天的分享就到这了。

另外,最近收集了一些很好的资源,想分享给大家,顺便能涨一些粉,主要有

1. 19年中标的各门类国自然题目汇总,以及17年的国自然汇总,部分含摘要!


2. R语言学习书籍

R语言实战(中文完整版)

R数据科学(中文完整版)

ggplot2:数据分析与图形艺术

30分钟学会ggplot2

3. TCGA数据整理

前期从https:///datapages/ (UCSC Xena)数据库下载的TCGA数据,传到了百度云上备份。

感兴趣的话,转发朋友圈或者100人以上的微信群,截图发到公众号,即可获取全部资源的百度云链接,链接7天有效,希望大家赶紧下载。你们的支持是我前进的动力,感谢。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多