2010-06-03 14 views
13

Estoy usando scipy-cluster para generar un clúster jerárquico en algunos datos. Como paso final de la aplicación, invoco la función dendrogram para trazar el clúster. Me estoy ejecutando en Mac OS X Snow Leopard usando el built-in Python 2.6.1 y this matplotlib package. 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?El dendrograma generado por scipy-cluster no muestra

Respuesta

16

Tuve el mismo problema en Ubuntu 10.04. el fin de obtener gráficos para mostrar de ipython consola interactiva, comienzan con el interruptor "-pylab", que permite el uso interactivo de matplotlib:

ipython -pylab 

Para conseguir sus gráficos para mostrar durante la ejecución de un script independiente , use la llamada matplotlib.pyplot.show. He aquí un ejemplo de página de inicio hcluster, la primera y ú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() 
4

Invocación ipython con el interruptor "-pylab" no hacer 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") 

la esperanza que esto ayude a que se está ejecutando en el mismo tema.

Enmienda: Sea cuidadoso con el simple uso de copiar y pegar con el breve tutorial del paquete hcluster, sobre todo en que si usted llama pylab.savefig() después de varios tipos de dibujo 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") 

Luego 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 usted es tan estúpido como yo, que invertirá 30-180 minutos de confusión acerca de cómo utilizar correctamente hcluster, cuando en realidad es sólo una cuestión de restablecer matplotlib entre dendrograma llama:

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.

Cuestiones relacionadas