我如何在python中制作vulcanoplot? [关闭]

问题描述 投票:-1回答:1

我有两组14823个基因(疾病和对照)的数据,我想绘制一个vulcano图。我已经计算出p值,但是如何用倍数变化绘制它呢?如果我尝试散点图,则x和y的大小不相同。

python plot
1个回答
0
投票

在下面的示例中,我模拟了一些数据,在两组数据之间进行了t检验,并计算了倍数变化和p值,然后将所有这些数组都放入了data.frame中。

X = np.random.poisson(10,size=(10000,5))
Y = np.concatenate((np.random.poisson(5,size=(1000,5)),
                np.random.poisson(10,size=(8000,5)),
                np.random.poisson(20,size=(1000,5))))
test= stats.ttest_ind(X,Y,axis=1)   
l2fc = np.log2(np.mean(X,axis=1) / np.mean(Y,axis=1))                                      

df = pd.DataFrame({'gene':['gene'+str(i) for i in range(10000)],
                   'l2fc':l2fc,
                   'stat':test.statistic,
                   'pvalue':test.pvalue
                  })
df['log10P'] = -np.log10(df['pvalue'])

我还在最后一步中计算了-log10(pvalue)。因此数据框如下所示:

gene    l2fc    stat    pvalue  log10P
0   gene0   1.289507    5.200000    0.000822    3.084916
1   gene1   0.455679    2.525343    0.035512    1.449625
2   gene2   0.665581    2.039184    0.075770    1.120505
3   gene3   1.424498    2.897144    0.019979    1.699426
4   gene4   1.231326    4.180039    0.003079    2.511526

在这种情况下,如果我们想在某些标签上加上-log10P> 5:

df[df.log10P>6]

    gene    l2fc    stat    pvalue  log10P
9231    gene9231    -0.888969   -15.777870  2.602345e-07    6.584635
9302    gene9302    -1.330149   -17.666667  1.077465e-07    6.967597
9531    gene9531    -1.239827   -13.492385  8.734624e-07    6.058756
9596    gene9596    -1.550197   -19.091883  5.867840e-08    7.231522

现在我们可以使用seaborn进行绘图:

plt.figure(figsize = (6,8))
ax = sns.scatterplot(data=df,x='l2fc',y='log10P')
labelgenes = df.gene[df.log10P>6]
for gene in labelgenes:
    row = df['gene']== gene 
    ax.text(df.l2fc[row]+0.04, df.log10P[row], gene)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.