ggplot geom_text_repel текст превышает лимит графика

Как я могу запретить geom_text_repel() отображать часть меток, когда метки находятся близко к границе участка. Вот пример с facet_grid, например. в фасете chr3 метка сверху "ZNF717" не полностью отображается.

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

пример с mtcars с форсированием 20 граней и длинными метками:

mtcars %>% 
rowwise() %>% 
mutate(label="test_label") %>% 
mutate(facet=runif(n = n(),min = 1,max=20)) %>% 
ggplot(aes(x=disp,y=hp,label=label)) + 
geom_text_repel() + 
facet_grid(~facet)

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


person Nicolas Rosewick    schedule 20.09.2019    source источник
comment
Можете ли вы смоделировать некоторые данные и поделиться своим кодом, чтобы сделать ваш пример воспроизводимым?   -  person Roman Luštrik    schedule 20.09.2019
comment
пример с mtcars с форсированием 20 граней и длинными метками: mtcars %>% rowwise() %>% mutate(label="test_label") %>% mutate(facet=runif(n = n(),min = 1,max=20)) %>% ggplot(aes(x=disp,y=hp,label=label)) + geom_text_repel() + facet_grid(~facet)   -  person Nicolas Rosewick    schedule 20.09.2019
comment
Пожалуйста, отредактируйте исходный вопрос.   -  person Roman Luštrik    schedule 20.09.2019
comment
Добавить + coord_cartesian(clip="off")   -  person Marco Sandri    schedule 20.09.2019
comment
идеально @MarcoSandri!   -  person Nicolas Rosewick    schedule 20.09.2019


Ответы (1)


Каждая панель автономна, и по умолчанию отображение ограничено областью построения. Это можно переопределить, изменив координаты по умолчанию. В этом крайнем примере необходимо было использовать facet_wrap() с двумя строками. Я также уменьшил размер шрифта меток и ограничил отталкивание, чтобы оно перемещало метки только по вертикали. (Очевидно, что в реальном использовании метки галочек и названия панелей необходимо будет дополнительно настроить.)

library(ggplot2)
library(ggrepel)
library(dplyr)
mtcars %>% 
  rowwise() %>% 
  mutate(label="test_label") %>% 
  mutate(facet=runif(n = n(),min = 1,max=20)) %>% 
  ggplot(aes(x=disp,y=hp,label=label)) + 
  geom_text_repel(direction = "y", hjust = 0.5, size = 2) + 
  facet_wrap(~facet, nrow = 2) +
  coord_cartesian(clip = "off")

Приведенный выше код отвечает на вопрос, но создает новую проблему, по крайней мере, в примере mtcars, поскольку геометрия работает с панелью за панелью, отталкивание не может предотвратить перекрытие меток, которые распространяются на соседние панели. Удивительно, кроме того, при сохранении в растровые форматы происходит неожиданное отсечение слева, но не при сохранении в PDF (по крайней мере, в RStudio).

Еще один вариант — убедиться, что метки вписываются в доступное пространство, используя эстетику angle для поворота меток или сокращения текста, используемого для меток.

person Pedro Aphalo    schedule 20.09.2019