Я думаю, что это то, что вам нужно.
Я использую пакет dplyr или tidyverse.
library(tidyverse)
Набор данных
dat1 <- data.frame(label=rep(c("a","b","c"),2), x=rep(c(1:3),2), y=c(5,4,7,2,6,9))
Создание набора данных дляэтикетки.Это создает набор данных меток, который будет выбирать точку маркировки в средней точке Y для данного X.
lab1 <- dat1 %>% group_by(label) %>% mutate(x = x, y = mean(y))
Это создает график, используя исходный набор данных для точек и набор данных меток для меток.
ggplot() +
geom_point(data=dat1, aes(x=x, y=y)) +
geom_text(data=lab1, aes(x=x, y=y, label=label), size = 5) +
theme_grey()
Вышеприведенное фактически наносит метки дважды друг на друга, но вы не можете это заметить.Если вы действительно хотели этого один раз, то можете сделать следующее и обновить предыдущий код с помощью lab2.Я также изменил размер, чтобы вы могли видеть.
lab2 <-unique(lab1)
ggplot() +
geom_point(data=dat1, aes(x=x, y=y)) +
geom_text(data=lab2, aes(x=x, y=y, label=label), size=10) +
theme_grey()
Если вы хотите, чтобы направление x было больше вправо или выше, вы можете обновить свой набор данных меток, добавив смещение в свой набор данных меток.
lab1 <- dat1 %>% group_by(label) %>% mutate(x = x+.3, y = mean(y) + .5)
Или вы можете сделать то же самое в самом geom_text, используя толчок.
ggplot() + geom_point(data=dat1, aes(x=x, y=y)) +
geom_text(data=lab1, aes(x=x, y=y, label=label), size=10, nudge_x = .3, nudge_y = .5) +
theme_grey()