varias superponer studio modificar lineas graficos graficas ggplot ejes r dendrogram hclust

superponer - Dendrograma horizontal en R con etiquetas



superponer graficas en r ggplot (2)

Estoy tratando de dibujar un dendrograma de la salida de la función hclust . Espero que el dendrograma se organice horizontalmente en lugar del predeterminado, que se puede obtener (por ejemplo)

require(graphics) hc <- hclust(dist(USArrests), "ave") plot(hc)

Intenté usar la función as.dendrogram() como plot(as.dendrogram(hc.poi),horiz=TRUE) pero el resultado es sin etiquetas significativas:

Si uso plot(hc.poi,labels=c(...)) que no tiene el as.dendrogram() , puedo pasar el argumento labels= , pero ahora el dendrograma es vertical en lugar de horizontal. ¿Hay una manera de organizar simultáneamente el dendrograma horizontalmente y asignar etiquetas especificadas por el usuario? ¡Gracias!

Actualización : como ejemplo del conjunto de datos de USArrests, supongamos que quiero usar las abreviaturas de las dos primeras letras de los nombres de los estados como etiquetas, de modo que quiero pasar los labs a la función de trazado:

labs = substr(rownames(USArrests),1,2)

lo que da

[1] "Al" "Al" "Ar" "Ar" "Ca" "Co" "Co" "De" "Fl" "Ge" "Ha" [12] "Id" "Il" "In" "Io" "Ka" "Ke" "Lo" "Ma" "Ma" "Ma" "Mi" [23] "Mi" "Mi" "Mi" "Mo" "Ne" "Ne" "Ne" "Ne" "Ne" "Ne" "No" [34] "No" "Oh" "Ok" "Or" "Pe" "Rh" "So" "So" "Te" "Te" "Ut" [45] "Ve" "Vi" "Wa" "We" "Wi" "Wy"


Para mostrar sus etiquetas definidas en un dendrograma horizontal, una solución es establecer los nombres de las filas del marco de datos a nuevas etiquetas (todas las etiquetas deben ser únicas).

require(graphics) labs = paste("sta_",1:50,sep="") #new labels USArrests2<-USArrests #new data frame (just to keep original unchanged) rownames(USArrests2)<-labs #set new row names hc <- hclust(dist(USArrests2), "ave") par(mar=c(3,1,1,5)) plot(as.dendrogram(hc),horiz=T)

EDITAR - solución utilizando ggplot2

labs = paste("sta_",1:50,sep="") #new labels rownames(USArrests)<-labs #set new row names hc <- hclust(dist(USArrests), "ave") library(ggplot2) library(ggdendro) #convert cluster object to use with ggplot dendr <- dendro_data(hc, type="rectangle") #your own labels (now rownames) are supplied in geom_text() and label=label ggplot() + geom_segment(data=segment(dendr), aes(x=x, y=y, xend=xend, yend=yend)) + geom_text(data=label(dendr), aes(x=x, y=y, label=label, hjust=0), size=3) + coord_flip() + scale_y_reverse(expand=c(0.2, 0)) + theme(axis.line.y=element_blank(), axis.ticks.y=element_blank(), axis.text.y=element_blank(), axis.title.y=element_blank(), panel.background=element_rect(fill="white"), panel.grid=element_blank())


Usando dendrapply puedes personalizar tu dendro como quieras.

colLab <- function(n) { if(is.leaf(n)) { a <- attributes(n) attr(n, "label") <- substr(a$label,1,2) # change the node label attr(n, "nodePar") <- c(a$nodePar, lab.col = ''red'') # change the node color } n } require(graphics) hc <- hclust(dist(USArrests), "ave") clusDendro <- as.dendrogram(hc) clusDendro <- dendrapply(clusDendro, colLab) op <- par(mar = par("mar") + c(0,0,0,2)) plot(clusDendro,horiz=T)