美文网首页
【可视化】matplotlib—坝上繁星

【可视化】matplotlib—坝上繁星

作者: XuningFan | 来源:发表于2020-07-15 18:17 被阅读0次
    image.png

    今天看文献的时候,看到一张图很经典,也很有意思,总结来说就是坝上繁星点点,不经想手动用python实现一下~~

    巧妇难为无米之炊,来首先导入米~~

    #! /usr/bin/env python3
    import re,sys,os
    import numpy as np
    import pandas as pd
    import matplotlib as mpl
    mpl.use('Agg')
    from matplotlib import pyplot as plt
    plt.style.use('ggplot')
    import seaborn as sns
    from scipy import stats
    

    其次设置main Figure:

    ax=fig.add_axes([0.2,0.2,0.7,0.7],axisbg='w')
    ax.tick_params(left='on',top='off',bottom='on',right='off')
    
    for loc in ['left','bottom']:
        ax.spines[loc].set_linewidth(1)
        ax.spines[loc].set_color('k')
    
    for loc in ['right','top']:
        ax.spines[loc].set_visible(False)
    

    根据每条染色体的signal画峰图:

    sns.swarmplot(x="Samples",y="signal",color='k',data=tad_sig_df,ax=ax)
    
    #tad_sig_df (三列分别为 sample  chr  signal)
    #1_week chr1    0.2124825
    #1_week chr2    0.2491146
    #      .........
    #2_week  chr1  0.2138446
    colors=['#84632E','#D27A79','#C84442','#822329','#2F4898','#2C4D60']
    

    根据每条染色体的signal 画bar图:

    plt.bar([i-0.4 for i in list(range(0,8))],sam_sig_df['signal'],color=colors)
    
    #sam_sig_df (两列:sample  signal)
    #1_week 0.2327716
    #2_weeks    0.2401719
    #3_weeks    0.2437665
    #4_weeks    0.2499037
    #5_weeks    0.3866738
    #6_weeks    0.401157
    #7_weeks    0.4333483
    #8_weeks    0.3651956
    
    ax.set_ylabel("Relative variance of TAD signal")
    ax.set_xticks([i+0.1  for i in list(range(sam_sig_df.shape[0]))])
    ax.set_xticklabels(sam_sig_df['sample'],rotation=45)
    ax.set_ylim(0,0.7)
    

    根据秩和检验计算两两样本之间的p值。
    首先整理数据格式如下:

    #df2(nxn的矩阵)
    # chrom 1_week  2_week  3_week   4_week 5_week  6_week  7_week  8_week
    # chr1  0.2124825   0.2138446   0.2681415   0.2320308   0.3648542   0.3719555   0.4154264   0.3394036
    # chr2  0.2491146   0.2554405   0.2567992   0.2650865   0.4097313   0.4253969   0.4587423   0.3856153
    # chr3  0.2205689   0.22094 0.2214508   0.2258953   0.3572473   0.3769948   0.4211215   0.3438275
    # chr4  0.2208674   0.247468    0.2432454   0.2639721   0.4302134   0.4141755   0.4414896   0.3693487
    # chr5  0.2237626   0.2580336   0.2526648   0.255073    0.3984676   0.4200537   0.4381874   0.3612952
    # chr6  0.2415278   0.2400543   0.2517413   0.239386    0.3853607   0.4017974   0.4341992   0.3602986
    # chr7  0.2336476   0.234182    0.2414343   0.2406793   0.3555941   0.3677946   0.3882644   0.3354686
    # chr8  0.2282274   0.2357507   0.2349158   0.2397335   0.4051282   0.414629    0.4580185   0.3892537
    # chr9  0.2342663   0.2385664   0.23559 0.2473451   0.3881347   0.399435    0.4376989   0.3636179
    # chr10 0.2438228   0.242409    0.243789    0.2464791   0.404039    0.4146366   0.4514503   0.3739338
    # chr11 0.2355708   0.2506878   0.2361022   0.259202    0.3887114   0.4084879   0.4376043   0.3648314
    # chr12 0.2668528   0.2573399   0.2602321   0.2681254   0.4455759   0.4686056   0.486874    0.4527546
    # chr13 0.2642351   0.2991617   0.288949    0.3143113   0.4398373   0.4596589   0.526111    0.4121843
    # chr14 0.223002    0.2101223   0.2196958   0.2623507   0.3686394   0.4220504   0.4296982   0.3881499
    # chr15 0.2181983   0.2297351   0.2189778   0.2365727   0.3629807   0.3722136   0.4108971   0.3422202
    # chr16 0.2369795   0.2387444   0.2402405   0.2416215   0.3731693   0.3903155   0.4269084   0.3636249
    # chr17 0.225208    0.2342196   0.2283373   0.2354873   0.3276592   0.3425167   0.3788839   0.3140054
    # chr18 0.235575    0.254464    0.2422985   0.2628256   0.4198472   0.4279283   0.4684907   0.3979184
    # chr19 0.2512119   0.2601831   0.2505591   0.2589785   0.4025605   0.420783    0.4507594   0.3899232
    # chrX  0.2071519   0.1946505   0.2140269   0.2163633   0.3106201   0.3144296   0.317807    0.3004519
    

    循环计算p值

    for i in list(range(1,len(sams))):
            sam1=np.array(df2.iloc[:,i])
        sam2=np.array(df2.iloc[:,i+1])
        all_sams=np.ravel([sam1,sam2])
        height=np.max(all_sams)
        stat,pval=stats.ranksums(sam1,sam2)
        ax.annotate("", xy=(i-0.9,height+0.03), xycoords='data',xytext=(i+0.1,height+0.03),textcoords='data',arrowprops=dict(arrowstyle="-",ec ='#aaaaaa',connectionstyle="arc3,rad=0"))
        sig='%.3f'%pval
        if pval<0.05:
            sig='*'
        if pval<0.001:
            sig='**'
        if pval <0.005:
            sig='***'
    
        ax.text((i-0.4),height+0.05,sig,horizontalalignment='center',verticalalignment='center')
    

    大功告成,保存图片~~

    fig.savefig("./example.pdf")
    

    最后成图如下:


    image.png

    相关文章

      网友评论

          本文标题:【可视化】matplotlib—坝上繁星

          本文链接:https://www.haomeiwen.com/subject/sjidhktx.html