[英]horizontal dendrogram in R with labels
I am trying to draw a dendrogram from the hclust
function output.我正在尝试从
hclust
函数输出中绘制一个树状图。 I hope the dendrogram is horizontally arranged instead of the default, which can be obtain by (for example)我希望树状图是水平排列的,而不是默认的,可以通过(例如)获得
require(graphics)
hc <- hclust(dist(USArrests), "ave")
plot(hc)
I tried to use as.dendrogram()
function like plot(as.dendrogram(hc.poi),horiz=TRUE)
but the result is without meaningful labels:我尝试使用
as.dendrogram()
函数,如plot(as.dendrogram(hc.poi),horiz=TRUE)
但结果没有有意义的标签:
If I use plot(hc.poi,labels=c(...))
which is without the as.dendrogram()
, I can pass the labels=
argument, but now the dendrogram is vertical instead of horizontal.如果我使用没有
as.dendrogram()
plot(hc.poi,labels=c(...))
,我可以传递labels=
参数,但现在树状图是垂直的而不是水平的。 Is there a way to simultaneously arrange the dendrogram horizontally and assign user-specified labels?有没有办法同时水平排列树状图并分配用户指定的标签? Thanks!
谢谢!
Update : as an example from the USArrests dataset, suppose I wanna use the abbreviations of the first two letters of the state names as labels, so that I wanna somehow pass labs
into the plotting function:更新:作为来自 USArrests 数据集的示例,假设我想使用州名称的前两个字母的缩写作为标签,以便我想以某种方式将
labs
传递到绘图函数中:
labs = substr(rownames(USArrests),1,2)
which gives这使
[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"
To show your defined labels in horizontal dendrogram, one solution is to set row names of data frame to new labels (all labels should be unique).要在水平树状图中显示您定义的标签,一种解决方案是将数据框的行名称设置为新标签(所有标签都应该是唯一的)。
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())
Using dendrapply
you can customize your dendro as you like.使用
dendrapply
您可以根据需要自定义您的 dendro。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.