R語言ggtree畫圓形的樹狀圖展示聚類分析的結(jié)果

今天的主要內(nèi)容是實現(xiàn)下面這幅圖
image.png

做完聚類分析通??梢赃x擇樹形圖來展示聚類分析的結(jié)果,之前公眾號也分享過一篇文章 。如果樣本數(shù)不是很多,可以選擇矩形的樹狀圖。但是樣本數(shù)如果比較多,比如今天一位公眾號的讀者留言說他有160多個樣本,這樣矩形的樹狀圖就會比較寬或者比較長。這個時候就可以選擇用圓形的柱形圖來展示。

那么圓形的樹狀圖如何實現(xiàn)呢?我查找了一下相關(guān)資料。
R語言包dendextend這個包可以實現(xiàn),利用help(package="dendextend")查看幫助文檔,能夠看到其中的一個小例子

iris2<-iris[,-5]
species_labels<-iris[,5]
library(colorspace)
species_col<-rev(rainbow_hcl(3))[as.numeric(species_labels)]
d_iris<-dist(iris2)
hc_iris<-hclust(d_iris,method="complete")
iris_species<-rev(levels(iris[,5]))
iris_species
library(dendextend)
dend<-as.dendrogram(hc_iris)
dend <- color_branches(dend, k=3)

labels(dend) <- paste(as.character(iris[,5])[order.dendrogram(dend)],
                      "(",labels(dend),")", 
                      sep = "")
circlize_dendrogram(dend)
image.png

但是這個后期美化起來好像不太方便。

還找到了一個參考鏈接是
http://talgalili.github.io/dendextend/articles/dendextend.html

介紹的也是 dendextend這個包的用法。

Y叔開發(fā)的ggtree包時用來可視化進(jìn)化樹的,我隱約記得好像也可以用來畫聚類分析的樹狀圖。所以我搜索 ggtree show cluster result 找到 http://yulab-smu.top/treedata-book/chapter9.html 這個應(yīng)該是Y叔專門為ggtree寫的一本書。這里寫到直接將聚類分析的結(jié)果傳遞給ggtree()就可以,比如

library(ggtree)
hc <- hclust(dist(mtcars))
ggtree(hc)

這里我先用了 我之前在3.6.1版本上安裝的ggtree,是不可以的。應(yīng)該是需要更新到最新的ggtree版本。如何更新R包這里我沒有仔細(xì)研究。我直接安裝了R4.0.3,然后在這個R版本里安裝ggtree

install.packages("BiocManager")
BiocManager::install("ggtree")

這個時候再運行上面提到的例子就可以直接得到結(jié)果

library(ggtree)
hc <- hclust(dist(mtcars))
ggtree(hc)
image.png
基本的美化

把樹的形狀改為圓形,添加樣本的名稱

ggtree(hc,layout = "circular")+
  geom_tiplab2(offset=10)+
  xlim(0,300)
image.png
接下來我們用鳶尾花的數(shù)據(jù)集試一下

鳶尾花數(shù)據(jù)集是150個樣本,用圓形的圖看下效果

df<-iris[,1:4]  
rownames(df)<-paste(iris$Species,1:150,sep="_")

hc<-hclust(dist(df))
library(ggtree)
help(package="ggtree")
ggtree(hc,layout="circular")+
  xlim(0,5)+
  geom_tiplab2(offset=0.1,
               size=2)+
  #geom_text(aes(label=node))+
  geom_highlight(node = 152,fill="red")+
  geom_highlight(node=154,fill="steelblue")+
  geom_highlight(node=155,fill="green")+
  geom_cladelabel(node=152,label="virginica",
                  offset=1.2,barsize = 2,
                  vjust=-0.5,color="red")+
  geom_cladelabel(node=154,label="versicolor",
                  offset=1.2,barsize = 2,
                  hjust=1.2,color="steelblue")+
  geom_cladelabel(node=155,label="setosa",
                  offset=1.2,barsize = 2,
                  hjust=-1,color="green")

最終的結(jié)果是

image.png

這里關(guān)于最外圈文本位置的調(diào)整,我還的再仔細(xì)看看,這里出圖后位置不太合適,我是手動調(diào)整的!

歡迎大家關(guān)注我的公眾號
小明的數(shù)據(jù)分析筆記本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容