Я относительно новичок в 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())