2017-09-15 120 views
1

我試圖繪製組成數據的圓形樹狀圖。使用下面的代碼:標記圓形的dendextend樹狀圖

library(dendextend) 
library(circlize) 
library(compositions) 
data("Hydrochem") 
hydro<-Hydrochem 

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average") 
dend <- as.dendrogram(hc) 
hydro$River <- as.character(hydro$River) 
labels(dend) <- hydro$River[order.dendrogram(dend)] 
plot(dend) 

我可以得到正常樹狀圖我想要的正確標籤訂單。

但是當我運行circlize_dendrogram(dend),我得到這個:

enter image description here

什麼傷腦筋我是在中間樹形 - 當我不使用樹狀圖的標籤的順序(即只打字labels(dend) <- hydro$River),內樹狀圖很好,一切看起來都很棒。

我試過改變labels_track_heightdend_track_height的設置無濟於事,當我在較小的玩具數據集上運行相同的過程時,不會出現這個問題。

任何想法?

回答

1

所以你實際上在你的代碼中出現了兩個問題: 1.標籤不是唯一的。 2.當您在樹狀圖對象中更新標籤後,情節不會爲標籤提供足夠空間

第一個問題可以通過向您提供的非唯一標籤添加數字來解決,從而使它們具有唯一性。解決第二個問題的方法是使用circlize_dendrogram函數中的labels_track_height參數。以下是更新後的代碼(注意最後一行,其中的差別):

library(dendextend) 
library(circlize) 
library(compositions) 
data("Hydrochem") 
hydro<-Hydrochem 

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average") 
dend <- as.dendrogram(hc) 

tmp <- as.character(hydro$River)[order.dendrogram(dend)] 
labels(dend) <- paste0(seq_along(tmp), "_", tmp) 
plot(dend) 
circlize_dendrogram(dend, labels_track_height = 0.4) 

你得到的輸出是這樣的:

enter image description here

(現在這是在dendextend 1.6自動完成。 0,目前在github上可用 - 後來也在CRAN上)

+1

Thanks Tal - 這是一個更徹底的解釋,並且很高興知道它是自動完成的。 – Scott

+0

我的榮幸。如果您將它用於科學論文,請考慮引用與dendextend和circlize有關的論文。你可以使用:Citation(「dendextend」);引用(「circlize」)#(謝謝) –

-1

因此,解決這個問題(如果任何人都可以提供更多的細節請做,因爲我真的不明白爲什麼這很重要)是定義標籤後添加第二個dend <- as.dendrogram(hc)調用。因此,代碼如下所示:

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average") 
dend <- as.dendrogram(hc) 
hydro$River <- as.character(hydro$River) 
labels(dend) <- hydro$River[order.dendrogram(dend)] 
dend <- as.dendrogram(hc) 
circlize_dendrogram(dend) 

其他用戶注意:這不能解決問題。

+0

恐怕這個答案不是「正確的」。您所做的只是忽略樹狀圖標籤的變化,導致circlize_dendrogram函數僅使用舊標籤繪製樹狀圖。 –