Увеличение расстояния между метками для сюжета geom_line

Предположим, у меня есть некоторый набор линий, которые я строю, используя ggplot а также geom_line, Я хочу обозначить эти строки. Я могу сделать это с помощью geom_dl от directlabels пакет, но даже с предоставленным методом, чтобы избежать дублирования (например, "last.qp"), Я все еще думаю, что ярлыки - это два близких.

Как я могу увеличить расстояние между этими метками (здесь, в направлении у), не указывая вручную каждое из их мест с помощью ggplot2::annotate или что-то подобное? Я открыт для ответов, которые не связаны с directlabels пакет, но если возможно, я бы хотел придерживаться его, потому что он выполняет 95% работы по маркировке линий довольно хорошо.

Здесь потенциально есть подсказка tiebreak.big, но я не мог заставить его работать...

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)
library(tibble)
library(directlabels)
library(tidyr)

data <- tibble(x = 1:10) %>%
  mutate(y1 = x^2) %>%
  mutate(y2 = y1+0.5) %>%
  gather(key = var, value = value, y1, y2)

ggplot(data, aes(x = x, y = value, color = var)) +
  geom_line() +
  geom_dl(aes(label = var), method = list(cex = 1.2, dl.trans(x = x + 0.2), "last.qp"))

участок

1 ответ

Решение

Вот решение с использованием ggrepel пакет. У этого есть много вариантов для настройки.

library(dplyr)
library(ggplot2)
library(tibble)
library(tidyr)
library(ggrepel)

data <- tibble(x = 1:10) %>%
  mutate(y1 = x^2) %>%
  mutate(y2 = y1+0.5) %>%
  gather(key = var, value = value, y1, y2)

ggplot(data, aes(x = x, y = value, color = var)) +
  geom_line() +
  geom_text_repel(aes(label = var),
                  nudge_x = 1,
                  force = 1,
                  box.padding = 1,
                  segment.alpha = .5,
                  data = data %>%
                    group_by(var) %>% 
                    filter(x == max(x)))

введите описание изображения здесь

Вы можете поиграть с force а также box.padding параметры.

Другие вопросы по тегам