#matplotlib #scikit-learn #label #dendrogram
Вопрос:
Я хотел бы сгенерировать метки участка в том же цвете, что и группы. Как мне это сделать?
Простой пример теста:
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
mat = np.array([[1.0, 0.5, 0.0],
[0.5, 1.0, -0.5],
[1.0, -0.5, 0.5],
[0.0, 0.5, -0.5]])
dist_mat = mat
linkage_matrix = linkage(dist_mat, "single")
plt.clf()
ddata = dendrogram(linkage_matrix, color_threshold=0.8)
Предыдущий код генерирует этот график:
но я хочу, чтобы индекс 0 и 2 был синим, а 1 и 3-красным.
Ответ №1:
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
mat = np.array([[1.0, 0.5, 0.0], [0.5, 1.0, -0.5], [1.0, -0.5, 0.5], [0.0, 0.5, -0.5]])
dist_mat = mat
linkage_matrix = linkage(dist_mat, "single")
# plt.clf()
ddata = dendrogram(linkage_matrix, color_threshold=0.8)
# We get the color of leaves from the scipy dendogram docs
# The key is called "leaves_color_list". We iterate over the list of these colors and set colors for our leaves
# Please note that this parameter ("leaves_color_list") is different from the "color_list" which is the color of links
# (as shown in the picture)
# For the latest names of these parameters, please refer to scipy docs
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html
for leaf, leaf_color in zip(plt.gca().get_xticklabels(), ddata["leaves_color_list"]):
leaf.set_color(leaf_color)
plt.show()
Выходные данные, как показано ниже. Разница между параметрами ( color_list
и leaves_color_list
) была выделена, чтобы показать разницу.
Комментарии:
1. @JohanC отметил озабоченность по поводу части явных индексов! исправлю как можно скорее. Но как отметить более раннюю версию, следует ли мне обратить внимание на предостережение или, скорее, указать источник текущего ключевого слова «leaves_color_list» из scipy, чтобы пользователь мог сам проверить, изменится ли оно позже?
2. @JohanC только что проверил документ scipy .
color_list
Представляет цвета для ссылок (три ссылки на этом изображении), в то времяleaves_color_list
как для листьев (4 листа на этом изображении)3. Спасибо, что проверили. Итак, это совершенно новый параметр. Было бы важно упомянуть текущую версию scipy, чтобы люди, тестирующие более старую версию и получающие «странную» ошибку, знали, что им следует обновить. Смотрите, как a.o. Codementor прекращает использовать индексы! об индексах.
4. @JohanC соответствующим образом обновил ответ (1) удалил явную индексацию, приятное чтение (Прекратите читать индексы!) (2) добавлены ссылки на документ scipy и также объяснен параметр на изображении, спасибо за ваши предложения!