У меня есть набор данных, где каждая точка данных имеет значение x, которое ограничено (представляет собой фактический экземпляр количественной переменной), y-значение, которое является произвольным (существует просто, чтобы обеспечить измерение для распространения текста) и ярлык. Мои наборы данных могут быть очень большими, и часто бывает перекрытие текста, даже когда я стараюсь как можно больше распространять данные по оси y.
Следовательно, я пытаюсь использовать новый ggrepel. Тем не менее, я стараюсь, чтобы текстовые метки были ограничены в их позиции x-значения, но только позволяли им отталкиваться друг от друга в направлении y.
В качестве примера приведенный ниже код создает график для 32 точек данных, где x-значения показывают количество цилиндров в автомобиле, а значения y определяются случайным образом (не имеют смысла, но для обеспечения второго измерения для целей построения текста). Без использования ggrepel в тексте есть значительное совпадение:
library(ggrepel)
library(ggplot2)
set.seed(1)
data = data.frame(x=runif(100, 1, 10),y=runif(100, 1, 10),label=paste0("label",seq(1:100)))
origPlot <- ggplot(data) +
geom_point(aes(x, y), color = 'red') +
geom_text(aes(x, y, label = label)) +
theme_classic(base_size = 16)
Я могу исправить перекрытие текста с помощью ggrepel, как показано ниже. Однако это изменяет не только значения у, но и значения х. Я стараюсь избегать изменения значений х, поскольку они представляют фактический физический смысл (количество цилиндров):
repelPlot <- ggplot(data) +
geom_point(aes(x, y), color = 'red') +
geom_text_repel(aes(x, y, label = label)) +
theme_classic(base_size = 16)
В качестве примечания, причина, по которой я не могу позволить изменить значение x текста, заключается в том, что я только рисую текст (а не точки). В то время как кажется, что большинство примеров в ggrepel сохраняют положение точек (так что их значения остаются верными) и только отталкивают значения x и y меток. Затем точки и связаны с метками с сегментами (вы можете видеть это в моем примере второго примера).
Я сохранил точки в двух примерах выше для демонстрационных целей. Тем не менее, я сохраняю только текст (и, следовательно, удаляю точки и сегменты), оставляя мне что-то вроде этого:
repelPlot2 <- ggplot(data) + geom_text_repel(aes(x, y, label = label), segment.size = 0) + theme_classic(base_size = 16)
Мой вопрос в два раза:
1) Можно ли отталкивать текстовые метки только в направлении y?
2) Возможно ли получить структуру, содержащую новые (отталкиваемые) y-значения текста?
Спасибо за любой совет!