J'essaie de dessiner un dendrogramme à partir de la sortie de la fonction hclust
. J'espère que le dendrogramme est disposé horizontalement au lieu de la valeur par défaut, qui peut être obtenu par (par exemple)
require(graphics)
hc <- hclust(dist(USArrests), "ave")
plot(hc)
J'ai essayé d'utiliser la fonction as.dendrogram()
comme plot(as.dendrogram(hc.poi),horiz=TRUE)
mais le résultat est sans étiquettes significatives:
Si j'utilise plot(hc.poi,labels=c(...))
qui est sans as.dendrogram()
, je peux passer l'argument labels=
, Mais maintenant le dendrogramme est vertical au lieu d'horizontal. Existe-t-il un moyen d'organiser simultanément le dendrogramme horizontalement et d'attribuer des étiquettes spécifiées par l'utilisateur? Merci!
pdate: comme exemple de l'ensemble de données USArrests, supposons que je veux utiliser les abréviations des deux premières lettres des noms d'état comme étiquettes, de sorte que je veux en quelque sorte passer labs
dans le tracé fonction:
labs = substr(rownames(USArrests),1,2)
qui donne
[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"
Pour afficher vos étiquettes définies dans un dendrogramme horizontal, une solution consiste à définir les noms de ligne du bloc de données sur de nouvelles étiquettes (toutes les étiquettes doivent être uniques).
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)
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())
En utilisant dendrapply
, vous pouvez personnaliser votre dendro comme vous le souhaitez.
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)