野钓乐趣 發表於 2022-3-1 15:14:43

R语言学习之火山图的绘制详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>火山图</li><ul class="second_class_ul"><li>输入数据格式</li><li>使用significant列绘制火山图</li><li>自动计算significant列绘制火山图</li><li>火山图中标记基因的名字</li></ul></ul></div><p class="maodian"></p><h2>火山图</h2>
<p>火山图用于展示基因表达差异的分布,横轴为<code>Log2 Fold Change</code>,越偏离中心差异倍数越大;纵轴为<code>(-1)*Log10 P_adjust</code>,值越大差异越显著。一般横轴越偏离中心的点其纵轴值也会比较大,因此呈现火山喷发的形状。</p>
<p>一步绘制火山图</p>
<p class="maodian"></p><h3>输入数据格式</h3>
<p>火山图需要的数据格式如下 (本文用到的数据文件名为<code>volcano.txt</code>,文末有下载链接,此处截取一部分作为例子,也可用来画图,只是数据少,效果不明显)</p>
<ul><li>id: 不是必须的,但一般的软件输出结果中都会包含,表示基因名字。</li><li>log2FoldChange: 差异倍数的对数,一般的差异分析输出结果中也会给出对数处理的值, 因此程序没有提供这一步的计算操作。</li><li>padj: 多重假设检验矫正过的差异显著性P值;一般的差异分析输出结果为原始值,程序提供一个参数对其求取负对数。</li><li>significant: 可选列,标记哪些基因是上调、下调、无差异;若无此列或未在参数中指定此列,默认程序会根据<code>padj</code>列和<code>log2FoldChange</code>列根据给定的阈值自动计算差异基因,并作出不同颜色的标记。</li><li>label: 可选列,一般用于在图中标记出感兴趣的基因的名字。非<code>-</code>行的字符串都会标记在图上。</li></ul>
<div class="jb51code"><pre class="brush:ruby;">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        -
</pre></div>
<p class="maodian"></p><h3>使用significant列绘制火山图</h3>
<div class="jb51code"><pre class="brush:ruby;"># -f: 指定输入文件,格式如上
# -x: 指定横轴变量,值为输入文件中与取过对数的变化倍数相关的列的名字
# -y: 指定纵轴变量,值为输入文件中与P-value
#   (也可能是p-adj,是否取过对数都可以)相关的列的名字
# -P: 若为TRUE,则表示对&lt;-y&gt;指定的列进行-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
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202203/2022030115024252.png?20222115528" /></p>
<p>这个图看上去还可以,没有太大的问题。但有部分点与最顶端的线重合了,这些点的pvalue为0,取负对数后为负无穷。另外在一些情况下,会存在部分基因的pvalue极小,使得整张图呈现一个压缩的趋势,大部分点偏安于图的下方,中间大段空白,最上面零星几个点。为了避免这种情况,程序设置了参数<code>-M</code>用于设定pvalue的最大的负对数,所有大于给定值的数,都会视为给定值。</p>
<div class="jb51code"><pre class="brush:ruby;"># -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
</pre></div>
<p>注意看纵轴的变化,和最上面排成一条线的一堆点。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202203/2022030115024353.png?20222115552" /></p>
<p class="maodian"></p><h3>自动计算significant列绘制火山图</h3>
<p>若不存在<code>significant</code>列,程序会根据<code>-F</code>指定的参数计算并标记差异基因。<code>-F</code>的默认值为<code>&quot;0.05,1&quot;</code>(引号是必须的), 第一个数表示pvalue或padj,对应于&lt;-y&gt;列;第二个数表示对数转换的差异倍数,对应于&lt;-x&gt;列。</p>
<div class="jb51code"><pre class="brush:ruby;"># &lt;-F "0.05,1"&gt;, 默认值,故命令行中未写,引号是必须的
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -P TRUE -L top
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202203/2022030115024354.png?20222115659" /></p>
<div class="jb51code"><pre class="brush:ruby;"># -M 10: 与之前相同
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -P TRUE -L top -M 10
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202203/2022030115024655.png?20222115716" /></p>
<p class="maodian"></p><h3>火山图中标记基因的名字</h3>
<div class="jb51code"><pre class="brush:ruby;"># -l: label,在图中标记部分基因的名字;
# label为含有待标记基因名字的列名,此列中非&lt;-&gt;的非空字符都会视为基因名字
sp_volcano.sh -f volcano.txt -x log2FoldChange -y padj -P TRUE -L top -M 10 -l label
</pre></div>
<p><code>label</code>列中非<code>-</code>的值都会标记在图上。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202203/2022030115024656.png?20222115734" /></p>
<p>今天先到这,前天提到的富集分析图,今天的火山图都是散点图的一种,后续介绍散点图时再对用到的R代码进行解读。需要绘图脚本的,还是请帮助转发下,谢谢。</p>
<p>数据文件链接&nbsp;https://pan.baidu.com/s/1I3hi8Lr9IxTgNFJoN4zbag . 提取码:1234</p>
<p>到此这篇关于R语言学习之火山图的绘制详解的文章就介绍到这了,更多相关R语言绘制火山图内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>R语言绘制Bubble&nbsp;Matrix气泡矩阵图</li><li>R语言绘制line plot线图示例详解</li><li>R语言绘制小提琴图violin&nbsp;plot实现示例</li><li>R语言两组变量特征相关关系热图绘制画法</li><li>R语言数可视化Split violin plot小提琴图绘制方法</li><li>R语言绘制维恩图ggvenn示例详解</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: R语言学习之火山图的绘制详解