Clustermap pivot_table с цветными листьями (ряд) с использованием морского рожка - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть фрейм данных со всеми парами расстояний между (фаговыми) вирусоподобными геномами.

distData = pd.read_csv("distances.tab",sep="\t")
print(distData.head())
           reference-ID              query-ID  distance  p-value shared-hashes
0  H055-6_SuMu_C01_Hinf  H055-6_SuMu_C01_Hinf  0.000000      0.0     1000/1000
1  H049-6_SuMu_C01_Hinf  H055-6_SuMu_C01_Hinf  0.002000      0.0      921/1000
2  H013-2_SuMu_C01_Hinf  H055-6_SuMu_C01_Hinf  0.010914      0.0      660/1000
3  H081-1_SuMu_C01_Hinf  H055-6_SuMu_C01_Hinf  0.040448      0.0      272/1000
4  H058-3_SuMu_C01_Hinf  H055-6_SuMu_C01_Hinf  0.040310      0.0      273/1000

И я хочу воспроизвести кластерную карту с цветными листьями для расстоянийквадратная матрица squareDistMatrix , с использованием панд и морского рожка.

        #Create the heatmap for distances
        squareDistMatrix = pd.pivot_table(distData, values='distance', index=['query-ID'], columns='reference-ID')
        squareDistMatrix.head()

        reference-ID    A001-2_Mu_C10_Aact  A001-3_Aaphi23_C25_Aact     A005-1_B3_C13_Aact  A010-2_B3_C13_Aact  A011-1_B3_C13_Aact  
    query-ID                                                                                    
    A001-2_Mu_C10_Aact  0.000000    1.0     1.000000    0.136948    0.295981    
    A001-3_Aaphi23_C25_Aact     1.000000    0.0     1.000000    1.000000    1.000000 
    A005-1_B3_C13_Aact  1.000000    1.0     0.000000    0.052915    0.050764    
    A010-2_B3_C13_Aact  0.136948    1.0     0.052915    0.000000    0.005942        
    A011-1_B3_C13_Aact  0.295981    1.0     0.050764    0.005942    0.000000    

Я перешел по следующим ссылкам:

Установка col_colors в карте скопления морского от панд

https://seaborn.pydata.org/examples/structured_heatmap.html

Однако эти ссылки не для кластерной карты сводной таблицы, созданной исходным кадром данных, содержащим данные.Также я хотел бы закрасить листья матрицы расстояний подстрокой в ​​названии каждой строки.То есть все имена вирусов со средним SuMu находятся в одном суперскластере , эволюционной группировке, поэтому они присвоены одного цвета .

Я решил это с помощью другого стекового потокаpost:

Цвета колонок в кластерной карте Python Seaborn дают неожиданные результаты

Я просто вставляю свое решение для других заинтересованных пользователей:

#Function to get the super cluster name from the full name of the phage
#Input: phageFullName "H055-6_SuMu_C01_Hinf" (String)
#Output: superClusterName "SuMu" (String)
def getSuperClusterName(phageFullName):
    return phageFullName.split("_")[1]
uniqueSuperClusters = distData['superCluster'].unique()
numUniqueSuperClusters = len(uniqueSuperClusters)
print("Unique superclusters: " + str(numUniqueSuperClusters))
#create distinct colors one for each supercluster
superClusterPalette = sns.husl_palette(numUniqueSuperClusters, s=.45)

#dict -> uniqueSuperClusterName: uniqueColour
superClusters2ColoursDict = dict(zip(uniqueSuperClusters, superClusterPalette))

#create a list of the supercluster of each row of the square distance matrix
superClusters = distData.superCluster
squareMatrixRows = list(squareDistMatrix.index)
superClusterInSquareMatrix = [] 
for row in squareMatrixRows:
    superClusterInSquareMatrix.append(getSuperClusterName(row))

#create a Series of supercluster as found in the distance matrix
superClusterSeries = pd.Series(superClusterInSquareMatrix)
#map each supercluster to a colour using the dictionary
superClusterColours = pd.Series(superClusterSeries).map(superClusters2ColoursDict)

#clustermap with colors in the rows
sns.clustermap(squareDistMatrix, metric="correlation", method="single", cmap="RdBu_r", standard_scale=1, row_colors=superClusterColours.values, linewidths=.75, figsize=(13, 13))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...