Как использовать ggrepel для размещения меток данных

Сначала образец данных и некоторые манипуляции.

  A<- c(150,125,0,-300,-350,-370)
  Series<- 
  c("Construction","Manufacturing","Information","Health_Care","Education","Government")

  testdf <- data.frame(A,Series)

  jobgrowth<-ggplot(data=testdf, aes(y=A, x = reorder(Series,A))) + 
  geom_col(color="blue") + coord_flip() +
  labs(x = NULL) + ggtitle("Interesting Title") +
  theme(plot.title.position = "plot",
      plot.title = element_text(hjust = 0.5))+
      

Осмотревшись, я обнаружил, что ggrepel - хороший пакет для этого (https://ggrepel.slowkow.com/articles/examples.html). Однако мои попытки приводят к ошибке

   Error: geom_text_repel requires the following missing aesthetics: label

Итак, мой вопрос: куда вставить текст меток, а затем как добиться, чтобы метки данных поместились справа, когда значение положительное, и слева, когда оно отрицательное? Конструкция, например, будет иметь 150 справа от полосы.


person Tim Wilcox    schedule 05.01.2021    source источник


Ответы (1)


Вам не нужен ggrepel. ggrepel - отличный выбор, если вам нужно иметь дело с перекрывающимися ярлыками. Однако в случае вашей гистограммы я бы предложил использовать по умолчанию geom_text, например:

Используя ifelse, вы можете

  1. установите hjust вправо или влево, чтобы выровнять метки
  2. добавьте пробел между полосами и метками
A <- c(150, 125, 0, -300, -350, -370)
Series <-
  c("Construction", "Manufacturing", "Information", "Health_Care", "Education", "Government")

testdf <- data.frame(A, Series)

library(ggplot2)

ggplot(data = testdf, aes(y = A, x = reorder(Series, A))) +
  geom_col(color = "blue") +
  coord_flip() +
  scale_y_continuous(expand = expansion(mult = 0.5)) +
  geom_text(aes(label = A, hjust = ifelse(A > 0, 0, 1), y = A + ifelse(A > 0, 10, -10))) +
  labs(x = NULL) +
  ggtitle("Interesting Title") +
  theme(
    plot.title.position = "plot",
    plot.title = element_text(hjust = 0.5)
  )

person stefan    schedule 05.01.2021