画火山图

volcano plot 火山图

火山图(Volcano Plot)是做RNA-Seq分析的时候特别常用的一张图,因为它可以非常清晰的展示出哪些基因是我们真正想要的显著性的基因。

我们看看火山图长什么样子

百度图片搜volcano plot随便找了一张

下面说明如何看懂和绘制火山图

标准的火山图常用于展示显著差异表达的基因,这里有两个关键词:显著是指P<0.05,差异表达一般我们按照Fold Change(倍数变化)>=2.0作为标准。
当我们拿到基因表达的P值和Fold Change后,为了用火山图展示结果,一般需要把倍数进行Log2的转化,比如某基因在实验组表达水平是对照组的4倍,log2(4)=2,同样的如果是1/4,也就是0.25,转换后的结果就是-2。

同样的道理,对P值进行-log10的转化,-log10(0.05)约等于1.30103,由于P值越小表示越显著,所以我们进行-log10(P value)转化后,转化值越大表示差异约显著,比如-log10(0.001)=3 > -log10(0.01)=2 > -log10(0.05)=1.30。

上面看不懂没关系,举例说明:

RNA-Seq测序时会有一个对照组的样本,一个处理组的样本,处理组和对照组相比较,会发现某个基因表达量或变高了或变低了。用处理组的表达量除以对照组就会得到一个倍数,这个倍数就叫做Fold Change差异表达一般我们按照Fold Change(倍数变化)>=2.0作为标准。为了用火山图更直观的显示结果我们要将横轴的Fold Change进行Log2处理,对纵轴的P值进行-log10的处理。
log2(fold change)=0也就是图中间的位置,就相当于:处理组fpkm/对照组fpkm=1也就是说对照组和处理组之间的基因表达量是没有变化的。所以说出现在中间位置的点是表达量没有发生变化的基因,越往右边走就说明这些基因的表达量在处理组比对照组大,越往左走说明相对于对照组来说,处理组基因表达量变低。
在该图中,不显著的被设置成了粉色,显著的设置成了绿色。

Y轴是cuffdiff算的统计检验的P-value取了log10之后又取了一个负数,所以说-log10(P-value)越高代表着越显著,也就是说越往左上角和越往右上角的点是越显著的点。

我们用来自于cuffdiff的输出文件gene_exp.diff画图,读入R命令:

volcano_plot = read.table(file="gene_exp.diff文件路径",header = T)

注:读表用read.table函数
读入后,看看这个表张什么样子:

gene_exp.diff

可以看到:

  • 第一列、第二列都是基因名;
  • 第三列gene没写因为已经给了gene_id了;
  • 第四列locus是该基因在基因组上位置;
  • sample_1 sample_2就是取了个名字不用注意;
  • status那列显示的是,是否通过检验,显示OK的就是进行检验的,显示NOTEST就说明表达量特别特别低不进行检验;
  • p-value是做统计检验看看是否显著,q-value是对p-value进行修正,最终以修正过的q-value为准,q-value<0.05才认为是显著的。

准备画火山图用到的X/Y轴

先准备X轴—log2(fold change)

前面我们交代过了fold change=处理组fpkm/对照组fpkm
所以:

control_FPKM = volcano_plot$value_2  #对照组的fpkm
treat_FPKM = volcano_plot$value_1 #处理组的fpkm
log2_foldchange = log2(treat_FPKM / control_FPKM) #处理组fpkm/对照组fpkm

我们可以看到我们这里重新赋值求的log2_foldchange,原来的表格里有log2.fold_change这一列,为什么还要重新求呢?因为原来表格里求反了求的是:对照组fpkm/处理组fpkm,我们这里改正下。
我们看下计算好的log2_foldchange里面有很多的InfNaN,这是怎么回事?

> log2_foldchange
   [1]  0.3382477530 -0.4605051707 -0.0964487964 -0.0249217524  0.7042396503           NaN           Inf
   [8] -0.9036291456           NaN           NaN  0.4595512248 -0.2834890803 -0.1511719401          -Inf
  [15]           Inf           NaN           NaN           NaN  0.4606267258  0.1979788743  0.1460252515
  [22] -0.3713316852 -0.9538916822 -0.2045978915 -0.2938850235  0.2349539904  0.3777615202  0.4461331227
  [29] -0.1815706646 -1.0014515800           Inf -0.3531645487  0.1261928713  2.8901005944          -Inf
  [36] -0.0146452448 -0.8561317308 -0.1874764797  0.5134263089 -0.0978467676 -0.3708083209  0.8298739826

这是因为有些control组基因的FPKM是0,除数是零,是不符合数学规则的,所以会出现这种情况。
我们需要处理下:
control_FPKM == 0 判断一下control_FPKM的值是否等于0
control_FPKM == 0即除数是0的全都筛选出来

> log2_foldchange[control_FPKM == 0 ]
   [1] NaN Inf NaN NaN Inf NaN NaN NaN Inf Inf NaN NaN NaN Inf NaN NaN NaN NaN Inf Inf NaN NaN NaN NaN NaN NaN
  [27] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN Inf Inf NaN NaN NaN NaN
  [53] NaN NaN Inf NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN Inf NaN NaN NaN Inf NaN

我们可以看到经过log2_foldchange[control_FPKM == 0 ] 操作,把log2_foldchange里的所有 NaN / Inf 选出来了,之后我们把筛选出的 NaN / Inf 强行赋值为0

log2_foldchange[control_FPKM == 0 ] = 0 

查看新生成的log2_foldchange发现还有一些-Inf

> log2_foldchange
   [1]  0.3382477530 -0.4605051707 -0.0964487964 -0.0249217524  0.7042396503  0.0000000000  0.0000000000
   [8] -0.9036291456  0.0000000000  0.0000000000  0.4595512248 -0.2834890803 -0.1511719401          -Inf
  [15]  0.0000000000  0.0000000000  0.0000000000  0.0000000000  0.4606267258  0.1979788743  0.1460252515
  [22] -0.3713316852 -0.9538916822 -0.2045978915 -0.2938850235  0.2349539904  0.3777615202  0.4461331227
  [29] -0.1815706646 -1.0014515800  0.0000000000 -0.3531645487  0.1261928713  2.8901005944          -Inf
  [36] -0.0146452448 -0.8561317308 -0.1874764797  0.5134263089 -0.0978467676 -0.3708083209  0.8298739826
  [43]  1.8493688172  0.0889640074  0.3113824129  0.0000000000  1.1102702040 -0.2531163954  0.0957645721
  [50] -0.6889365003  0.0000000000  0.0000000000  0.4828096335          -Inf -0.0058634211 -0.1436717399
  [57] -0.2029754567  1.9504284898 -0.2426462728 -0.3974959807  0.7211822730 -0.2428425868  0.5005116514
  [64]  0.3829284571 -0.0027983348  0.2696816982 -0.1575258190 -0.5746841946 -0.2751886483  0.0894799450
  [71] -0.1773208535 -1.6980255555  0.0000000000  0.5061142478  0.3639842228          -Inf -0.1930460419

这是因为当treat_FPKM=0即分母是0时,求log2就等于负无穷-Inf
所以,同理,我们把treat_FPKM也处理一下,把log2_foldchange里所有的-Inf赋值为0,这时我们就把画图过程中的异常点过滤掉了。

log2_foldchange[treat_FPKM == 0 ] = 0

此时log2_foldchange里所有的数都是有效数字了,原来NaN / Inf的地方都变成0啦~

准备Y轴。

前面我们也交代过Y轴是p-valuelog10,这时得到的是一个负值,我们再把它变成整数所以乘以-1即:

log10_p_value = log10(volcano_plot$p_value) * -1

此时,X,Y轴都准备好了,我们开始作图

plot(x=log2_foldchange,y=log10_p_value)
volcano plot 火山图

这张图虽然是火山图的样子了,但肯定是不符合paper的要求的,我们还需要对它进行精修,至于怎么精修,明天讲~

参考:
1.理论铺垫部分:如何看懂火山图
2.代码部分:视频里面的代码
3.图形部分:百度图片

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341