2010-06-03 8 views
13

Ich verwende scipy-cluster, um ein hierarchisches Clustering für einige Daten zu generieren. Als letzten Schritt der Anwendung rufe ich die Funktion auf, um das Clustering zu plotten. Ich verwende Mac OS X Snow Leopard mit dem integrierten Python 2.6.1 und this matplotlib package. Das Programm läuft gut, aber am Ende erscheint das Rocket Ship-Icon (wie ich es verstehe, dies ist der Launcher für GUI-Anwendungen in Python) und verschwindet sofort, ohne etwas zu tun. Nichts wird gezeigt. Wenn ich nach dem Anruf einen 'raw_input' hinzufüge, springt er für immer im Dock auf und ab. Wenn ich eine einfache Beispielanwendung für Matplotlib vom Terminal ausführen, läuft es gut. Hat jemand Erfahrungen dazu?Dendrogram von scipy-Cluster generiert zeigt nicht

Antwort

16

Ich hatte das gleiche Problem auf Ubuntu 10.04. Um Grafiken von ipython interaktive Konsole angezeigt zu bekommen, es mit „-pylab“ Schalter starten, die die interaktive Nutzung von matplotlib ermöglicht:

ipython -pylab 

Ihre Grafiken während der Ausführung eines eigenständigen Skript anzuzeigen Um Verwenden Sie den Aufruf matplotlib.pyplot.show. Hier ist ein Beispiel von hcluster Homepage, die erste und die letzte Zeile sind die Bits hier:

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

mit „-pylab“ -Schalter aufrufen ipython keinen Unterschied für mich. (System: Fedora 13)

Obwohl nicht ideal, war meine Lösung, die resultierende Abbildung explizit als eine Datei zu schreiben. Zum Beispiel:

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

Hope this jemand hilft, die in der gleichen Ausgabe läuft.

Änderung: Seien Sie vorsichtig, einfach per Copy-and-Paste mit dem kurzen Tutorial des hcluster Pakets, vor allem in, dass, wenn Sie rufen pylab.savefig() nach mehreren Arten von dendrogram Zeichnung im Tutorial gezeigt, dh

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

Dann wird exampleDendrogram.png sowohl das Dendrogramm mit einfacher Verknüpfung als auch das Dendrogramm mit vollständiger Verknüpfung in der gleichen Figur enthalten, und sie werden sich wahrscheinlich kreuzen und wie ein Durcheinander aussehen.

Wenn Sie so dumm, wie ich sind, werden Sie 30-180 Minuten in Verwirrung darüber verbringen, wie man richtig hcluster verwenden, wenn es eigentlich nur eine Frage matplotlib zwischen Dendrogramm des Zurücksetzens ruft:

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

Die resultierenden Dendrogramm-Bilddateien sehen jetzt so aus, wie Sie es erwartet haben.

Verwandte Themen