专栏首页生信补给站ggplot2-plotly|让你的火山图“活”过来

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

火山图(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

本文分享自微信公众号 - 生信补给站(Bioinfo_R_Python),作者:MJ

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小数据| 描述性统计(Python/R 实现)

    描述性统计是借助图表或者总结性的数值来描述数据的统计手段。数据挖掘工作的数据分析阶段,可以借助描述性统计来描述或总结数据的基本情况。

    西游东行
  • R-rbind.fill|列数不一致的多个数据集“智能”合并,Get!

    Q:多个数据集,列数不一致,列名也不一致,如何按行合并,然后保留全部文件的变量并集呢?

    西游东行
  • ggplot2-图形微调(1)

    绘图过程中,通过给图形中添加适量的注释(图形、公式、注释)以及图形整体的外观,可以使读图者更快速、更准确的了解图形表达的含义。

    西游东行
  • 【IoT应用创新大赛】LoRaWAN在工业互联网中的应用

    工业互联网,是智能制造发展的基础,可以提供共性的基础设施和能力;我国已经将工业互联网作为重要基础设施,为工业智能化提供支撑。

    Zach_iot
  • R语言与生信系列①(R入门与临床三线表绘制)

    首次分享课讲的是TCGA数据分析,探究某一因素与肿瘤临床数据之间的关系,并自动生成可以用于SCI发表的三线表,如下图所示:

    用户1359560
  • 数据特征分析

    “原因和结果、投入和产出、努力和报酬之间本来存在着无法解释的不平衡。一般来说,投入和努力可以分为两种不同的类型: 多数,它们只能造成少许的影响;少数,它们造成主...

    用户3577892
  • 如何利用Requests和网dai平台做一个短信hz

    对于众所周知的事就是网dai害人,尤其是对于那些高炮系列,更是害人不浅那,今天我们就来尝试用网dai的短xin接口做一个用于娱乐的短信hzj,耗光这些网dai平...

    吾爱小白
  • R语言可视化——中心放射状路径图

    最近一直在研究ggplot剩余还没有涉略过的图表类型,试图挖掘出一些新的图表形式,就像是该包的作者所暗示的那样,ggplot2只是给你搭建了一个图层语法环境,至...

    数据小磨坊
  • [object%20Object] 这个ajax请求的时候报错,解决方法

    原因是jQuery版本低,不能使用 .post() 改为 .ajax({ type: “post”,

    一天不写程序难受
  • Python读取结果写入Excel中

    列表嵌套字典。Excel中的url,test_method,data,title等都是一个键,url,test_method,data,title下面的数据就是...

    清菡

扫码关注云+社区

领取腾讯云代金券