Geom_vline () не будет отображаться на ggplot - PullRequest
0 голосов
/ 09 мая 2020
> glimpse(mn)
Observations: 63
Variables: 5
$ date   <dttm> 2020-03-06, 2020-03-07, 2020-03-08, 2020-03-09, 2020-0…
$ state  <chr> "Minnesota", "Minnesota", "Minnesota", "Minnesota", "Mi…
$ fips   <dbl> 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,…
$ cases  <dbl> 1, 1, 2, 2, 3, 5, 9, 14, 21, 35, 54, 60, 77, 89, 115, 1…
$ deaths <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1…
> glimpse(events)
Observations: 7
Variables: 2
$ date  <date> 2020-03-06, 2020-03-13, 2020-03-15, 2020-03-16, 2020-03…
$ event <chr> "First Cases Confirmed", "State of emergency Declared", …

Я создал график для случаев MN

mn_plot <- ggplot(mn, aes(x = date, y = cases)) +
  geom_line() +
  ggtitle("COVID-19 Cases in Minnesota") +
  xlab("Date(2020)") + 
  ylab("Cases")

Хотел добавить несколько важных дат, поэтому я сделал это

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 = as.Date(date))

Теперь я хочу добавить трибл I. только что добавлен к моему графику, чтобы показать отметки времени, когда произошли события.

mn_plot +
  geom_vline(data = events, aes(xintercept = as.numeric(date)), linetype = "dotted")

Моя проблема в том, что вертикальные линии не отображаются.

Вот пакеты, которые я использую:

library("readxl")
library(dplyr)
library(ggplot2)
library(tidyverse)
library(scales)
library(lubridate)

1 Ответ

0 голосов
/ 09 мая 2020

Ваша переменная 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")

Что дает:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...