Как дрожать текст, чтобы избежать перекрытия в диаграмме рассеивания ggplot2?

Я хотел бы создать чистую версию диаграммы рассеяния текстовых меток в ggplot2. Цель состоит в том, чтобы визуально представить возрастающие значения, связанные примерно с 25 элементами. Я уже использую «position_jitter», но мне интересно, смогу ли я сделать лучше.

Вот некоторые фиктивные данные:

title <- rep("A Really Rather Long Text Label", 25)
value <- runif(25, 1,10)
spacing <- seq(1:25)
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE)

А вот код, который генерирует график:

library(ggplot2)
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) +
geom_text(aes(colour = value),
    size = 2.5, fontface = "bold",
    vjust = 0,
    position = position_jitter(width=5, height=0)) +
theme_bw() +
scale_x_continuous(limits = c(-5, 30))+
scale_colour_gradient(low = "#6BAED6", high = "#08306B") +
theme(axis.title.x = element_blank(),
      axis.ticks = element_blank(),
      axis.text.x = element_blank(),
      legend.position = "none")
myplot

Для всего этого текста достаточно места на графике разумного размера — при условии, что текст может свободно смещаться по горизонтали настолько, насколько это необходимо! Я не хочу дрожать по вертикали, потому что смысл в том, чтобы показать значение y, связанное с каждой текстовой меткой.

График выглядит немного по-разному каждый раз, когда вы запускаете команду ggplot, и иногда результаты дрожания лучше, чем в других случаях. Но я не нашел способа систематически предотвращать перекрытие меток.

Я был бы признателен за любые предложения о том, как очистить горизонтальное позиционирование текста без необходимости перемещать отдельные элементы вручную. Я также был бы рад услышать другие советы о том, как улучшить этот тип визуального представления.


person user1257313    schedule 25.06.2012    source источник
comment
Почти дубликат; по крайней мере, вы можете найти этот вопрос столь же информативным, как и любой ответ, который вы получите здесь.   -  person joran    schedule 26.06.2012
comment
Спасибо за ссылку - я бы не нашел ее по тем терминам, которые искал, а полезно знать, когда нет простого автоматизированного решения. В этом предыдущем вопросе вы приводите хороший аргумент в пользу ручного решения. В этом духе есть еще один быстрый (хотя и ограниченный) способ настроить график PDF: откройте в Adobe Acrobat, выберите инструмент «Редактировать текст документа» и добавьте пробелы в начале перекрывающейся метки. Этот маршрут позволяет только сдвинуть выделенный текст вправо, но этого может быть достаточно для тех, кто не ищет сюжет для публикации.   -  person user1257313    schedule 26.06.2012
comment
Ну, я также указал вам на этот пост, потому что в нем есть довольно полный список функций/пакетов, которые пытаются сделать это за вас.   -  person joran    schedule 26.06.2012
comment
@ user1257313, этот ответ SO также может быть полезен.   -  person Eric Fail    schedule 19.01.2013
comment
Похоже, что это сообщение с резюме может также ответить на тот же вопрос, решает ли оно вашу проблему? Как избежать перекрытия меток на графике R ?   -  person Thell    schedule 01.05.2014
comment
@joran: что лучше всего мы можем получить в простом ggplot2 без других пакетов?   -  person smci    schedule 03.05.2014
comment
Этот вопрос всплывает слишком часто, каждый раз, когда мы ссылаемся на одни и те же хаки. Хэдли, где ты? Пожалуйста, реализуйте интеллектуальное и автоматическое решение этой проблемы/geom_text()   -  person Vlo    schedule 15.07.2014
comment
Никто не мешает вам @Vlo найти решение этой проблемы. Получите код с github, обновите его и отправьте запрос на включение. Я уверен, что Хэдли объединит любое хорошее решение с ggplot2.   -  person Thierry    schedule 24.07.2014
comment
Это одна из тех проблем, которые кажутся простыми, но на самом деле их очень трудно решить. Нет другого решения, кроме как попробовать несколько пакетов, directlabel, пожалуй, самый многообещающий. Если данные не слишком плотные и обе оси непрерывны, вы можете использовать geom_text ggplot и указать смещение.   -  person Chris vCB    schedule 25.10.2014


Ответы (1)


Взгляните на пакет FField

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

(из этого сообщения https://stats.stackexchange.com/a/62856)

person Jonas    schedule 18.11.2014