сложность рендеринга gganimate map - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в 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') 
...