geom_point의 크기에 상대적인 위치로 geom_text 또는 geom_label을 추가하는 방법은 무엇입니까?

Jan 20 2021

내가하려는 것은 크기에 매핑 된 변수가있는 geom_point로 만든 포인트에 레이블을 추가하는 것입니다. 값은 레이블에도 표시됩니다. 텍스트 또는 레이블은 geom_point 바로 아래에 위치해야하지만 position_nudge로이를 달성하는 것은 불가능 해 보입니다.

내 코드는 현재 다음과 같습니다 (간체).

ggplot(data, aes(x = var1, y = var2) +
   geom_point(aes(size = var3)) +
   geom_text(aes(label = var3))

결과는 이쪽

그러나 나는 다음과 같은 것을 성취하려고 노력하고 있습니다.

이것을 간단한 방법으로 달성 할 수있는 방법이 있습니까?

감사.

편집 : geom_point의 경계와 레이블의 경계 사이의 거리를 고정 값으로 설정하려고합니다.

답변

1 tjebo Jan 21 2021 at 06:09

나는 이것이 다른 대답을 할만 큼 충분히 다르기를 바랍니다. 나는 정확히 당신이 레이블을 배치하기를 원했던 것에 대해 조금 간과했음을 인정합니다. 따라서 기본적으로 포인트 중심이 아니라 반경을 기준으로합니다.

저는 이 커뮤니티에서 제 자신의 첫 번째 질문을 떠올리게하는 느낌이 들었습니다 .이 질문에 대한 답을 오랫동안 이해하지 못했음을 인정합니다.

기본 아이디어는 geom_point 를 사용 하지 않고 ggforce :: geom_circle (또는 : geom_ellipse)를 사용하는 것입니다. 레이블 위치 지정을 위해 생성에 사용하는 반경을 사용할 수 있습니다. 약간의 하드 코딩이 필요하지만 일반적인 좌표를 기반으로 반경을 프로그래밍 방식으로 정의하는 방법이있을 것이라고 확신합니다.

library(ggplot2)
library(ggforce)

foo <- data.frame(var1 = rep(1:3, 2),  var2 =rep(1:2, each = 3),
                   var3 = c(3, 10, 2, 1, 1, 10))
# Create cuts - you can also assign other values of course. factor of 0.01 was chosen randomly. 
foo$rad <- 0.01 * findInterval(foo$var3, 1:5)

ggplot(foo) +
  geom_circle(aes(x0 = var1, y0 = var2, r = rad),
              fill = "Grey50") +
  geom_text(aes(x = var1, y = var2 - rad - 0.03, label = var3)) +
  coord_equal()

reprex 패키지 (v0.3.0)에 의해 2021-01-20에 생성됨

2 RuiBarradas Jan 20 2021 at 23:11

이 문제는 배율을 조정 size하고 점까지의 vjust거리에 추가하여 해결할 수 있습니다 .

library(ggplot2)

ggplot(data, aes(x = var1, y = var2)) +
  geom_point(aes(size = var3), show.legend = FALSE) +
  geom_text(aes(label = var3, vjust = 1.5 + 0.1 * var3))

테스트 데이터

data <- data.frame(var1 = factor(rep(1:3, 2)),
                   var2 = factor(rep(1:2, each = 3)),
                   var3 = c(3, 10, 2, 1, 1, 10))
2 tjebo Jan 21 2021 at 00:08

사용하다 nudge

데이터에 대한 Rui에게 감사합니다. +1

library(ggplot2)
data <- data.frame(var1 = factor(rep(1:3, 2)),
                   var2 = factor(rep(1:2, each = 3)),
                   var3 = c(3, 10, 2, 1, 1, 10))

ggplot(data, aes(x = var1, y = var2)) +
  geom_point(aes(size = var3), show.legend = FALSE) +
  geom_text(aes(label = var3), nudge_y = -0.1 )

reprex 패키지 (v0.3.0)에 의해 2021-01-20에 생성됨