Я использовал этот сценарий:
Код: Выделить всё
import numpy as np
import pandas as pd
from scipy.spatial import distance
from skbio.stats.ordination import pcoa, pca
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_excel("relative_abundances.xlsx")
dfnumpy = df.to_numpy()
dfdistances=distance.pdist(dfnumpy, 'braycurtis') #bray-curtis distance matrix
pcoa_results = pcoa(dfdistances, dimensions=2) #pcoa analysis
coordinates = pcoa_results.samples #pcoa analysis coordinates
df_pcoa = coordinates[["PC1", "PC2"]]
indexdf = pd.read_excel("index.xlsx") #Assigns each sample a type
df_merged = pd.concat([df_pcoa.reset_index(drop=True), indexdf.reset_index(drop=True)], axis=1) #joins coordinates df with the index
sns.scatterplot(data=df_merged,x="PC1",y="PC2",hue="Type") #plots the PCoA
plt.title("Figure 1: Scatter Plot",
fontsize=16)
plt.xlabel('PcoA 1',
fontsize=16)
plt.ylabel('PcoA 2',
fontsize=16)
plt.show(block=True)
График, который я получаю:
График PcoA, созданный кодом вопроса.
Проблема в том, что я хочу нарисовать три доверительных эллипса, по одному для каждого типа выборки, аналогично:

Единственное, что я нашел для Python, — это документация matplotlib, но я не могу интегрировать этот код с моей точечной диаграммой. Я видел, как некоторые люди говорили о невозможности выполнить этот анализ в Python и вместо этого рекомендовали ggplot2 из R.
Мобильная версия