Didzis Elferts展示了如何使用ggplot2和ggdendro绘制树状图:
horizontal dendrogram in R with labels
这是代码:
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 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())
有人知道如何着色不同的簇吗?例如,您要对2个群集(k = 2)进行着色?
最佳答案
解决方法是使用plot()
绘制群集对象,然后使用rect.hclust()
函数在群集周围绘制边框(群集数量不设置参数k=
)。如果将rect.hclust()
的结果另存为对象,它将创建观察列表,其中每个列表元素都包含属于每个聚类的观察。
plot(hc)
gg<-rect.hclust(hc,k=2)
现在,此列表可以转换为数据列表,其中
clust
列包含集群的名称(在本示例中为两组)-根据列表元素的长度重复命名。clust.gr<-data.frame(num=unlist(gg),
clust=rep(c("Clust1","Clust2"),times=sapply(gg,length)))
head(clust.gr)
num clust
sta_1 1 Clust1
sta_2 2 Clust1
sta_3 3 Clust1
sta_5 5 Clust1
sta_8 8 Clust1
sta_9 9 Clust1
新的数据帧与
label()
对象的dendr
信息合并(dendro_data()
结果)。text.df<-merge(label(dendr),clust.gr,by.x="label",by.y="row.names")
head(text.df)
label x y num clust
1 sta_1 8 0 1 Clust1
2 sta_10 28 0 10 Clust2
3 sta_11 41 0 11 Clust2
4 sta_12 31 0 12 Clust2
5 sta_13 10 0 13 Clust1
6 sta_14 37 0 14 Clust2
在绘制树状图时,请使用
text.df
添加带有geom_text()
的标签,并使用clust
列作为颜色。ggplot() +
geom_segment(data=segment(dendr), aes(x=x, y=y, xend=xend, yend=yend)) +
geom_text(data=text.df, aes(x=x, y=y, label=label, hjust=0,color=clust), 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())
关于r - 使用ggplot2为树状图中的群集着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21474388/