Сделайте несколько анимаций в ggplot - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь разработать анимационный сюжет, показывающий, как с течением времени команды НБА менялись с частотой трех попыток и передач. В то время как точки на моем графике меняются правильно, я пытался добавить вертикальную и горизонтальную среднюю линию, однако она остается постоянной для общих средних, а не смещается год за годом.

p<-ggplot(dataBREFPerPossTeams, aes(astPerPossTeam,fg3aPerPossTeam,col=ptsPerPossTeam))+
  geom_point()+
  scale_color_gradient(low='yellow',high='red')+
  theme_classic()+
  xlab("Assists Per 100 Possessions")+
  ylab("Threes Attempted Per 100 Possessions")+labs(color="Points Per 100 Possessions")+
  geom_hline(aes(yintercept = mean(fg3aPerPossTeam)), color='blue',linetype='dashed')+
  geom_vline(aes(xintercept = mean(astPerPossTeam)), color='blue',linetype='dashed')

anim<-p+transition_time(as.integer(yearSeason))+labs(title='Year: {frame_time}')

animate(anim, nframes=300)

Example of GIF

В идеале, две пунктирные линии будут сдвигаться с годами, однако сейчас они остаются постоянными. Есть идеи как это исправить?

1 Ответ

1 голос
/ 09 июня 2019

Я использую datasets::airquality, так как вы не передали свои данные. Идея здесь в том, что вам нужно, чтобы ваши данные (в данном случае это mean) в качестве переменной в вашем среднем значении, поэтому gganimate может нарисовать связь между значением и frame (то есть transition_time).

Итак, я сделал группировку по frame (здесь месяц, для вас это будет yearSeason), а затем изменил столбец со средним значением моих желаемых переменных. Затем в geoms я использовал эту добавленную переменную вместо получения mean внутри geom. Смотри ниже;

library(datasets) #datasets::airquality

library(ggplot2)
library(gganimate)
library(dplyr)

g <- airquality %>% 
             group_by(Month) %>% 
             mutate(mean_wind=mean(Wind),
                    mean_temp=mean(Temp)) %>% 
              ggplot()+
          geom_point(aes(Wind,Temp, col= Solar.R))+
          geom_hline(aes(yintercept = mean_temp), color='blue',linetype='dashed')+
          geom_vline(aes(xintercept = mean_wind), color='green',linetype='dashed')+
          scale_color_gradient(low='yellow',high='red')+
          theme_classic()+
          xlab("Wind")+
          ylab("Temp")+labs(color="Solar.R")

animated_g <- g + transition_time(as.integer(Month))+labs(title='Month: {frame_time}')

animate(animated_g, nframes=18)

Создан в 2019-06-09 пакетом представ. (v0.3.0)

...