双阈值的火山图

作者: 小洁忘了怎么分身 | 来源:发表于2021-05-12 16:49 被阅读0次

标准的火山图:


双阈值的火山图:
耶比较常见咯,比如这篇文章里https://pubmed.ncbi.nlm.nih.gov/32278127/

其实也没啥。就是设置了两组logFC和Pvalue的阈值,把中间的基因用浅一点的颜色表示出来。我试了同一颜色设置不同透明度,结果失败咯。因为点太密集,设置了透明度,颜色耶会叠加,不好看。

1.示例数据

随便拿个芯片数据过来,做完他的差异分析,差异分析结果表格。

if(!require(tinyarray))devtools::install_github("xjsun1221/tinyarray")
library(tinyarray)
library(stringr)
geo = geo_download("GSE4107")
Group = factor(ifelse(str_detect(geo$pd$title,"control"),"control","treat"))
ids = idmap(geo$gpl)
dcp = get_deg_all(log2(geo$exp+1),Group,ids)

## [1] "743 down genes,1908 up genes"

这个10列的表格就是limma差异分析结果,后面添加了几列。

head(dcp$deg)

##      logFC   AveExpr         t      P.Value    adj.P.Val        B    probe_id
## 1 6.861133  7.838697 15.686305 9.489229e-14 2.091036e-09 19.58011   202768_at
## 2 5.219628 11.381501 15.545324 1.147345e-13 2.091036e-09 19.43798   209189_at
## 3 2.453844 13.346921 11.538846 5.019678e-11 3.920727e-07 14.57411 201041_s_at
## 4 4.538726  7.466782 10.617313 2.533831e-10 1.731715e-06 13.19062   223316_at
## 5 3.403667  9.523239 10.411289 3.687011e-10 2.239859e-06 12.86560 201693_s_at
## 6 5.024796  6.872653  9.961547 8.508265e-10 4.651894e-06 12.13533   220276_at
##   symbol change ENTREZID
## 1   FOSB     up     2354
## 2    FOS     up     2353
## 3  DUSP1     up     1843
## 4  CCDC3     up    83643
## 5   EGR1     up     1958
## 6  RERGL     up    79785

2.常规火山图

如果要常规的火山图,已经有啦。我在写这个tinyarray包的时候,顺便把画图的代码也加进去了。仅作简化代码用哦。

dcp$plots

3.双阈值的火山图

每句代码都简单,实际应用起来略复杂,搞起来。

library(ggplot2)
logFC_t1 = 1
P.Value_t1 = 0.05
logFC_t2 = 2
P.Value_t2 = 0.01
dat = dcp$deg
library(dplyr)
k1 = with(dat,logFC > logFC_t2 & P.Value<P.Value_t2);table(k1)

## k1
## FALSE  TRUE 
## 19467   283

k2 = with(dat,logFC < -logFC_t2 & P.Value<P.Value_t2);table(k2)

## k2
## FALSE  TRUE 
## 19692    58

k3 = with(dat,logFC > logFC_t1 & P.Value < P.Value_t1 );table(k3)

## k3
## FALSE  TRUE 
## 17842  1908

k4 = with(dat,logFC < -logFC_t1 & P.Value <P.Value_t1 );table(k4)

## k4
## FALSE  TRUE 
## 19007   743

# 设置不同颜色和大小
my_color = case_when(k1~"red",
                     k2~"blue",
                     k3~"#f08080",
                     k4~"#4169e1",
                     TRUE~"#696969")
my_size = case_when(k1|k2~2.5,
                    k3|k4~2,
                    TRUE~1.5)

p = ggplot(data = dat, 
       aes(x = logFC, 
           y = -log10(P.Value))) +
  geom_point(alpha=0.5, size=my_size, 
             color=my_color) +
  geom_vline(xintercept = c(-logFC_t1,logFC_t1,-logFC_t2,logFC_t2),lty= 4,lwd=0.8,alpha = c(0.5,0.5,1,1)) +
  geom_hline(yintercept = c(-log10(P.Value_t1),-log10(P.Value_t2)),lty= 4,lwd=0.8,alpha = c(0.5,1)) +
  theme_bw()+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())+
  scale_x_continuous(limits = c(-7, 7), expand = c(0,0))
p
# 加标签
for_label <- dat %>% 
  filter(symbol %in% c("FOSB", "FOS", "DUSP1"))

p +
  geom_point(size = 3, shape = 1, data = for_label) +
  ggrepel::geom_label_repel(
    aes(label = symbol),
    data = for_label,
    color="black"
  )

只要顺利得到了差异分析结果表格,上面的图应该是很轻松搞定咯。如果你仔细看了代码,没太整明白case_when的话,分享下这个函数的核心思想,应该会有茅塞顿开的感觉。可以看到我写的k1 k2 k3 k4 是两组阈值得到差异基因的条件,为什么不是分更多种情况讨论?这是因为case_when函数的条件之间有优先级顺序哦,不满足第一个条件,才往下看第二个条件,以此类推。就像ggplot2的代码也有先后顺序一样!hadly大佬永远的神 ~

相关文章

  • 双阈值的火山图

    标准的火山图: 双阈值的火山图:耶比较常见咯,比如这篇文章里https://pubmed.ncbi.nlm.nih...

  • 2021-06-30 火山图

    读取数据 基础版火山图 画图 Construct the plot object 画阈值分界线 显示 logFC ...

  • ggplot做对角线火山图---与单细胞差异基因可视化更配哦

    火山图又双叒叕来了,之前做的火山图已经很精美了。 1、绝美!差异基因火山图大全![http://mp.weixin...

  • ggplot做双曲线阈值火山图

    接着我们之前复现过的一篇NC文章(复现《nature communications》散点小提琴图+蜜蜂图[http...

  • 一个比较简洁的火山图作图包

    又是火山图: 火山图。。。。。真的很多了ggplot做火山图---添加任意基因标签|||突出显示标记基因[http...

  • 火山图

    火山图 library(ggplot2) 4. 画图 r03 = ggplot(data,aes(log2FC,-...

  • 火山图

    画第一张图 画第二张图

  • 火山图

    在分析RNAseq和microarray数据的差异基因的时候,常常用到火山图,需要的数据是包含Fold chang...

  • 火山图

    标准的火山图常用于展示显著差异表达的基因,这里有两个关键词:显著是指P<0.05,差异表达一般我们按照Fold C...

  • 火山图

    参考这篇:R数据可视化1: 火山图

网友评论

    本文标题:双阈值的火山图

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