2017-09-15 21 views
1

私は、組成データの円形の樹状図をプロットしようとしています。次のコードを使用してください:円形のデデキストランデンドログラムにラベルを付ける

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

実際にはコードに浮上する2つの問題があります。 1.ラベルは一意ではありません。 2.プロットは、樹形図オブジェクトで更新した後、ラベルのための十分な余地を与えません。

最初の問題は、あなたが提供する一意でないラベルに数字を追加することによって解決できます。 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

ありがとうTal - それははるかに完全な説明であり、それが自動的に行われていることを知って良いです。 – Scott

+0

私の喜び。あなたが科学論文のためにそれを使用している場合は、訳出に関連する論文を引用し、回覧することを検討してください。あなたはそれらを見つけることができます: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

この回答は「正しい」とは限りません。あなたがしたのは、dendrogramのラベルの変更を無視し、circlize_dendrogram関数を使って古いラベルで樹形図をプロットするだけでした。 –

関連する問題