当前位置:首页>python>期刊图片复现|Python绘制主坐标分析(PCoA)图

期刊图片复现|Python绘制主坐标分析(PCoA)图

  • 2026-09-09 17:45:27
期刊图片复现|Python绘制主坐标分析(PCoA)图

代码绘制成果展示

论文:Multi-cohort analysis of metagenome for type 2 diabetes identified universal gut microbiota signatures across populations
论文原图

图上的每一个点代表一个受试者样本 。空间上越靠近的两个点,说明这两个样本的群结构越相似;离得越远,说明差异越大。不同颜色代表不同组样本。坐标轴(PCoA1 和 PCoA2)分别是解释样本间差异排名前两位的“主坐标”。括号里的百分比(如 PCoA1 11.85%)表示该坐标轴所能解释的数据总体变异的百分比。数值越大,说明该方向上的区分度越强。椭圆圈代表该组别数据的95%置信区间。左上角的文本是PERMANOVA的统计检验结果。

仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib.patches as mpatchesfrom matplotlib.lines import Line2Dfrom scipy.stats import chi2

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#F18C79', '#6AC2D6', '#8FCA81', '#F5C05F', '#D196CA', '#8C8C8C'],}

第三部分

置信椭圆绘制函数
# =========================================================================================# ======================================3.置信椭圆绘制函数=======================================# =========================================================================================def add_confidence_ellipse(ax, points, color):    #检查样本数    if len(points) < 3:        return    ellipse_width = 2 * np.sqrt(chi2.ppf(0.95, 2)) * np.sqrt(eigenvals[sort_idx[0]])  #椭圆宽    ellipse_height = 2 * np.sqrt(chi2.ppf(0.95, 2)) * np.sqrt(eigenvals[sort_idx[1]])  #椭圆高    angle = np.degrees(np.arctan2(*eigenvecs[:, sort_idx[0]][::-1]))  #旋转角度    #填充色    face_rgba = mcolors.to_rgba(color, alpha=0.15)    ax.add_patch(ellipse)  #加到图上

第四部分

PCoA子图绘制函数:配色方案提取以及辅助线绘制
# =========================================================================================# ======================================4.PCoA子图绘制函数=======================================# =========================================================================================def draw_pcoa_subplot(ax, df, panel_letter, distance_method, var_pcoa1, var_pcoa2, r2_val, p_val, scheme_id):    ax.axhline(y=0,  #y               color='gray',  #颜色               linestyle='--',  #虚线               linewidth=1.2,  #粗细               alpha=0.6,  #透明度               zorder=0)  #层    #垂直辅助线    ax.axvline(x=0,  #x               color='gray', #颜色               linestyle='--', #虚线               linewidth=1.2,#粗细               alpha=0.6,  #透明度               zorder=0)  #层

第五部分

PCoA子图绘制函数:散点与椭圆绘制
    #遍历组    for group in groups:        #绘制散点        ax.scatter(data['PCoA1'],  #x                   data['PCoA2'],  #y                   color=colors[group],  #颜色                   s=70,  #大小                   alpha=0.9,  #透明度                   edgecolors='white',  #边缘线颜色                   linewidths=0.5,  #边缘线粗细                   label=group,  #图例标签                   zorder=3)  #层

第六部分

PCoA子图绘制函数:xy轴标题绘制、刻度样式设置、边框设置、统计结果添加、图例设置
    #x轴标题    ax.set_xlabel(f'PCoA1 ({var_pcoa1:.2f}%)',  #文本                  fontsize=16,  #大小                  fontweight='bold')  #加粗    #y轴标题    ax.set_ylabel(f'PCoA2 ({var_pcoa2:.2f}%)',#文本                  fontsize=16,  #大小                  fontweight='bold')  #加粗    #设置xy轴刻度    ax.tick_params(axis='both',  #轴                   which='major',  #主刻度                   labelsize=16,  #字体大小                   width=2,  #粗细                   length=5,  #长                   direction='out')  #朝外    #设置刻度字体粗细    for label in ax.get_xticklabels() + ax.get_yticklabels():        label.set_fontweight('bold')    #设置边框粗细    for spine in ax.spines.values():        spine.set_linewidth(2)    #添加子图标题    ax.set_title(f"PCoA_{distance_method}" ,  #文本                 fontsize=16,  #大小                 fontweight='bold',  #加粗                 pad=12)  #间距    #添加子图编号    ax.text(-0.15,  #x            1.02,  #y            panel_letter,  #编号            transform=ax.transAxes,  #坐标系            fontsize=22,  #字体大小            fontweight='bold',  #加粗            va='bottom')  #垂直对齐

第七部分

主绘图函数
# =========================================================================================# ======================================5.主绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df_real, scheme_id):    #创建画布    fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(14, 5.5))    plt.subplots_adjust(wspace=0.2)  #子图间距    x_margin_jc = (df_jc['PCoA1'].max() - df_jc['PCoA1'].min()) * 0.35  #x轴间距    y_margin_jc = (df_jc['PCoA2'].max() - df_jc['PCoA2'].min()) * 0.35  #y轴间距    ax2.set_xlim(df_jc['PCoA1'].min() - x_margin_jc, df_jc['PCoA1'].max() + x_margin_jc)  #x轴范围    ax2.set_ylim(df_jc['PCoA2'].min() - y_margin_jc, df_jc['PCoA2'].max() + y_margin_jc)  #y轴范围

第八部分

执行部分:负责读取本地Excel文件数据、执行距离计算、主坐标降维、多元方差分析,并调用绘图函数绘制保存输出图片。
# =========================================================================================# ======================================6.执行部分=======================================# =========================================================================================if __name__ == '__main__':    excel_path = r'data.xlsx'  #原始数据    df_abund = pd.read_excel(excel_path, sheet_name='Abundance', index_col=0)  #丰度表    df_group = pd.read_excel(excel_path, sheet_name='Metadata', index_col=0)  #分组表    df_abund.index = df_abund.index.astype(str)  #格式化索引类型    df_group.index = df_group.index.astype(str)    #评估    stats_bc = {'r2': calc_r2(perm_bc['test statistic'], df_group), 'p': perm_bc['p-value']}    stats_jc = {'r2': calc_r2(perm_jc['test statistic'], df_group), 'p': perm_jc['p-value']}        scheme_id = 1        print('正在绘制并保存方案:', scheme_id)        plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:

excel_path = r'data.xlsx'  #原始数据

2.读取指定表的数据,执行部分:

df_abund = pd.read_excel(excel_path, sheet_name='Abundance', index_col=0)  #丰度表df_group = pd.read_excel(excel_path, sheet_name='Metadata', index_col=0)  #分组表

3.设置是否进行批量绘图,执行部分:

plot_all = True

4.设置绘图结果的保存地址,主绘图函数部分:

plt.savefig(fr'PCoA_Result_Scheme_{scheme_id}.png', dpi=300,bbox_inches='tight')

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章