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

更多关于生信,R,Python的内容请关注小号“生信补给站”,谢谢。

其他可能感兴趣

[R |绘图边距及布局

R-基本绘图参数(Ⅰ)

GGPLOT2 |从0开始绘制直方图

GGPLOT2 |从0开始绘制折线图

GGPLOT2 |从0开始绘制箱线图

GGPLOT2 |绘制GO富集柱形图

GGPLOT2 | 绘制KEGG气泡图

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

绘图系列| R-corrplot相关图

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

绘图系列| R-文氏图包绘制韦恩图

[R | UpSet-集合可视化

GGPLOT2-plotly |让你的火山图“活”过来的更多相关文章

  1. 扩增子图表解读5火山图:差异OTU的数量及变化规律

    火山图 Volcano plot 在统计学上,火山图是一种类型的散点图,被用于在大数据中快速鉴定变化.由于它的形成像火山喷发的样子,所以被称为火山图.和上文讲的曼哈顿图类似.   火山图基本元素 火山 ...

  2. R语言与医学统计图形-【13】ggplot2几何对象之盒形图

    ggplot2绘图系统--几何对象之盒形图 参数: geom_boxplot(mapping = , #lower,middle,upper,x,ymax,ymin必须(有默认) #alpha/col ...

  3. R-plotly|交互式甘特图(Gantt chart)-项目管理/学习计划

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/CGz51qOjFSJ4Wx_qOMzjiw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...

  4. ggplot2 |legend参数设置,图形精雕细琢

    本文首发于微信公众号“生信补给站”,https://mp.weixin.qq.com/s/A5nqo6qnlt_5kF3_GIrjIA 学习了ggplot2|详解八大基本绘图要素后,就可以根据自己的需 ...

  5. R-forestplot包| HR结果绘制森林图

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...

  6. 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)

    本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...

  7. ggstatsplot绘图|统计+可视化,学术科研神器

    本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/zdSit97SOEpbnR18ARzixw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. ...

  8. R & ggplot2 & Excel绘图(直方图/经验分布图/QQ图/茎叶图/箱线图)实例

    持续更新~ 散点图 条形图 文氏图 饼图 盒型图 频率直方图 热图 PCA图 3D图 火山图 分面图 分面制作小多组图 地图 练习数据: year count china Ame jap '12 2. ...

  9. ggplot2入门与进阶(下)

    出处:http://www.cellyse.com/how_to_use_gggplot2_part2/ 更多实战 例一 Michaelis-Menten动力学方程 这个例子中采用出自文献中的一组有关 ...

随机推荐

  1. 简洁的描述SpringMVC工作流程

    1.客户端发送来的请求 经过前端控制器(springDispatcherServlet)调用映射器(HandlerMapping)来找到对应的执行链(HandlerExecutionChain)对象, ...

  2. win10安装docker

    配置首先需要Hyper-v和容器,这样就可以运行Linux的镜像了 如果是win10home版或者是其他版本就需要安装visulbox了, 然后去官网https://www.docker.com/pr ...

  3. mysql group_concat的长度问题

    mysql group_concat的长度问题 show variables like 'group_concat_max_len';+----------------------+-------+| ...

  4. python基础--定义装饰器(内置装饰器)

    装饰器的定义: 装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景中,比如-- >插入 ...

  5. php回调函数设计

    <?php namespace Server; /** * 回调函数设计 * Class Server * @package Server */ class Server { public fu ...

  6. 关于起点中文网的一个我自认为是BUG的BUG(花了我一毛三分钱才实验出来的)

    因为最近在学关于网页的东西,所以便有了每看一个网页,总得先看看这个网页的源码的习惯. 突然我就想到了,起点中文网在看小说的界面是不允许复制粘贴,甚至连点右键都不会有反应, 那么如果我查看源码,能否复制 ...

  7. STM32 HAL库学习系列第7篇---定时器TIM 输入捕获功能

    测量脉冲宽度或者测量频率   基本方法 1.设置TIM2 CH1为输入捕获功能:  2.设置上升沿捕获:  3.使能TIM2 CH1捕获功能:  4.捕获到上升沿后,存入capture_buf[0], ...

  8. 使用 Mybatis 框架 jdbc 方式批量写入 SQL Server,报错 com.microsoft.sqlserver.jdbc.SQLServerException 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数,最多应为2100

    这个错是sqlserver抛出来的. 进过验证,上述错误中的2100为插入的总字段数. 比如下面这种插入方式,values后面的一个括号里的字段为30个,那么后面最多只能加70条,即这种批量插入方式一 ...

  9. Numpy之数组创建

    ndarray 数组除了可以使用 ndarray 构造器来创建外,也可以通过如下方式创建. 一.创建数组 numpy.empty 语法: numpy.empty(shape, dtype = floa ...

  10. redis 基础数据结构实现

    参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...