2015-03-23 4 views
0

Как изменить высоту дендрограмм, которые scipy вычисляет при иерархической кластеризации?Управление высотой dendrograms python

MWE

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

# Generate random features and distance matrix. 
x = scipy.rand(40) 
D = scipy.zeros([40,40]) 
for i in range(40): 
     for j in range(40): 
     D[i,j] = abs(x[i] - x[j]) 

# Compute and plot first dendrogram. 
fig = pylab.figure(figsize=(8,8)) 
ax1 = fig.add_axes([0.09,0.1,0.2,0.6]) 
Y = sch.linkage(D, method='centroid') 
Z1 = sch.dendrogram(Y, orientation='right') 
ax1.set_xticks([]) 
ax1.set_yticks([]) 

# Compute and plot second dendrogram. 
ax2 = fig.add_axes([0.3,0.71,0.6,0.2]) 
Y = sch.linkage(D, method='single') 
Z2 = sch.dendrogram(Y) 
ax2.set_xticks([]) 
ax2.set_yticks([]) 

# Plot distance matrix. 
axmatrix = fig.add_axes([0.3,0.1,0.6,0.6]) 
idx1 = Z1['leaves'] 
idx2 = Z2['leaves'] 
D = D[idx1,:] 
D = D[:,idx2] 
im = axmatrix.matshow(D, aspect='auto', origin='lower', cmap=pylab.cm.YlGnBu) 
axmatrix.set_xticks([]) 
axmatrix.set_yticks([]) 

# Plot colorbar. 
axcolor = fig.add_axes([0.91,0.1,0.02,0.6]) 
pylab.colorbar(im, cax=axcolor) 
fig.show() 
fig.savefig('dendrogram.png') 

ответ

0

Вы должны быть в состоянии применить ось к дендрограммам, а затем относиться к ним, как и любому другому участку. На данный момент кажется, что вы сделали ось, но не добавили ее в дендрограмму. Что произойдет, если вы используете

Z1 = sch.dendrogram(Y, orientation='right', ax=ax1) 

и т. Д. В ваших вызовах?

Смежные вопросы