2017-09-15 2 views
1

나는 합성 데이터의 원형 덩어리를 플로팅하려고한다. 다음 코드를 사용하십시오 :circular dendextend dendrogram에 라벨을 붙이는 것

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

무엇 나를 애 태우게있어하는 중간에 dendrogram은이다 - 나는 레이블의 dendrogram은의 순서를 사용하지 않는 경우 (즉, 단지 입력 labels(dend) <- hydro$River), 내부 dendrogram 괜찮아요 그리고 모든게 멋지다.

labels_track_heightdend_track_height 설정을 사용하지 않으려 고 시도했으며 작은 장난감 데이터 세트에서 동일한 프로세스를 실행할 때이 문제가 발생하지 않습니다.

아이디어가 있으십니까?

답변

1

실제로 코드에 부상하는 두 가지 문제가 있습니다. 1. 레이블이 고유하지 않습니다. 2. 도형은 dendrogram 오브젝트에서 업데이트 한 후에 레이블을위한 충분한 공간을 제공하지 않습니다.

첫 번째 문제는 제공 한 고유하지 않은 레이블에 숫자를 추가하여 고유하게 만듭니다. . 두 번째 문제에 대한 해결책은 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

내 기쁨. 당신이 과학 논문을 위해 그것을 사용하는 경우, dendextend 및 circlize에 관한 논문을 인용 고려하십시오. 다음을 사용하여 찾을 수 있습니다 : citation ("dendextend"); 표창장 ("회람") # (감사) –

-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 함수가 낡은 레이블로 dendrogram을 그릴 수 있도록하는 것입니다. –

관련 문제