Есть ли способ иметь непересекающиеся метки точек данных на участке местности в R? - PullRequest
2 голосов
/ 03 апреля 2019

Я пытаюсь воспроизвести диаграмму, найденную на FiveThirtyEight в https://fivethirtyeight.com/features/how-cable-news-reacted-to-the-cohen-hearing/.. Это показывает график местности, где расположение слов на оси 3 показывает пропорцию, указанную этой соответствующей сетью.

В настоящее время я использую R, ggplot2 и, что еще важнее, ggtern (который я широко использую для земных участков).Однако я никогда не нашел способ сделать метки данных в точках , а не перекрывающимися.Я всегда надеялся, что ggtern будет взаимодействовать с ggrepel, но, к сожалению, это не так (насколько мне известно). Есть ли способ заставить их взаимодействовать или найти другой способ сделать это?

Диаграмма, приведенная в ссылке для ясности того, что я ищу: FiveThirtyEight ternery example

Пример моей диаграммы со словами, перекрывающимися и выглядящими плохо: Bad ternery plot and bad visualization

РЕДАКТИРОВАТЬ Код для создания моей отвратительной диаграммы:

    data <- data.frame(word = c("A","random","set","of","words","that","can","hopefully","help","someone","solve","my","issue","of","overlapping","labels","and","make","my","chart","readable","and","a","good","visualization"),
               axis1 = sample(1:100),
               axis2 = sample(1:100),
               axis3 = sample(1:100))

    ggtern(data = data,
        aes(x = axis1, y = axis2, z = axis3, colour = word, label = word)) +
      geom_point(size = 1) +
      geom_text()

1 Ответ

0 голосов
/ 03 апреля 2019

Хорошо, значит, вам нужна функциональность, как в пакете ggrepel. Пока ggrepel здесь не работает, вы можете использовать position_nudge_tern и check_overlap:

word = c("A","random","set","of","words","that","can","hopefully","help","someone","solve","my","issue","of","overlapping","labels","and","make","my","chart","readable","and","a","good","visualization")
col = c("red", "blue", "green", "red", "blue", "green","red", "blue", "green", "red", "blue", "green","red", "blue", "green", "red", "blue", "green","red", "blue", "green", "red", "blue", "green","red")

n  = 25   #Number of Data Points
nv = 0.1  #Vertical Adjustment
pn = position_nudge_tern(y=nv,x=-nv/2,z=-nv/2)

data <- data.frame(x = sample(1:25),
               y = sample(1:25),
               z = sample(1:25), 
               label=word)

ggtern(data = data, aes(x = x, y = y, z = z, colour = col, label = word)) +
  geom_point(size = 1) +
  theme_nomask() + #Allow Labels to Spool Over Edges
  geom_text(position=pn,aes(label=word),check_overlap=T, size=5)

Что даст вам неперекрывающиеся ярлыки: enter image description here

...