#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