2016-10-09 7 views
2

가능한 한 겹치지 않는 포인트 위의 라벨을 정확하게 플롯하려하지만 ggrepel은 약간 위 또는 아래에 플로팅을 주장하는 것 같습니다. 예 : ggrepel : 포인트 위의 라벨 플롯

require(ggplot); require(ggrepel) 

ggplot(iris[1:10,], aes(Sepal.Length, Sepal.Width)) + 
    geom_point(pch=1, size=8) + 
    geom_text_repel(aes(label=Species), segment.color=NA, 
        point.padding=unit(0, "lines")) 

enter image description here

당신은 물론 force 인수를 줄일 수 있습니다,하지만 그들은 중복을 때 다음 라벨은 서로를 격퇴하지 않습니다.

답변

3

지금까지 보았 듯이 point.paddinggeom_point(size)이라는 값을 지정하면 겹침을 피할 수 있습니다. 그리고 위의 위치는 nudge_y에 매우 작은 양의 값을 지정하여 정의 할 수 있습니다.

library(dplyr) 
## an example data (delete duplicated data) 
iris2 <- iris %>% distinct(Sepal.Length, Sepal.Width, .keep_all = T) 

g <- ggplot(iris2[1:20,], aes(Sepal.Length, Sepal.Width)) + geom_point(pch=1, size=8) 
g + geom_text_repel(aes(label=Species), segment.color=NA, 
        point.padding = unit(8, "points"), nudge_y = 1.0E-6) 

[편집 됨]
나는 box.padding = unit(-0.5, "lines")은 라벨에게 포인트 위치를 제공합니다 생각 (하지만 아마 대문자에 기지).

iris2$Species <- as.character(iris2$Species) 
iris2[7,5] <- "ABCDEFG" 

g2 <- ggplot(iris2[1:20,], aes(Sepal.Length, Sepal.Width)) + geom_point(pch = 1, size = 8) 
g2 + geom_text_repel(aes(label=Species), segment.color=NA, box.padding = unit(-0.5, "lines")) 

enter image description here

+0

감사합니다. 레이블은 여전히 ​​정확한 지점 위치에 그려져 있지 않습니다. – geotheory

+0

니스. 그래서'nudge_y'는 그것들을 모두 밀어 넣고'point.padding'는 그것들을 다시 내립니다. – geotheory

+1

@ 지문; 나는 더 똑똑한 방법을 놓쳤다. 나는 편집했다. 나는'nudge_y'에 대해 그렇게 생각하고, point.padding은 포인트 위치에서 레이블의 맨 아래까지의 거리 (upperside 인 경우)를 해석합니다. 그러나 그들은 불필요해진다. – cuttlefish44

0

아마도 nudge_y와 nudge_x를 변경하여 레이블을 조정할 수 있습니다. 각 점을 변경하려면 새 데이터 프레임을 설정하여 레이블의 좌표를 조정할 수 있습니다.