#python #seaborn #heatmap #dendrogram
#python #seaborn #тепловая карта #дендрограмма
Вопрос:
Я борюсь с python seaborn clustermap. Я хотел бы построить дендрограмму над тепловой картой с видимой осью y. Позвольте мне попытаться лучше объяснить на этом примере:
import seaborn as sns
from scipy.cluster import hierarchy
iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris,row_cluster=False,figsize = (18,14),dendrogram_ratio=(.1, .3))
den = hierarchy.dendrogram(g.dendrogram_col.linkage, labels = iris.columns, color_threshold=35,distance_sort=True,ax = g.ax_col_dendrogram)
как вы можете видеть, он хорошо отображает color_threshold с зелеными и синими линиями, но не показывает отметки оси y.
Если вы просто вызовете иерархию из scipy, вы получите следующее:
from scipy.cluster import hierarchy
hierarchy.dendrogram(g.dendrogram_col.linkage, labels = iris.columns, color_threshold=35,distance_sort=True)
вы получите этот рисунок:
у кого-нибудь есть какой-нибудь способ отобразить ось y на дендрограмме clustermap? Спасибо Эмануэле Мартини
Ответ №1:
Первое изменение, которое необходимо, это включить axis
. Затем вам нужно установить локатор тиков и форматировщик. При желании вы можете включить горизонтальную сетку, и вы можете сделать некоторые шипы видимыми.
Вот несколько примеров кода:
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter, MaxNLocator
import seaborn as sns
from scipy.cluster import hierarchy
iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris, row_cluster=False, figsize=(18, 14), dendrogram_ratio=(.1, .3))
den = hierarchy.dendrogram(g.dendrogram_col.linkage, labels=iris.columns,
color_threshold=35, distance_sort=True, ax=g.ax_col_dendrogram)
g.ax_col_dendrogram.axis('on')
# sns.despine(ax=g.ax_col_dendrogram, left=False, right=True, top=True, bottom=True)
g.ax_col_dendrogram.yaxis.set_major_locator(MaxNLocator())
g.ax_col_dendrogram.yaxis.set_major_formatter(ScalarFormatter())
g.ax_col_dendrogram.grid(axis='y', ls='--', color='grey')
# g.ax_col_dendrogram.yaxis.tick_right()
plt.show()
Комментарии:
1. большое вам спасибо! Вчера я потратил 3 часа, пытаясь что угодно, но мне не хватало
g.ax_col_dendrogram.axis('on')
еще раз большое спасибо