Воспроизведение решеточного диаграммы дендрограммы с 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)))) 

введите описание изображения здесь

    РЕДАКТИРОВАТЬ

    С 8 августа 2011 года пакет ggdendro доступен на CRAN. Обратите внимание, что функция извлечения дендрограммы теперь называется dendro_data вместо dendro_data


    Да. Но пока вам придется прыгать через несколько обручей:

    1. Установите пакет ggdendro (ansible из CRAN). Этот пакет будет извлекать информацию о кластере из нескольких типов кластерных методов (включая Hclust и Hclust ) с явной целью построения графика в ggplot .
    2. Используйте сетку для создания видовых экранов и выровняйте три разных графика.

    введите описание изображения здесь

    Код:

    Сначала загрузите библиотеки и настройте данные для 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:

    http://learnr.wordpress.com/2009/08/10/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r-part-9/

    Эти ссылки обеспечивают решение для тепловых карт с дендрограммами в ggplot2:

    https://gist.github.com/chr1swallace/4672065

    https://github.com/chr1swallace/random-functions/blob/master/R/ggplot-heatmap.R

    а также этот:

    Выровнять графики ggplot2 по вертикали

    Давайте будем гением компьютера.