2010-06-03 13 views
13

Sto usando scipy-cluster per generare un clustering gerarchico su alcuni dati. Come passaggio finale dell'applicazione, chiamo la funzione dendrogram per tracciare il clustering. Sono in esecuzione su Mac OS X Snow Leopard utilizzando il built-in Python 2.6.1 e this matplotlib package. Il programma funziona bene, ma alla fine l'icona di Rocket Ship (come ho capito, questo è il lanciatore per le applicazioni GUI in python) si presenta e scompare immediatamente senza fare nulla. Non viene mostrato nulla Se aggiungo un 'raw_input' dopo la chiamata, rimbalza su e giù nel dock per sempre. Se eseguo una semplice applicazione di esempio per matplotlib dal terminale, funziona correttamente. Qualcuno ha qualche esperienza su questo?Dendrogram generato da scipy-cluster non mostra

risposta

16

Ho avuto lo stesso problema su Ubuntu 10.04. Al fine di ottenere grafica per visualizzare da ipython console interattiva, avviarlo con interruttore "-pylab", che consente l'uso interattivo di matplotlib:

ipython -pylab 

Per ottenere la grafica per visualizzare durante l'esecuzione di uno script standalone , usa la chiamata matplotlib.pyplot.show. Ecco un esempio dalla homepage hcluster, la prima e l'ultima linea sono i bit significativi qui:

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

Invocare ipython con interruttore "-pylab" non ha fatto la differenza per me. (Sistema: Fedora 13)

Anche se non ideale, la mia soluzione era quella di scrivere esplicitamente la figura risultante come un file. Per esempio:

... 
dendrogram(Z) 
pylab.savefig("temp.png") 

Spero che questo aiuti chiunque è in esecuzione nello stesso problema.

Modifica: Fare attenzione utilizzando semplicemente copia-e-incolla con breve tutorial del pacchetto hcluster, in particolare in che se si chiama pylab.savefig() dopo alcuni tipi di disegno dendrogram mostrato nel tutorial, vale a dire

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") 

Quindi exampleDendrogram.png conterrà sia il dendrogramma a collegamento singolo che il dendrogramma di collegamento completo nella stessa figura, e probabilmente si incroceranno e sembreranno un disastro.

Se sei stupido come me, si spenderà 30-180 minuti in confusione su come usare correttamente hcluster, quando in realtà è solo una questione di reset matplotlib tra dendrogram chiamate:

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") 

Ora, i risultanti file di immagine del dendrogramma avranno l'aspetto che ti aspetti da loro.

Problemi correlati