小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【一鍵函數(shù)Free】分組基因表達量箱線圖并添加顯著性函數(shù)

 TS的美夢 2025-09-30


圖片


之前我們介紹過這樣的plot(復現(xiàn)《nature communications》圖表(二):一勞永逸,R語言一鍵畫表達量箱線圖并添加顯著性),關(guān)于基因表達箱線圖并添加顯著性標記的作圖,小伙伴希望能有python版本,所以這里在python中展示一下,其實在之前的(【1:1復刻R版】python版火山圖函數(shù)一鍵出圖,【1:1復刻Cell】python版單細胞多組差異基因火山圖可視化函數(shù))就說過,要想達到R的ggplot2效果,python中matplotlib結(jié)合seaborn就是它的平替。這里我們將復現(xiàn)過程包裝在一個函數(shù)中了,如果您自己需要單獨理解,拆解函數(shù)即可,很多參數(shù)都是默認,比如字體什么的,自行調(diào)整即可。

加載庫:

#導入庫import seaborn as snsimport matplotlib.pyplot as pltimport pandas as pdimport numpy as npimport itertoolsfrom scipy.stats import ttest_indfrom statannotations.Annotator import Annotator
read data:
df = pd.read_csv('./Exp.csv')df.head()
函數(shù),plot主體使用的是seaborn,本函數(shù)檢驗使用的是兩兩t檢驗!
def ks_boxplot_exp(df, group_col, value_col, order=None, figsize=(3,3),                    palette="Set2", x_angle=45, log=False,tick_size=3,frame=True                  ):    """    df : pd.DataFrame,寬表格式數(shù)據(jù),包含group,不同基因表達量    group_col : str,分組列名    #gene_cols : list,要繪制的基因名列表    order : list,分組順序設(shè)置    palette : 分組顏色設(shè)置,可以是列表,也可以是固定每組顏色的字典    figsize : 整體大圖大小尺寸    x_angle:x軸標簽文字角度    log:是否需要對數(shù)據(jù)進行對數(shù)轉(zhuǎn)化處理,默認False    """
    if order is None:        order = df[group_col].unique().tolist()    plot_df = df.copy()    #數(shù)據(jù)做一下log轉(zhuǎn)化    if log:        plot_df[value_col] = np.log2(plot_df[value_col] + 1)    plt.figure(figsize=figsize, dpi=300)    # 箱線圖    ax = sns.boxplot(        data=plot_df, x=group_col, y=value_col, order=order,        palette=palette, fliersize=0,        width=0.6    )    # 帶抖動散點    sns.stripplot(        data=plot_df, x=group_col, y=value_col, order=order,        jitter=True, size=2, alpha=0.7,        palette=palette, dodge=False, ax=ax    )    # 兩兩組合 t 檢驗    pairs = list(itertools.combinations(order, 2))    p_values = []    for g1, g2 in pairs:        vals1 = plot_df.loc[plot_df[group_col]==g1, value_col].dropna()        vals2 = plot_df.loc[plot_df[group_col]==g2, value_col].dropna()        stat, p = ttest_ind(vals1, vals2, equal_var=False)        p_values.append(p)    # 顯著性標記    annotator = Annotator(ax, pairs, data=plot_df, x=group_col, y=value_col, order=order)    annotator.configure(test=None, text_format='star', loc='inside', verbose=0,fontsize=4)    annotator.set_pvalues(p_values)    annotator.annotate()
    for line in ax.lines:        line.set_color('black')         line.set_linewidth(0.5    # 設(shè)置標題和坐標軸    ax.set_title(value_col, fontsize=6)      ax.set_ylabel("")                        ax.set_xlabel("")    plt.xticks(rotation=x_angle)    
    ax.tick_params(axis='both', which='major', labelsize=tick_size)
    if frame:        ax.spines['top'].set_visible(True)        ax.spines['right'].set_visible(True)    else:        ax.spines['top'].set_visible(False)        ax.spines['right'].set_visible(False)    plt.tight_layout()    plt.show()
plot1:
ks_boxplot_exp(df=df,               group_col='Type',               value_col='CXCL8',               log=True,                figsize=(1.5,2.5),               x_angle=90,               tick_size=5)
No description has been provided for this image
classic主題:
ks_boxplot_exp(df=df,               group_col='Type',               value_col='CXCL8',               log=True,                figsize=(1.5,2.5),               x_angle=90,               tick_size=5,              frame=False)
No description has been provided for this image
自定義分組順序:
ks_boxplot_exp(df=df,               group_col='Type',               value_col='CXCL8',               log=True,                figsize=(1.5,2.5),               x_angle=90,               tick_size=5,              frame=False,              order=['Critical', 'Severe', 'Mild','Asymptomatic'])
No description has been provided for this image
循環(huán)批量出圖:因為考慮到很多人有不同的排版以及對于圖形調(diào)整的需求,所以函數(shù)只能畫一個基因,不能一次性畫多個基因并進行排布,畫多個基因可以利用循環(huán)。
#循環(huán)plot多個基因gene_cols = ['CXCL8','MMP8','TLR4']for gene in gene_cols:    ks_boxplot_exp(df=df,               group_col='Type',               value_col=gene,               log=True,                figsize=(1.5,2.5),               x_angle=90,               tick_size=5)
覺得分享有用的點個贊再走唄!
圖片

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多