Добавление аннотации в график с помощью ggplot2 в R

#r #ggplot2

Вопрос:

У меня есть df с информацией о скользящем среднем числе смертей от болезни в день с 2020-04-11 по 2021-07-01 (ГГГГ-ММ-ДД).

 head(df)
        DATE  DEATHS_RA
1 2020-04-11   1.666667
2 2020-04-12   2.166667
3 2020-04-13   2.333333
4 2020-04-14   2.500000
5 2020-04-15   2.666667
6 2020-04-16   2.833333
 

С помощью этого кода я получаю этот базовый график.

 try1 <- ggplot(df)  
  aes(x = DATE, y = DEATHS_RA)  
  geom_line(size = 1, colour = "#871709")  
  theme_minimal() 
  labs(x="",y="")
 

введите описание изображения здесь

Но я хочу знать, могу ли я добавить аннотацию, подобную следующему изображению (я извлек ее из Интернета).
введите описание изображения здесь

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

 try1 
geom_label(label="Look at this!", x=2021-05-01,y=10,
    hjust = 0, 
    vjust = 0.5, 
    lineheight = 0.8,
    colour = "#555555", 
    fill = "white", 
    label.size = NA, 
    size = 6
  )
 

Ответ №1:

Вы DATE принадлежите к классу Date , что делает возможным построение линии. поэтому, если вы хотите аннотировать, вам также нужно ввести его как класс Date :

 df = structure(list(DATE = structure(c(18363, 18364, 18365, 18366, 
18367, 18368), class = "Date"), DEATHS_RA = c(1.666667, 2.166667, 
2.333333, 2.5, 2.666667, 2.833333)), row.names = c("1", "2", 
"3", "4", "5", "6"), class = "data.frame")
 

Мы создаем фрейм данных аннотаций, содержащий ваши метки, это будет полезно позже:

 ann = data.frame(DATE = as.Date("2020-04-12"),
DEATHS_RA=2.16,label = "Look at this!")
 

это выглядит так:

 try1 
geom_label(data = ann,aes(label=label))
 

введите описание изображения здесь

Чтобы использовать стрелку, нам нужен ggrepel:

 library(ggrepel)
try1 
geom_label_repel(data = ann,aes(label=label),box.padding = 5)
 

введите описание изображения здесь

Ответ №2:

Я думаю, вам, вероятно, нужно обернуть label, y и x в aes()… хотя с geom_text это может быть проще. У вас также могут возникнуть проблемы с вашим x — 2021-05-01 = 2015? Возможно, вы захотите завернуть его в файл.Date().

Способ создания второго графика, вероятно, состоит в том, чтобы иметь геом_поинт большего размера под интересующей точкой(точками). Затем стрелка выполняется с помощью geom_curve, а текст, вероятно, с помощью geom_text