Dendrogram generato da SciPy-cluster non fa spettacolo
-
24-10-2019 - |
Domanda
SciPy-cluster per generare un clustering gerarchico su alcuni dati. Come passo 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 questo pacchetto matplotlib . Il programma funziona bene, ma alla fine l'icona Rocket Ship (mi pare di capire, questo è il programma di avvio per le applicazioni GUI in Python) si presenta e svanisce immediatamente senza fare nulla. viene mostrato nulla. Se posso aggiungere un 'raw_input' dopo la chiamata, semplicemente rimbalza su e giù sul banco degli imputati per sempre. Se eseguo una semplice applicazione di esempio per matplotlib dal terminale funziona benissimo. Qualcuno ha qualche esperienza su questo?
Soluzione
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 a display durante l'esecuzione di uno script locale, chiamata uso 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()
Altri suggerimenti
Invocazione ipython con interruttore "-pylab" non ha fatto la differenza per me. (Sistema: Fedora 13)
Anche se non è l'ideale, la mia soluzione era di scrivere esplicitamente la cifra risultante come file. Ad esempio:
...
dendrogram(Z)
pylab.savefig( "temp.png" )
Spero che questo aiuti chiunque è in esecuzione nello stesso problema.
Emendamento:. Fate attenzione a semplicemente utilizzando la copia-e-incolla con breve tutorial del pacchetto hcluster, in particolare in che se si chiama pylab.savefig () dopo alcuni tipi di dendrogram disegno riportato nel tutorial, cioè
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" )
Poi exampleDendrogram.png conterrà sia il dendrogramma singolo collegamento e il dendrogramma completa-linkage nella stessa figura, e saranno probabilmente cross-croce e apparire come un pasticcio.
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 le chiamate Dendrogramma:
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 file immagine risultanti dendrogram sarà simile a quello che li aspetta a guardare come.