美文网首页R 数据可视化科研信息学小教程收藏
ggplot2-plotly|让你的火山图“活”过来

ggplot2-plotly|让你的火山图“活”过来

作者: 生信补给站 | 来源:发表于2019-07-22 14:27 被阅读59次

火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P value(P值),值越大差异越显著。得名原因也许是因为结果图像火山吧


一 载入R函数包及数据集

library(ggplot2)data <- read.csv("火山图.csv",header=TRUE,row.names = 1)
head(data) #查看数据类型,主要有P值,Fold change和基因ID即可。

二 ggplot2绘制火山图

2.1 绘制简单的火山图--点图

ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val))) +geom_point(alpha=0.8, size = 1)

和文献中的差距较大,以下几个方面可改进:

A:上下调基因的区分;

B:横轴,纵轴的阈值线;

C:重点基因的标示。

2.2 细节优化火山图

1)根据阈值设定上下调基因

新增change列,利用ifelse函数添加基因的上下调情况,color进行区分,然后使用geom_hline()  和 geom_vline( )参数添加阈值线,

data$change <- as.factor(ifelse(data$adj.P.Val < 0.01 & abs(data$logFC) > 1,ifelse(data$logFC > 1,'UP','DOWN'),'NOT'))

2)添加阈值线

使用geom_hline()  和 geom_vline( )参数添加阈值线

ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank()) +  geom_hline(yintercept=2 ,linetype=4) +geom_vline(xintercept=c(-1,1) ,linetype=4 ) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT"))  

3) 标示重点显著差异基因

上图是不是有点像了,新增sign列,利用ifelse函数添加重点显著差异基因,然后使用geom_text参数添加到图上,

data$sign <- ifelse(data$adj.P.Val < 0.001 & abs(data$logFC) > 2.5,rownames(data),NA)
ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank()) +  geom_hline(yintercept=2 ,linetype=4) +geom_vline(xintercept=c(-1,1) ,linetype=4 ) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +geom_text(aes(label = sign), size = 3) 

 

4) 解决基因名重叠问题

基本和paper一致,但是因为差异表达基因太多,存在重叠情况,现使用R语言的ggrepel包解决标签太多导致的重叠问题。

library(ggrepel)ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank()) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +  geom_label_repel(aes(label=sign), fontface="bold", color="grey50", box.padding=unit(0.35"lines"), point.padding=unit(0.5"lines"), segment.colour = "grey50")

5) 标示感兴趣的基因的表达情况

将我们感兴趣的基因添加到数据的LABEL列中,假设以下几个基因是我们重点关注的基因,单独查看以下基因的表达情况

ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank() ) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +  geom_label_repel(aes(label=LABEL), fontface="bold", color="grey50", box.padding=unit(0.35, "lines"), point.padding=unit(0.5, "lines"), segment.colour = "grey50")

呐,到这里除了数据不一样,基本实现了文献中的火山图,是不是以为到这就结束了?NO!NO!NO! 实现上述静态的就可以发paper去了!

但是,,,

汇报展示的时候,如果能动态交互式的展示所有显著基因的FC值和P值,是不是更酷炫!

plotly绘制交互式火山图

1)plot_ly函数画散点图

library(plotly)plot_ly(data,x = ~logFC, y = ~-log10(adj.P.Val),text = ~sign, type = 'scatter',  mode = 'markers')

会弹出一个网页,然后可以交互式的展示每个点的FC值和P值

那可不可以在“paper”级静态火山图的基础上,实现交互式呢?当然可以!!!

四,参考资料

https://www.bioconductor.org/packages/release/bioc/vignettes/EnhancedVolcano/inst/doc/EnhancedVolcano.html

R|plotly


更多关于生信 ,R ,Python的内容请扫码关注小号,谢谢。

其他可能感兴趣

R|绘图边距及布局


R-基本绘图参数(Ⅰ)

ggplot2|从0开始绘制直方图


ggplot2|从0开始绘制折线图


ggplot2|从0开始绘制箱线图


ggplot2|绘制GO富集柱形图


ggplot2| 绘制KEGG气泡图

ggplot2|扩展包从0开始绘制雷达图

绘图系列|R-corrplot相关图


绘图系列|R-wordcloud2包绘制词云


绘图系列|R-VennDiagram包绘制韦恩图


R|UpSet-集合可视化

相关文章

  • ggplot2-plotly|让你的火山图“活”过来

    火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中...

  • 让自己“活”过来

    43天的爱情结束了,今天分手第一天,为自己总结一下,第一次恋爱失败的原因: 第一,自己放不开,思想放不开,行为放不...

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

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

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

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

  • 皮纳图博火山

    你那图博火山是亚洲最严重的一次火山爆发。 平纳博火山主要于吕宋岛和。棉兰老岛两大岛之间 ,皮纳徒步火山位于吗?你一...

  • 火山图

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

  • 火山图

    画第一张图 画第二张图

  • 火山图

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

  • 火山图

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

  • 火山图

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

网友评论

    本文标题:ggplot2-plotly|让你的火山图“活”过来

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