Несколько вопросов по дендрограмме - Python (Scipy) - PullRequest
5 голосов
/ 14 марта 2012

Я новичок в scipy, но мне удалось получить ожидаемую дендрограмму. У меня есть еще несколько вопросов;

  1. В дендрограмме расстояние между некоторыми точками равно 0, но это не так видимый из-за границы изображения. Как я могу удалить границу и сделать нижний предел оси Y до -1, чтобы он был хорошо виден. например расстояние между этими точками составляет 0 (13,17), (2,10), (4,8,19)
  2. Как я могу обрезать / обрезать на определенном расстоянии. например, чернослив в 0.4
  3. Как записать эти кластеры (после обрезки) в файл

Мой код Python:

import scipy
import pylab
import scipy.cluster.hierarchy as sch
import numpy as np

D = np.genfromtxt('LtoR.txt', dtype=None)
def llf(id):
    return str(id)
fig = pylab.figure(figsize=(10,10))
Y = sch.linkage(D, method='single')
Z1 = sch.dendrogram(Y,leaf_label_func=llf,leaf_rotation=90)
fig.show()
fig.savefig('dendrogram.png')

Дендрограмма: enter image description here

спасибо.

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

1. fig.gca().set_ylim(-0.4,1.2) Здесь gca() возвращает текущий axes объект, поэтому вы можете дать ему имя

ax=fig.gca()
ax.set_ylim(-0.4,ax.get_ylim()[1])
0 голосов
/ 04 августа 2017

Граница показана из-за оси. Таким образом, вы можете удалить границу, используя следующую команду:

fig = plt.figure(figsize=(10, 8))
ax2 = fig.add_axes([0.3, 0.71, 0.6, 0.2])
Y = sch.linkage(D, method='ward')
Z2 = sch.dendrogram(Y)
ax2.set_xticks([])
ax2.set_yticks([])
ax2.axis('off')

ax.axis('off') скрывает границу.

0 голосов
/ 19 мая 2015
  1. Вы можете обрезать дендрограмму и получить кластеры, используя fcluster . Подрезать на расстоянии 0,4:

    clusters = sch.fcluster(Y,t = 0.4,criterion = 'distance')

  2. Полученный массив (clusters) содержит метку кластера для каждого наблюдения в ваших данных. Вы можете написать массив, используя numpy.savetxt :

    np.savetxt('clusters.txt', clusters, delimiter=',')

...