You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用skbio基于JSD距离矩阵绘制二维PCoA可视化图

解决方案

首先明确:可以直接通过Skbio实现2D PCoA图绘制,不需要额外引入其他工具,两种实现方案如下:

方案1:直接调用skbio内置plot方法指定坐标轴

skbio的OrdinationResults.plot()方法支持通过axes参数指定需要可视化的主坐标轴索引,要绘制PC1和PC2的二维图,只需要传入axes=[0,1]即可(索引从0开始,对应排序第一、第二的主坐标),修改后代码如下(已修正原代码中matplotlib导入的拼写错误):

import matplotlib.pyplot as plt    
from skbio import DistanceMatrix
from skbio.stats.ordination import pcoa    

# 加载距离矩阵到skbio格式
dm = DistanceMatrix(matrix, ids=sample_names)

plt.style.use('ggplot')

pcoa_results = pcoa(dm)
# 指定axes参数选择前两个轴绘制二维图
fig = pcoa_results.plot(df=groups, column='Cluster', cmap='Set1', s=50, axes=[0,1])
plt.show()

如果需要自定义坐标轴标签、标题等样式,因为返回的是matplotlib的figure对象,可以直接用matplotlib的原生方法修改即可,比如给坐标轴加上解释度:

ax = fig.gca()
# 从pcoa结果中提取解释度百分比
pco1_exp = round(pcoa_results.proportion_explained[0]*100, 2)
pco2_exp = round(pcoa_results.proportion_explained[1]*100, 2)
ax.set_xlabel(f'PCo1 ({pco1_exp}%)')
ax.set_ylabel(f'PCo2 ({pco2_exp}%)')
ax.set_title('JSD距离PCoA分析')
plt.show()

方案2:手动提取坐标自定义绘制(自由度更高)

如果内置plot方法的样式不能满足你的需求,可以直接从pcoa_results.samples中提取所有样本的主坐标值,结合matplotlib/seaborn完全自定义绘图,示例代码如下:

import seaborn as sns
import pandas as pd

# 提取PC1、PC2坐标,合并分组信息
pcoa_df = pd.DataFrame(data = pcoa_results.samples.values[:, :2],
                       columns = ['PCo1', 'PCo2'],
                       index = sample_names)
pcoa_df = pcoa_df.join(groups['Cluster'])

# 自定义绘制
plt.figure(figsize=(8,6))
sns.scatterplot(data=pcoa_df, x='PCo1', y='PCo2', hue='Cluster', palette='Set1', s=50)
# 添加解释度标签
pco1_exp = round(pcoa_results.proportion_explained[0]*100, 2)
pco2_exp = round(pcoa_results.proportion_explained[1]*100, 2)
plt.xlabel(f'PCo1 ({pco1_exp}%)')
plt.ylabel(f'PCo2 ({pco2_exp}%)')
plt.title('JSD距离PCoA分析')
plt.legend(title='Cluster')
plt.show()

其他可选工具

如果后续有更复杂的可视化需求,也可以使用以下工具:

  • scikit-bio本身已经可以覆盖绝大多数排序分析需求
  • qiime2内置的可视化模块,适合微生物组全流程分析场景
  • vega/plotly可以生成交互式PCoA图

内容的提问来源于stack exchange,提问作者Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:36:07