R语言学习 - 火山图
时间:2022-04-26
本文章向大家介绍R语言学习 - 火山图,主要内容包括火山图、Reference、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
火山图
火山图用于展示基因表达差异的分布,横轴为Log2 Fold Change
,越偏离中心差异倍数越大;纵轴为(-1)*Log10 P_adjust
,值越大差异越显著。一般横轴越偏离中心的点其纵轴值也会比较大,因此呈现火山喷发的形状。
一步绘制火山图
输入数据格式
火山图需要的数据格式如下 (本文用到的数据文件名为volcano.txt
,文末有下载链接,此处截取一部分作为例子,也可用来画图,只是数据少,效果不明显)
- id: 不是必须的,但一般的软件输出结果中都会包含,表示基因名字。
- log2FoldChange: 差异倍数的对数,一般的差异分析输出结果中也会给出对数处理的值, 因此程序没有提供这一步的计算操作。
- padj: 多重假设检验矫正过的差异显著性P值;一般的差异分析输出结果为原始值,程序提供一个参数对其求取负对数。
- significant: 可选列,标记哪些基因是上调、下调、无差异;若无此列或未在参数中指定此列,默认程序会根据
padj
列和log2FoldChange
列根据给定的阈值自动计算差异基因,并作出不同颜色的标记。 - label: 可选列,一般用于在图中标记出感兴趣的基因的名字。非
-
行的字符串都会标记在图上。
id log2FoldChange padj significant label
E00007 4.28238 0 EHBIO_UP A
E00008 -1.1036 0.476466843393901 Unchanged -
E00009 -0.274368 1 Unchanged -
E00010 4.62347 7.37606076333335e-103 EHBIO_UP -
E00012 0.973987 0.482982440163204 Unchanged -
E00017 -1.30205 0.000555693857439792 Baodian_UP B
E00024 0.617636 2.78047837287061e-13 Unchanged -
E00033 1.48669 2.56000581595275e-60 EHBIO_UP -
E00034 -0.783716 0.00341521725291801 Unchanged -
E00036 2.01592 6.03136656016401e-06 EHBIO_UP C
E00040 -1.89657 4.73663890849056e-21 Baodian_UP -
E00041 -0.268168 0.563429434558031 Unchanged -
E00042 0.0861048 0.367700939634328 Unchanged -
E00043 -1.19328 1.42673872027352e-153 Baodian_UP -
E00044 -0.887981 2.43067804654905e-26 Unchanged -
E00047 -0.610941 5.51696648645932e-57 Unchanged -
使用significant列绘制火山图
# -f: 指定输入文件,格式如上
# -x: 指定横轴变量,值为输入文件中与取过对数的变化倍数相关的列的名字
# -y: 指定纵轴变量,值为输入文件中与P-value
# (也可能是p-adj,是否取过对数都可以)相关的列的名字
# -P: 若为TRUE,则表示对<-y>指定的列进行-log10转换
# -L: 指定图例的位置
# -s: 指定差异基因列
# -S: 指定差异基因列不同的标签出现的顺序
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -s significant -S "'EHBIO_UP', 'Baodian_UP', 'Unchanged'" -P TRUE -L top
这个图看上去还可以,没有太大的问题。但有部分点与最顶端的线重合了,这些点的pvalue为0,取负对数后为负无穷。另外在一些情况下,会存在部分基因的pvalue极小,使得整张图呈现一个压缩的趋势,大部分点偏安于图的下方,中间大段空白,最上面零星几个点。为了避免这种情况,程序设置了参数-M
用于设定pvalue的最大的负对数,所有大于给定值的数,都会视为给定值。
# -M 10: 指定P-value(也可能是p-adj);若小于10^(-10),则为10^(-10)
# 用于部分p-value存在异常值,导致整个图都被压缩在最底部
p_volcano.sh -f volcano.txt -x log2FoldChange -y padj -s significant -S "'EHBIO_UP', 'Baodian_UP', 'Unchanged'" -P TRUE -L top -M 10
注意看纵轴的变化,和最上面排成一条线的一堆点。
自动计算significant列绘制火山图
若不存在significant
列,程序会根据-F
指定的参数计算并标记差异基因。-F
的默认值为"0.05,1"
(引号是必须的), 第一个数表示pvalue或padj,对应于<-y>列;第二个数表示对数转换的差异倍数,对应于<-x>列。
# <-F "0.05,1">, 默认值,故命令行中未写,引号是必须的
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -P TRUE -L top
# -M 10: 与之前相同
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -P TRUE -L top -M 10
火山图中标记基因的名字
# -l: label,在图中标记部分基因的名字;
# label为含有待标记基因名字的列名,此列中非<->的非空字符都会视为基因名字
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -P TRUE -L top -M 10 -l label
label
列中非-
的值都会标记在图上。
今天先到这,前天提到的富集分析图,今天的火山图都是散点图的一种,后续介绍散点图时再对用到的R代码进行解读。
需要绘图脚本的,还是请帮助转发下,谢谢。
测试文件的链接 http://pan.baidu.com/s/1i5LzDxr。
Reference
http://blog.genesino.com/2017/07/volcanoPlot
- 由objC运行时所想到的。。。
- tensorflow系列笔记:流程,概念和代码解析
- node实现watcher的困境
- Java基础-03(02).总结运算符、键盘录入、if语句
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十一)数据层优化-druid监控及慢sql记录
- python数据分析师面试题选
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介
- webpack配置别名alias出现的错误匹配
- 在Java程序中处理数据库超时与死锁
- 如何用TensorFlow和TF-Slim实现图像标注、分类与分割
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合
- 使用shell脚本查看数据库负载情况(第二篇)(r3笔记第92天)
- tensorflow LSTM + CTC实现端到端OCR
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- opencv 图像滤波(均值,方框,高斯,中值)
- opencv 阈值分割的具体使用
- 浅谈keras 的抽象后端(from keras import backend as K)
- 在Keras中利用np.random.shuffle()打乱数据集实例
- 浅谈matplotlib中FigureCanvasXAgg的用法
- Keras自定义实现带masking的meanpooling层方式
- 利用keras使用神经网络预测销量操作
- 获取python运行输出的数据并解析存为dataFrame实例
- 如何使用Cython对python代码进行加密
- PHP快速排序算法实现的原理及代码详解
- 从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
- keras实现VGG16 CIFAR10数据集方式
- PyTorch: Softmax多分类实战操作
- 为什么称python为胶水语言
- opencv 图像礼帽和图像黑帽的实现