python - single - scipy linkage
El dendrograma generado por scipy-cluster no muestra (2)
Estoy usando scipy-cluster para generar un clúster jerárquico en algunos datos. Como paso final de la aplicación, llamo a la función dendrogram
para trazar la agrupación. Me estoy ejecutando en Mac OS X Snow Leopard usando el Python 2.6.1 incorporado y este paquete matplotlib . El programa funciona bien, pero al final el ícono de Rocket Ship (como lo entiendo, este es el iniciador para aplicaciones de GUI en Python) aparece y desaparece inmediatamente sin hacer nada. Nada se muestra. Si agrego un ''raw_input'' después de la llamada, rebota hacia arriba y hacia abajo en el dock para siempre. Si ejecuto una aplicación de muestra simple para matplotlib desde el terminal, funciona bien. ¿Alguien tiene alguna experiencia en esto?
Tuve el mismo problema en Ubuntu 10.04. Para que los gráficos se muestren desde la consola interactiva de ipython, comience con el modificador "-pylab", que permite el uso interactivo de matplotlib:
ipython -pylab
Para que sus gráficos se muestren durante la ejecución de una secuencia de comandos independiente, use la llamada matplotlib.pyplot.show. Aquí hay un ejemplo de la página de inicio de hcluster, la primera y la última línea son los bits significativos aquí:
from matplotlib.pyplot import show
from hcluster import pdist, linkage, dendrogram
import numpy
from numpy.random import rand
X = rand(10,100)
X[0:5,:] *= 2
Y = pdist(X)
Z = linkage(Y)
dendrogram(Z)
show()
Invocar ipython con el modificador "-pylab" no hizo una diferencia para mí. (Sistema: Fedora 13)
Aunque no es ideal, mi solución fue escribir explícitamente la figura resultante como un archivo. Por ejemplo:
...
dendrogram(Z)
pylab.savefig( "temp.png" )
Espero que esto ayude a cualquiera que se encuentre con el mismo problema.
Enmienda: Tenga cuidado al usar copiar y pegar con el breve tutorial del paquete hcluster, especialmente si llama a pylab.savefig () después de varios tipos de dibujo de dendrograma que se muestran en el tutorial, es decir,
distMat = # whatever distance matrix you have
dendrogram( linkage( distMat ) )
pylab.savefig( "exampleDendrogram.png" )
dendrogram( linkage( distMat, method="complete" ) ) #instead of default "single"
pylab.savefig( "exampleDendrogram.png" )
Entonces exampleDendrogram.png contendrá tanto el dendrograma de enlace único como el dendrograma de enlace completo en la misma figura, y es probable que se crucen y se vean como un desastre.
Si eres tan estúpido como yo, pasarás de 30 a 180 minutos confundido acerca de cómo usar hcluster correctamente, cuando en realidad es solo cuestión de reiniciar matplotlib entre llamadas a dendrograma:
distMat = # whatever distance matrix you have
dendrogram( linkage( distMat ) )
pylab.savefig( "exampleDendrogram1.png" )
pylab.cla()
dendrogram( linkage( distMat, method="complete" ) ) #instead of default "single"
pylab.savefig( "exampleDendrogram2.png" )
Ahora, los archivos de imagen de dendrograma resultantes se verán como lo que esperabas que fueran.