создание дендрограммного графика высокого разрешения в R - PullRequest
3 голосов
/ 07 декабря 2011

Я пытаюсь сгенерировать дендрограмму высокого разрешения в R.

Сложность состоит в том, что существует более 200 конечных узлов, и каждый узел идентифицируется строкой. Я хотел бы убедиться, что каждая из этих строковых меток доступна для чтения на сгенерированном (напечатанном) графике.

Другое дело, что я хотел бы переключить исходную ось X (соответствующую листовым узлам) на ось Y и переключить исходную ось Y на ось X. Для более наглядных демонстрационных целей я бы хотел добавить еще одну ось X (которая соответствует информации о расстоянии на переключаемом графике) в верхней части графика. Как это можно сделать в R?

Ответы [ 2 ]

5 голосов
/ 07 декабря 2011

Этого можно добиться с помощью стандартных функций R.

Построение дендрограммы

Чтобы построить дендрограмму из матрицы расстояний, вы можете использовать функцию hclust.Для получения дополнительной информации о доступных алгоритмах см. Его справочную страницу.

# To produce a dummy distance matrix
distMatrix <- dist(matrix(1:9, ncol=3))

# To convert it into a tree
tree <- hclust(distMatrix)

Для графика класс dendrogram предоставляет полезный метод plot.Просто преобразуйте вывод hclust в дендрограмму и напишите его:

dendro <- as.dendrogram(tree)

Этот метод предоставляет аргумент horiz, который может переключать оси X и Y, проверьте следующее:

plot(dendro, horiz=TRUE)
plot(dendro, horiz=FALSE)

Управлениеего размер

Для удобства чтения, это зависит от устройства, которое вы используете для экспорта изображения.R может производить огромные изображения, это зависит от пользователя, чтобы установить размер и разрешение.См. Справочную страницу для png или pdf для получения дополнительной информации (ширина, высота и разрешение являются интересными аргументами).

Другой след, который нужно соблюдать, - это графические параметры: игра с различными значениями cex, вы сможете изменить размер ярлыков.Для получения дополнительной информации см. Справочную страницу par.

Удобочитаемость ориентирована на человека, поэтому я не думаю, что вы найдете автоматический способ получения читаемого графика автоматически, но с несколькими ручными настройкамиможно достичь с помощью инструментов, которые я упомянул.Если автоматизация обязательна, ее можно получить с помощью некоторых par элементов, сгенерированных R, например, cin, для прогнозирования необходимой ширины устройства, но гораздо проще настроить ее вручную.

Новая ось

Функция axis может вам помочь.

1 голос
/ 02 июня 2012

Мне понадобилось время, чтобы получить это:

# get font factor
pdf(); ff<-72/par()$ps; dev.off();
# if there are more than 20 entries 
if (dim(x)[2] > 20) {
    # scale output by font size
    pdf(fout, height=dim(x)[2]/ff)
} else {
    pdf(fout)
}
# increase right margin width
op <- par(mar = par("mar") + c(0,0,0,2*max(nchar(colnames(x)))/ff))
# plot horizontally
plot(as.dendrogram(hclust(distance), hang=-1), main="Dissimilarity = 1 - Correlation", xlab="", horiz=T)
# restore margin
par(op)
dev.off();
...