Reproducción de un gráfico de dendrogtwig de celosía con ggplot2

¿Es posible reproducir esta ttwig de celosía con 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)))) 

enter image description here

EDITAR

A partir del 8 de agosto de 2011, el paquete ggdendro está disponible en CRAN. Observe también que la función de extracción de dendrogtwig ahora se llama dendro_data lugar de cluster_data


Sí lo es. Pero por el momento tendrás que pasar por algunos aros:

  1. Instale el paquete ggdendro (disponible desde CRAN). Este paquete extraerá la información del clúster de varios tipos de métodos de clúster (incluidos Hclust y dendrogram ) con el propósito expreso de trazar en ggplot .
  2. Use gráficos de cuadrícula para crear ventanas gráficas y alinee tres gráficas diferentes.

enter image description here

El código:

Primero cargue las bibliotecas y configure los datos para 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") 

Extrae datos de dendrogtwig y crea las ttwigs

 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 

Utilice gráficos de cuadrícula y una alineación manual para colocar los tres gráficos en la página

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

Como dice Ben, todo es posible. Se han realizado algunos trabajos para apoyar los dendrogtwigs. Andrie de Vries ha hecho un método fortificante de objetos de árbol. Sin embargo, el gráfico resultante no es tan bonito como puedes ver.

El mosaico sería fácil de hacer. Para el dendrogtwig inspeccionaría plot.dendrogram (usando getAnywhere ) para ver cómo se calculan las coordenadas para los segmentos. Extraiga esas coordenadas y use geom_segment para trazar el dendrogtwig. Luego use viewports para trazar las fichas y el dendrogtwig juntos. Lo siento, no puedo dar un ejemplo, es mucho trabajo y es demasiado tarde.

espero que esto ayude

Aclamaciones

dendrograma

Dudoso. No veo ninguna función en el Índice para ggplot2 que sugiera soporte para dendrogtwigs, y cuando este blogger compiló un conjunto de traducciones de las ilustraciones en el libro Lattice de Sarkar, no pudo obtener una leyenda de dendrogtwig de ggplot:

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

Estos enlaces proporcionan una solución para heatmaps con dendrogtwigs en ggplot2:

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

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

y también este:

Alinee gráficos de ggplot2 verticalmente