2012-09-27 7 views
1

어떻게 ggdendro 플롯에 레이블을 추가 할 수 있습니까? 나는 dendro_data를 읽음으로써 '라벨'이라는 호출을 사용한다고 가정하지만 실제 구현의 예는 찾을 수 없습니다. 아무도 리프 레이블을 아래의 예에 추가하는 방법을 보여줄 수 있습니까? 당신이rg에서 ggdendro를 사용하여 ggplot의 dendrogram에 레이블 추가

require(ggplot2) 

hc <- hclust(dist(USArrests), "ave") 
dhc <- as.dendrogram(hc,hang=0.1) 
ddata <- dendro_data(dhc, type="rectangle") 
ggplot(segment(ddata)) + geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) 

답변

2

당신은 label(ddata)에 의해 생성 된 데이터 프레임을 사용하여 geom_text()에 전화로 잎 레이블을 추가 할 수 있습니다 감사합니다. 또한 레이블이 잘리지 않도록 플롯 범위를 scale_y_continuous으로 확장했습니다.

p <- ggplot(segment(ddata)) + geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) 
p + geom_text(aes(x = x, y = y, label = label, angle = -90, hjust = 0), data= label(ddata)) + 
    scale_y_continuous(expand = c(0.3, 0)) 

당신이 그 레이블이 표시되는 방식을 싫어하지 않는 한 그러나, ggdendrogram()를 사용하는 것이 바람직 할 수있다 :

ggdendrogram(ddata) 
+0

감사합니다. 한 가지 더 작은 질문 .... 레이블을 조정하는 방법이 있습니까? 매달 기 = 0.1 일 때 브랜치 끝을 착용하고 밑을 따라 다닐 필요가 없습니다. 감사. – Elizabeth

+0

대답은 '예'이지만 실질적인 작업이 필요합니다. 변수 hang은''ggdendro'' 패키지에서 전혀 구현되지 않은 것처럼 보이므로 무거운 수정없이''dendro_data''를 사용할 수 없습니다. – orizon

+0

@orizon 동의합니다. 내가 관리하는 유일한 방법은'geom_text'에서'nudge_x' 또는'nudge_y'를 사용하여 가지의 끝에서 조금 멀리 밀어내는 것입니다. – 5th

0

나는 상당한 양의없이 ggdendro에 매달려 dendrograms을 그릴 수 있었다 다음을 적용하여 작업하십시오. 리프 위치가 포함 된 레이블의 데이터 프레임을 구성하기 만하면됩니다. 이것은 정수만 취하도록 점을 필터링하여 수행됩니다.

# tree is a an extracted dendro_data() object. 
label_data <- bind_cols(filter(segment(tree), x == xend & x%%1 == 0), label(tree)) 

ggplot() + 
geom_segment(data=segment(tree), aes(x=x, y=y, xend=xend, yend=yend)) + 
geom_text(data=label_data, aes(x=xend, y=yend, label=label, hjust=0, color = LT), size=2) + 
coord_flip() + 
scale_y_reverse(expand=c(0.2, 0)) + 
theme_bw() + 
theme(panel.border = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     axis.line = element_blank(), 
     axis.title = element_blank(), 
     axis.text = element_blank(), 
     axis.ticks = element_blank(), 
     legend.position = "None")