Воспроизведение решеточного диаграммы дендрограммы с ggplot2
Возможно ли воспроизвести этот график решетки с ggplot2?
library(latticeExtra) data(mtcars) x <- t(as.matrix(scale(mtcars))) dd.row <- as.dendrogram(hclust(dist(x))) row.ord <- order.dendrogram(dd.row) dd.col <- as.dendrogram(hclust(dist(t(x)))) col.ord <- order.dendrogram(dd.col) library(lattice) levelplot(x[row.ord, col.ord], aspect = "fill", scales = list(x = list(rot = 90)), colorkey = list(space = "left"), legend = list(right = list(fun = dendrogramGrob, args = list(x = dd.col, ord = col.ord, side = "right", size = 10)), top = list(fun = dendrogramGrob, args = list(x = dd.row, side = "top", size = 10))))
- Как сохранить сюжет как изображение на диске?
- Добавить массив кнопок в GridView в приложении для Android
- изменить фон и текст полос, связанных с несколькими панелями в R / решетке
- Решетка: несколько графиков в одном окне?
- R пакет не будет отображаться, если запустить с использованием источника ()
РЕДАКТИРОВАТЬ
С 8 августа 2011 года пакет ggdendro
доступен на CRAN. Обратите внимание, что функция извлечения дендрограммы теперь называется dendro_data
вместо dendro_data
Да. Но пока вам придется прыгать через несколько обручей:
- Установите пакет
ggdendro
(ansible из CRAN). Этот пакет будет извлекать информацию о кластере из нескольких типов кластерных методов (включаяHclust
иHclust
) с явной целью построения графика вggplot
. - Используйте сетку для создания видовых экранов и выровняйте три разных графика.
Код:
Сначала загрузите библиотеки и настройте данные для ggplot:
library(ggplot2) library(reshape2) library(ggdendro) data(mtcars) x <- as.matrix(scale(mtcars)) dd.col <- as.dendrogram(hclust(dist(x))) col.ord <- order.dendrogram(dd.col) dd.row <- as.dendrogram(hclust(dist(t(x)))) row.ord <- order.dendrogram(dd.row) xx <- scale(mtcars)[col.ord, row.ord] xx_names <- attr(xx, "dimnames") df <- as.data.frame(xx) colnames(df) <- xx_names[[2]] df$car <- xx_names[[1]] df$car <- with(df, factor(car, levels=car, ordered=TRUE)) mdf <- melt(df, id.vars="car")
Извлеките данные дендрограммы и создайте графики
ddata_x <- dendro_data(dd.row) ddata_y <- dendro_data(dd.col) ### Set up a blank theme theme_none <- theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.title.x = element_text(colour=NA), axis.title.y = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank() #axis.ticks.length = element_blank() ) ### Create plot components ### # Heatmap p1 <- ggplot(mdf, aes(x=variable, y=car)) + geom_tile(aes(fill=value)) + scale_fill_gradient2() # Dendrogram 1 p2 <- ggplot(segment(ddata_x)) + geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) + theme_none + theme(axis.title.x=element_blank()) # Dendrogram 2 p3 <- ggplot(segment(ddata_y)) + geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) + coord_flip() + theme_none
Используйте графику сетки и некоторое ручное выравнивание, чтобы расположить три графика на странице
### Draw graphic ### grid.newpage() print(p1, vp=viewport(0.8, 0.8, x=0.4, y=0.4)) print(p2, vp=viewport(0.52, 0.2, x=0.45, y=0.9)) print(p3, vp=viewport(0.2, 0.8, x=0.9, y=0.4))
Как говорит Бен, все возможно. Проделана определенная работа по поддержке дендрограмм. Андри де Врис сделал метод укрепления древесных объектов. Тем не менее, итоговая графика не так хороша, как вы можете видеть.
Плитка будет легко сделать. Для дендрограммы я plot.dendrogram
(используя getAnywhere
), чтобы посмотреть, как рассчитываются координаты для сегментов. Извлеките эти координаты и используйте geom_segment для построения дендрограммы. Затем используйте видовые экраны для построения плиток и дендрограммы вместе. Извините, я не могу привести пример, это большая работа, и уже слишком поздно.
надеюсь, это поможет
ура
Сомнительно. Я не вижу никаких функций в Индексе для ggplot2, которые предполагали бы поддержку дендрограмм, и когда этот блоггер собрал множество переводов иллюстраций в книге Sattar’s Lattice, он не смог получить легенду дендрограммы ggplot:
Эти ссылки обеспечивают решение для тепловых карт с дендрограммами в ggplot2:
https://gist.github.com/chr1swallace/4672065
https://github.com/chr1swallace/random-functions/blob/master/R/ggplot-heatmap.R
а также этот:
Выровнять графики ggplot2 по вертикали