2012-03-14 7 views
4

Je suis nouveau sur scipy mais j'ai réussi à obtenir le dendrogramme attendu. Je suis d'autres questions;Quelques questions sur dendrogram - python (Scipy)

  1. Dans le dendrogramme, la distance entre certains points sont 0 mais ce ne est pas visible en raison de la frontière d'image. Comment puis-je supprimer la bordure et faire la limite inférieure de l'axe y à -1, de sorte qu'il est clairement visible. par exemple. distance entre ces points sont 0 (13,17), (2,10), (4,8,19)
  2. Comment puis-je élaguer/tronquer sur une distance particulière. par exemple élaguer à 0.4
  3. Comment écrire ces grappes (après la taille) dans un fichier

Mon code 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') 

Dendrogramme: enter image description here

merci.

Répondre

2

1. fig.gca().set_ylim(-0.4,1.2) Ici gca() retourne l'objet axes en cours, de sorte que vous pouvez lui donner un nom

ax=fig.gca() 
ax.set_ylim(-0.4,ax.get_ylim()[1]) 
0
  1. Vous pouvez élaguer le dendrogramme et obtenir vos clusters à l'aide fcluster . Tailler à une distance de 0,4:

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

  2. Le tableau résultant (clusters) contient l'étiquette de cluster pour chaque observation dans vos données. Vous pouvez écrire le tableau en utilisant numpy.savetxt:

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

0

La frontière est indiquée en raison de l'axe. Ainsi, vous pouvez supprimer la bordure en utilisant la commande suivante:

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') cache la frontière.