Подтвердить что ты не робот

Как дрожать текст, чтобы избежать совпадения в диаграмме рассеяния 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 - и иногда дрожащие результаты лучше, чем в другие времена. Но я не нашел способ систематического предотвращения перекрытия меток.

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

4b9b3361

Ответ 1

Посмотрите на пакет FField

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

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