Дендрограмма, сгенерированная Scipy-Cluster, не показывает
-
24-10-2019 - |
Вопрос
Я использую Scipy-Cluster Чтобы сгенерировать иерархическую кластеризацию на некоторых данных. Как последний шаг приложения, я называю dendrogram
функция для построения кластеризации. Я работаю на Mac OS X Snow Leopard, используя встроенный Python 2.6.1 и этот пакет Matplotlib. Анкет Программа работает нормально, но в конце концов, значок ракетного корабля (насколько я понимаю, это установка пусковой установки для приложений GUI в Python) появляется и сразу же исчезает, ничего не делая. Ничего не показано. Если я добавлю «raw_input» после вызова, он просто навсегда отскакивает в док -станции. Если я запускаю простое применение приложения для Matplotlib из терминала, он работает нормально. У кого -нибудь есть опыт по этому поводу?
Решение
У меня была такая же проблема на Ubuntu 10.04. Чтобы получить графику для отображения из интерактивной консоли ipython, запустите ее с переключателя «-пилаба», что позволяет интерактивное использование Matplotlib:
ipython -pylab
Чтобы получить свою графику для отображения во время выполнения автономного скрипта, используйте Matplotlib.pyplot.show Call. Вот пример из Hcluster HomePage, первая и последняя строка - значимые биты здесь:
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()
Другие советы
Вызов Ipython с помощью переключателя «-пилаба» не имел значения для меня. (Система: Fedora 13)
Хотя это и не идеальное, мое решение было явно написать результирующую фигуру в качестве файла. Например:
...
dendrogram(Z)
pylab.savefig( "temp.png" )
Надеюсь, это поможет любому, кто сталкивается с той же проблемой.
Поправка: будьте осторожны с тем, что просто используют копию и вставку с кратким учебником пакета Hcluster, в частности, если вы позвоните Pylab.SaveFig () после нескольких типов рисунка дендрограммы, показанных в учебном пособии, т.е.
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" )
Затем exampleDendRogram.png будет содержать как дендрограмму с одной связью, так и дендрограмму полной связи на одной и той же рисунке, и они, вероятно, будут пересекать и выглядеть как беспорядок.
Если вы такие же глупые, как я, вы потратите 30-180 минут в замешательстве о том, как правильно использовать Hcluster, когда на самом деле это просто вопрос сброса matplotlib между вызовами дендрограммы:
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" )
Теперь полученные файлы изображений дендрограммы будут выглядеть так, как вы ожидали, что они будут выглядеть.