Ваша переменная mn$date
имеет формат <dttm>
datetime (как выражено tibbles
), он эквивалентен POSIXct
: как определено комментарием @Ben; формат включает: год, месяц, день, час, минуту и секунду.
В то время как ваша переменная events$date
имеет формат <date>
, который включает год, месяц, день
Чтобы получить geom_vline для построения графика вам нужно, чтобы обе переменные даты были в одном формате даты или datetime; ответ идет для datetime.
Там немного о tidyverse, относящемся к датам и времени в https://r4ds.had.co.nz/dates-and-times.html.
Кстати, если бы вы могли включить минимальный фрейм данных или в будущих вопросах вы действительно поможете любому, кто захочет ответить: в этом случае mn
составлено из случайных данных, чтобы дать ответ.
library(tibble)
library(dplyr)
library(lubridate)
library(ggplot2)
mn <- tibble(
date = seq(ymd_hms("2020-03-06 00:00:00"), by = "day", length.out = 63),
cases = c(1L, 2L, 2L, 3L, 5L, 9L, 14L, 21L, 35L,
54L, 60L, 77L, 89L, 115L, 137L, 169L, 235L, 261L, 287L, 346L,
398L, 441L, 503L, 576L, 629L, 689L, 742L, 789L, 865L, 935L, 986L,
1069L, 1154L, 1242L, 1336L, 1427L, 1621L, 1650L, 1695L, 1809L,
1912L, 2071L, 2213L, 2356L, 2470L, 2567L, 2721L, 2942L, 3185L,
3446L, 3602L, 3816L, 4181L, 4644L, 5136L, 5730L, 6228L, 6663L,
7234L, 7851L, 8579L, 9365L, 10088L))
events <- tribble(
~ date, ~ event,
"2020-03-06", "First Cases Confirmed",
"2020-03-13", "State of emergency Declared",
"2020-03-15", "Temporary shut down of schools",
"2020-03-16", "All non-erssential businesses close",
"2020-03-21", "First death recorded in MN",
"2020-04-08", "Stay-at-Home Order Placed",
"2020-04-30", "Stay-at-Home Order Extended",
) %>%
mutate(date = ymd_hms(paste0(date, " 00:00:00")))
ggplot(mn, aes(x = date, y = cases)) +
geom_line() +
geom_vline(data = events, aes(xintercept = date), linetype = "dotted")+
ggtitle("COVID-19 Cases in Minnesota") +
xlab("Date(2020)") +
ylab("Cases")
Что дает: