Как использовать geom_smooth() с gganimate

#r #gganimate

#r #gganimate

Вопрос:

Я изо всех сил пытаюсь понять, как использовать geom_smooth() вместе с. gganimate

Reprex доступен ниже. При выполнении инструкции plot, исключающей transition_time функцию, я визуализирую статический график, как и ожидалось.

Проблема возникает, когда я пытаюсь сделать этот график динамическим, используя transition_time() , а также shadow_mark() для сохранения точек. Возникает следующая ошибка:

Ошибка в $<-.data.frame ( *tmp* , «group», значение = «»): замена имеет 1 строку, данные имеют 0

 library(readr)
library(tidyr)
library(ggplot2)
library(gifski)
library(gganimate)
library(dplyr)

tst <- readr::read_csv("https://elpais.com/especiales/2019/elecciones-generales/encuestas-electorales/ficheros/tabla.csv?1554807308", 
                       col_types = cols(
                         date = col_date(format = "%d/%m/%y"),
                         house = col_character(),
                         sample = col_double(),
                         turnout = col_double(),
                         PP = col_double(),
                         PSOE = col_double(),
                         UP = col_double(),
                         Cs = col_double(),
                         ERC = col_double(),
                         PDC = col_double(),
                         PNV = col_double(),
                         PAC = col_double(),
                         BIL = col_double(),
                         CC = col_double(),
                         VOX = col_double(),
                         COM = col_double()
                       ))

tst %>% 
  select(date, house, PP, PSOE, UP, Cs, VOX) %>% 
  gather(key = partido, voto, PP, PSOE, UP, Cs, VOX) %>% 
  ggplot(aes(x = date, y = voto, color = partido))  
  geom_point()   
  geom_smooth(method = 'loess', formula = 'y ~ x', se = FALSE)  
  transition_time(time = date)   shadow_mark()
  
 Error in `$<-.data.frame`(`*tmp*`, "group", value = ""): replacement
has 1 row, data has 0
In addition: There were 16 warnings (use warnings() to see them)
  

Создано 2019-04-10 пакетом reprex (версия 0.2.1)

Я ожидаю чего-то похожего на это (источник):

из ссылки на github

Ответ №1:

Попробуйте это:

 tmp <- tst %>% 
  select(date, house, PP, PSOE, UP, Cs, VOX) %>% 
  gather(key = partido, voto, PP, PSOE, UP, Cs, VOX) %>%
  filter(!is.na(voto))

ggplot(tmp, aes(x = date, y = voto, color = partido))   
  geom_smooth(method = "loess", formula = 'y ~ x', se = FALSE)   
  geom_point(aes(group = rev(seq_along(date))))  
  transition_reveal(rev(seq_along(date)))   shadow_mark()
  

Комментарии:

1. Спасибо @Raoul Duke! Я думаю, что это приближается к тому, что я ожидал. На всякий случай, вы знаете, как заставить их появляться одновременно?

2. Мой плохой здесь @Raoul Duke, под «ними» я подразумеваю все сюжетные линии, движущиеся вперед одновременно, а не одну за другой

3. Нет проблем, я понял ваше намерение сразу после создания комментария. Я могу получить только точки, используя ggplot(tmp, aes(x = date, y = voto, color = partido, group = partido)) geom_point() transition_components(date) shadow_mark() . Поскольку слои пути не поддерживаются transition_components , я не уверен, как добавить сглаживание.

4. Я пытаюсь повторить это, но получаю Error in `$<-.data.frame`(`*tmp*`, "group", value = "") : replacement has 1 row, data has 0 In addition: There were 13 warnings (use warnings() to see them)