как отобразить ось y в кластеризованной дендрограмме python?

#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) 
 

кластерная карта без оси yaxis

как вы можете видеть, он хорошо отображает color_threshold с зелеными и синими линиями, но не показывает отметки оси y.

Если вы просто вызовете иерархию из scipy, вы получите следующее:

 from scipy.cluster import hierarchy
hierarchy.dendrogram(g.dendrogram_col.linkage, labels = iris.columns, color_threshold=35,distance_sort=True) 
 

вы получите этот рисунок:

иерархия scipy с осью yaxis

у кого-нибудь есть какой-нибудь способ отобразить ось 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()
 

кластеризация с осью y

Комментарии:

1. большое вам спасибо! Вчера я потратил 3 часа, пытаясь что угодно, но мне не хватало g.ax_col_dendrogram.axis('on') еще раз большое спасибо