Я пытаюсь добавить гистограмму (с накоплением или иным образом) для каждой строки в кластерной карте seaborn.
Допустим, у меня есть такой фрейм данных:
import pandas as pd
import numpy as np
import random
df = pd.DataFrame(np.random.randint(0,100,size=(100, 8)), columns=["heatMap_1","heatMap_2","heatMap_3","heatMap_4","heatMap_5", "barPlot_1","barPlot_1","barPlot_1"])
df['index'] = [ random.randint(1,10000000) for k in df.index]
df.set_index('index', inplace=True)
df.head()
heatMap_1 heatMap_2 heatMap_3 heatMap_4 heatMap_5 barPlot_1 barPlot_1 barPlot_1
index
4552288 9 3 54 37 23 42 94 31
6915023 7 47 59 92 70 96 39 59
2988122 91 29 59 79 68 64 55 5
5060540 68 80 25 95 80 58 72 57
2901025 86 63 36 8 33 17 79 86
Я могу использовать первые 5 столбцов (в этом примере, начинающихся с префикса heatmap_), чтобы создать кластерную карту seaborn, используя эту (илиэквивалент моря):
sns.clustermap(df.iloc[:,0:5], )
и столбчатая диаграмма с накоплением для последних четырех столбцов (в этом примере, начиная с префикса barPlot_), используя это: df.iloc[:,5:8].plot(kind='bar', stacked=True)
, но яЯ немного запутался в том, как объединить оба типа сюжета.Я понимаю, что кластерная карта создает свои собственные фигуры, и я не уверен, смогу ли я извлечь только тепловую карту из кластерной карты и затем использовать ее с подфигурами.(Обсуждается здесь: Добавление кластерной карты морского происхождения к рисунку с другими графиками ).Это создает странный вывод.Редактировать: Используя это:
import pandas as pd
import numpy as np
import random
import seaborn as sns; sns.set(color_codes=True)
import matplotlib.pyplot as plt
import matplotlib.gridspec
df = pd.DataFrame(np.random.randint(0,100,size=(100, 8)), columns=["heatMap_1","heatMap_2","heatMap_3","heatMap_4","heatMap_5", "barPlot_1","barPlot_2","barPlot_3"])
df['index'] = [ random.randint(1,10000000) for k in df.index]
df.set_index('index', inplace=True)
g = sns.clustermap(df.iloc[:,0:5], )
g.gs.update(left=0.05, right=0.45)
gs2 = matplotlib.gridspec.GridSpec(1,1, left=0.6)
ax2 = g.fig.add_subplot(gs2[0])
df.iloc[:,5:8].plot(kind='barh', stacked=True, ax=ax2)
создает это:
, которое не очень хорошо соответствует (то есть из-за дендрограмм есть сдвиг).
Другой вариант - вручную выполнить кластеризацию и создать тепловую карту matplotlib, а затем добавить связанные подфигуры, такие как столбцы (обсуждается здесь: Как получить плоскую кластеризацию, соответствующую цветным кластерам в дендрограмме, созданной scipy )
Есть ли способ использовать кластерную карту в качестве вспомогательного участка наряду с другими графиками?
Это результат, который я ищу [1] :