Установите пределы в ggplot для ggrepel - PullRequest
1 голос
/ 09 апреля 2020

У меня есть график ggplot с данными, подобными этим:

data <- data.frame(x = c(1:30),
                   y = rnorm(30, 0, 1),
                   z = rep(c("A", "B", "C"), 10))

ggplot(data = data, aes(x = x, y = y, group = z, color = z, label = z)) +
  geom_point() +
  geom_label_repel(aes(label = z), force = 1, segment.alpha = .5, box.padding = 1, xlim = c(-5, 35), ylim = c(-5, 5)) +
  scale_x_continuous(limits = c(-5, 35)) +
  scale_y_continuous(limits = c(-5, 5))

enter image description here

Я пытаюсь установить пределы в графе для меток так что они всегда либо выше 2,5 или ниже -2,5 и либо справа от 30, либо слева от 0. Спасибо за помощь!

1 Ответ

2 голосов
/ 09 апреля 2020

Глядя на документацию для ggrepel, не похоже, что вы можете указать «зону исключения меток», которая фактически является тем, что вы ищете. Лучшим вариантом было бы использовать xlim и ylim для определения разделов, а затем соответствующим образом «разделить» ваши данные, чтобы создать иллюзию «зоны исключения меток».

Для этого я сломал Ваши данные в квадранты:

ggplot(data = data, aes(x = x, y = y, group = z, color = z, label = z)) +
geom_point() +
geom_label_repel(data=subset(data, x<15 & y<0),
    segment.alpha = .5, xlim = c(-5, 0), ylim = c(-5, -2.5)) +
geom_label_repel(data=subset(data, x<15 & y>0),
    segment.alpha = .5, xlim = c(-5, 0), ylim = c(2.5, 5)) +
geom_label_repel(data=subset(data, x>15 & y>0),
    segment.alpha = .5, xlim = c(30, 35), ylim = c(2.5, 5)) +
geom_label_repel(data=subset(data, x>15 & y<0),
    segment.alpha = .5, xlim = c(30, 35), ylim = c(-5, -2.5)) +
scale_x_continuous(limits = c(-5, 35)) +
scale_y_continuous(limits = c(-5, 5))

Это дает вам это:

enter image description here

Вид EW, на мой взгляд. Чтобы получить эффект, который вы, вероятно, ищете, я бы просто разделил данные на значения y выше и ниже среднего и позволил ggrepel распределить их по оси x в зависимости от ситуации. Я играл с аргументом force=, чтобы "pu sh" переместить их по оси x:

ggplot(data = data, aes(x = x, y = y, group = z, color = z, label = z)) +
+     geom_point() +
geom_label_repel(data=subset(data, y<0), force=25,
    segment.alpha = .5, ylim = c(-5, -2.5)) +
geom_label_repel(data=subset(data, y>0), force=25,
    segment.alpha = .5, ylim = c(2.5, 5)) +
scale_x_continuous(limits = c(-5, 35)) +
scale_y_continuous(limits = c(-5, 5))

enter image description here

Вы можете сделать То же самое переключение осей (разделение данных по значению х), но я думаю, что здесь это будет работать лучше, поскольку данные распределены по большей области оси х.

...