Я новичок в gganimate
. Отличный пакет.
Я могу воспроизвести примеры пакетов, но изо всех сил пытаюсь отобразить мои фактические варианты использования. Интересно, захотят ли пользователи gganimate
определить, есть ли более эффективный способ запуска этого кода. Я пробовал на своем локальном компьютере и в RStudio Cloud. Я также пробовал строить еженедельные данные, а не дневные (поэтому уменьшил общие данные на 6/7).
# load packages
library(tidyverse)
library(sf)
library(viridis)
library("rio")
# get county geometry
url <- "https://gist.githubusercontent.com/ericpgreen/717596c37478ef894c14b250477fae92/raw/c2cf4b273a2c7f0677f22a37b5e9f7e893204e3b/cali.R"
cali <- rio::import(url)
# get covid data
covid <- read.csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv", stringsAsFactors = FALSE)
# prep covid data
covidPrepped <-
covid %>%
filter(state=="California") %>%
select(date, fips, cases, deaths) %>%
mutate(date = lubridate::ymd(date)) %>%
mutate(fips = stringr::str_pad(fips, width=5, pad="0"))
# make sure every county has a row for every day
complete <-
cali %>%
left_join(covidPrepped, by = c("GEOID" = "fips")) %>%
complete(GEOID, date, fill = list(cases = 0)) %>%
select(date, GEOID, cases)
# join back to geometry and construct casesPop
pData <-
complete %>%
left_join(select(cali, GEOID, NAME, estimate, geometry),
by = "GEOID") %>%
st_as_sf() %>%
mutate(casesPop = (cases/estimate)*100000) %>%
mutate(casesPop = ifelse(is.na(casesPop), 0, casesPop)) %>%
mutate(group = cut(casesPop,
breaks = c(0, 1, 3, 10, 30, 100,
300, 1000, 3000, 10000,
Inf),
labels = c(0, 1, 3, 10, 30, 100,
300, 1000, 3000, 10000),
include.lowest = TRUE)
) %>%
mutate(month = lubridate::month(date,
label=TRUE,
abbr=TRUE),
day = lubridate::day(date),
monthDay = paste(month, day, sep=" ")) %>%
select(GEOID, geometry, group, monthDay)
# animate
ggplot(pData) +
geom_sf(aes(fill = group), color = "white", size=.1) +
scale_fill_viridis_d(option = "magma", drop=FALSE) +
coord_sf(crs = 102003) +
# on RStudio Cloud I got a CRS error with the line above
# switching to the line below works
#coord_sf(crs = "+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80", datum=NA) +
theme_minimal() +
theme(legend.position = "top",
legend.box = "horizontal",
legend.title = element_blank(),
legend.justification='left') +
guides(fill = guide_legend(nrow = 1)) +
# gganimate portion
transition_states(monthDay,
transition_length = 4,
state_length = 1) +
ease_aes('cubic-in-out')