geom_point의 크기에 상대적인 위치로 geom_text 또는 geom_label을 추가하는 방법은 무엇입니까?
내가하려는 것은 크기에 매핑 된 변수가있는 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의 경계와 레이블의 경계 사이의 거리를 고정 값으로 설정하려고합니다.
답변
나는 이것이 다른 대답을 할만 큼 충분히 다르기를 바랍니다. 나는 정확히 당신이 레이블을 배치하기를 원했던 것에 대해 조금 간과했음을 인정합니다. 따라서 기본적으로 포인트 중심이 아니라 반경을 기준으로합니다.
저는 이 커뮤니티에서 제 자신의 첫 번째 질문을 떠올리게하는 느낌이 들었습니다 .이 질문에 대한 답을 오랫동안 이해하지 못했음을 인정합니다.
기본 아이디어는 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에 생성됨
이 문제는 배율을 조정 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))
사용하다 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에 생성됨