r - 使用ggplot2为树状图中的群集着色

标签 r ggplot2 ggdendro

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/

相关文章:

r highcharter package 条形图组与颜色

r - 如何将分类变量添加到百分比堆积条形图中?

r - 使用 facet_wrap 和 ggplotly 的第一个和最后一个方面比中间方面大

r - 使用 ggdendro 在树状图的片段下显示变量标签

r - 计算 FALSE 的向量化 OR 函数 | NA 和 NA |假如假?

r - r 中阿姆斯壮数的程序

r - R markdown 中投影仪的颜色变化

r - 为什么我的用户在 ggplot2 的 geom_text 中提供的标签会生成错误?

r - 使用树状图和样本标签绘制热图