Это немного неуклюже, но вы можете создать полные метки в data.frame и заставить их находиться в разных строках с \n
.
d <- data.frame(USArrests)
d$predictor <- factor(c(rep(c(1, 2), times = 25)))
label <- d %>%
group_by(predictor) %>%
filter(Assault == max(Assault))
label$measure1 <- c(1.45, 5.67)
label$measure2 <- c(4.55, 6.11)
label2 <- label %>%
pivot_longer(measure1:measure2, 'measure', 'value') %>%
mutate(label = case_when(
predictor == 1 & measure == 'measure1' ~ paste0(measure, ' = ', value),
predictor == 1 & measure == 'measure2' ~ paste0('\n', measure, ' = ', value),
predictor == 2 & measure == 'measure1' ~ paste0('\n\n', measure, ' = ', value),
predictor == 2 & measure == 'measure2' ~ paste0('\n\n\n', measure, ' = ', value)
))
ggplot(d, aes(x=UrbanPop, y=Assault, fill=predictor)) +
geom_col(position=position_dodge(width = 0, preserve = "single"), width = 5) +
geom_text(data = label, aes(label = UrbanPop)) +
geom_text(data = label2,
aes(x = Inf, y = Inf, label = label, color = predictor),
hjust="right", vjust="top")
