GGPLOT2-plotly |让你的火山图“活”过来
火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P值(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)
和文献中的差距较大,以下几个方面可改进:
答:上下调基因的区分;
B:横轴,纵轴的阈值线;
C:重点基因的标示。
2.2细节优化火山图
1)根据阈值设定上下调基因
新增改列,利用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)标示重点显着差异基因
上图是不是有点像了,新增注册列,利用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)解决基因名重叠问题
基本和纸一致,但是因为差异表达基因太多,存在重叠情况,现使用ř语言的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)标示感兴趣的基因的表达情况
将我们感兴趣的基因添加到数据的标签列中,假设以下几个基因是我们重点关注的基因,单独查看以下基因的表达情况
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!实现上述静态的就可以发论文去了!
但是,,,
汇报展示的时候,如果能动态交互式的展示所有显关系着基因的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值。
那可不可以在“纸”级静态火山图的基础上,实现交互式呢?当然可以!
四,参考资料
https://www.bioconductor.org/packages/release/bioc/vignettes/EnhancedVolcano/inst/doc/EnhancedVolcano.html
更多关于生信,R,Python的内容请关注小号“生信补给站”,谢谢。
其他可能感兴趣
GGPLOT2-plotly |让你的火山图“活”过来的更多相关文章
- 扩增子图表解读5火山图:差异OTU的数量及变化规律
火山图 Volcano plot 在统计学上,火山图是一种类型的散点图,被用于在大数据中快速鉴定变化.由于它的形成像火山喷发的样子,所以被称为火山图.和上文讲的曼哈顿图类似. 火山图基本元素 火山 ...
- R语言与医学统计图形-【13】ggplot2几何对象之盒形图
ggplot2绘图系统--几何对象之盒形图 参数: geom_boxplot(mapping = , #lower,middle,upper,x,ymax,ymin必须(有默认) #alpha/col ...
- R-plotly|交互式甘特图(Gantt chart)-项目管理/学习计划
本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/CGz51qOjFSJ4Wx_qOMzjiw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...
- ggplot2 |legend参数设置,图形精雕细琢
本文首发于微信公众号“生信补给站”,https://mp.weixin.qq.com/s/A5nqo6qnlt_5kF3_GIrjIA 学习了ggplot2|详解八大基本绘图要素后,就可以根据自己的需 ...
- R-forestplot包| HR结果绘制森林图
本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...
- 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...
- ggstatsplot绘图|统计+可视化,学术科研神器
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/zdSit97SOEpbnR18ARzixw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. ...
- R & ggplot2 & Excel绘图(直方图/经验分布图/QQ图/茎叶图/箱线图)实例
持续更新~ 散点图 条形图 文氏图 饼图 盒型图 频率直方图 热图 PCA图 3D图 火山图 分面图 分面制作小多组图 地图 练习数据: year count china Ame jap '12 2. ...
- ggplot2入门与进阶(下)
出处:http://www.cellyse.com/how_to_use_gggplot2_part2/ 更多实战 例一 Michaelis-Menten动力学方程 这个例子中采用出自文献中的一组有关 ...
随机推荐
- ASP.NET MVC/Core表单提交后台模型二级属性验证问题
起因 这个是网友在官网论坛的提问:https://fineui.com/bbs/forum.php?mod=viewthread&tid=22237 重新问题 本着务实求真的态度,我们先来复现 ...
- SQLAlchemy基本使用,创建表,增删改查
基础语法 创建连接 from sqlalchemy import create_engine # 写法1 engine = create_engine("postgresql://scott ...
- Hive 学习之路(四)—— Hive 常用DDL操作
一.Database 1.1 查看数据列表 show databases; 1.2 使用数据库 USE database_name; 1.3 新建数据库 语法: CREATE (DATABASE|SC ...
- 【设计模式】结构型02装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern) 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由 ...
- Java中到底是值传递还是引用传递?
Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...
- TCP/IP 第一章
1,tcp/ip协议族作用:连接互联网中的计算机,并使其通信.可以想象互联网的计算机有不同的操作系统,如linux.unix.bsd.srv.windows.mac等.这么多操作系统对tcp/ip的实 ...
- 使用Appium做手机自动化录制问题
最近在使用appium做Android手机自动化脚本录制, 发现点击“tap”时,一直没有用,页面还是不能跳转. 咋办?发愁... 于是看到旁边有个“sendkeys”,那是不是能够直接发送参数不就行 ...
- php如何定义数组常量
是这样吗?<?php define('BEST_PHPER',array('name'=>'巩文','address'=>'china')); My God,明确告诉你不可以:原因是 ...
- 【无线安全实践入门】网络扫描和ARP欺骗
文中可能存在错误操作或错误理解,望大家不吝指正. 同时也希望可以帮助到想要学习接触此方面.或兴趣使然的你,让你有个大概的印象. !阅前须知! 本文是基于我几年前的一本笔记本,上面记录了我学习网络基础时 ...
- Jpa 笔记
ORM 思想 对象关系映射, 建立实体类和表的关系映射关系, 实体类和表中字段的映射关系,我们操作实体类底层是操作数据表, 进而自动的拼接出SQL语句 Jpa规范 Jpa(Java Persisten ...