Манипулирование {closest_state} в gganimate - PullRequest
1 голос
/ 05 марта 2020

Я относительно новичок в R и пытаюсь использовать gganimate, чтобы нанести на карту места возникновения данного явления на карте Соединенных Штатов. У меня есть frameid столбца, который рассчитывается путем умножения недели столбца на 100 и добавления n-го вхождения указанного явления. Таким образом, 7-е вхождение явления в Нью-Йорке в первую неделю набора данных будет иметь frameid 107, а 7-е вхождение явления в Los Angeles также будет иметь frameid 107. Я передаю frameid в transition_states, но проблема в том, что я хочу отображать только неделю (т. е. все, кроме двух последних символов, поскольку вхождение никогда не может превышать 99), поэтому мне нужно как-то манипулировать frameid. Попытка решения:

    labs(title = "My Title",
    subtitle = paste("2019, Week",
                     substring("{closest_state}", 1, nchar("{closest_state}")-2)))

Возвращает 50 предупреждений, первое из которых «1: Невозможно получить размеры таблицы графика. Область графика может быть не фиксированной», а последние 49 из которых «Ожидают»} '".

Я также пытался:

gsub('.{3}$', '', "{closest_state}")

, который возвращает похожую ошибку. Есть ли решение или обходной путь для этой проблемы, или «{closest_state}» нельзя манипулировать?

Вот воспроизводимый код:

library(ggplot2)
library(gganimate)
library(fiftystater)

sample <- data.frame(
          frameid = c(101, 101, 101, 102, 102, 102, 201, 201, 201),
          latitude = c(38.02262, 38.99691, 41.31194, 27.00071,
                        28.539, 30.2836, 38.02262, 38.03112,
                        40.21603),
          longitude = c(-84.50521, -104.84369, -105.56906, -108.4121,
                        -81.4028, -97.73234, -84.50521, -78.51371,
                        -85.4177)
)


fortynine_states <- fifty_states %>%
                    filter(id != "alaska")

my_plot <- sample %>%
  ggplot(aes(x = longitude, y = latitude)) +
  geom_polygon(data = fortynine_states, 
               mapping = aes(long, lat, group = group),
               fill = "white", color = "black") +
  geom_point(aes(alpha = 0.2, color = "red")) +
  coord_map() +
  labs(title = "My Title",
       subtitle = paste("2019, Week",
                        substring("{closest_state}", 1, nchar("{closest_state}")-2))) +
  transition_states(frameid, transition_length = 2) +
  exit_fade()

  animate(my_plot, duration = 5, fps = 20, width = 400, height = 300, renderer = gifski_renderer())
...