Держите очки в gganimate - PullRequest
       25

Держите очки в gganimate

0 голосов
/ 02 октября 2018

Я хотел бы задокументировать прогресс в тестовой ситуации с помощью gganimate: я зашел так далеко:

library(tidyverse)
library(gganimate)

data <- tribble(~user, ~agree, ~accord, ~messung,
            "1", .8, .9, 1,
            "2",.7, .8, 1,
           "3", .6, .9, 1)
data2 <- tribble(~user, ~agree2, ~accord2, ~messung2,
           "1",  .4, .7, 2,
            "2", .5, .9, 2,
            "3", .9, .9, 2)

data%>%
left_join(data2)%>%
 mutate(user = as.numeric(user))%>%
 ggplot(aes(x = accord, y = agree))+
 geom_point(aes(fill = "grey"), color = "grey", size = 2)+
 geom_point(aes(x = accord2, y = agree2), color = "green",
         size = 2)+
 xlim(0,1)+
 ylim(0,1)+
 geom_segment(aes(x = accord,
               y = agree,
               xend = accord2,
               yend = agree2),
           size = 0.5, arrow = arrow(type="closed", length =
                                       unit(.08, "inches"), angle = 30), 
color = "grey")+
theme_minimal()+
guides(fill=FALSE, color=FALSE)+
transition_manual(user)

Цвета и изображения сначала имеют второстепенное значение.Было бы важно узнать, как анимировать точки один за другим, чтобы предыдущие точки не исчезли снова?Любая помощь приветствуется!Спасибо

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Может быть, просто создайте другой фрейм данных, содержащий предыдущие наблюдения, и добавьте его, используя geom_point:

## Your example:
dat <- data %>%
  left_join(data2) %>%
  mutate(user = as.numeric(user))
ggplot(dat) +
  geom_point(aes(x = accord, y = agree)) +
  geom_point(aes(x = accord2, y = agree2), color = "green") +
  xlim(0, 1) +
  ylim(0, 1) +
  geom_segment(aes(
    x = accord,
    y = agree,
    xend = accord2,
    yend = agree2
  )) +
  transition_manual(user) -> p

# Now add:
rows <- unlist(sapply(2:nrow(dat), seq))
cols <- grep("agree|accord", names(dat), val = T)
df_points <- dat[rows, cols]
df_points$user <- rep(dat$user[-1], 2:nrow(dat))
p +
  geom_point(aes(x = accord, y = agree), df_points) +
  geom_point(aes(x = accord2, y = agree2), df_points, color = "green")

enter image description here

0 голосов
/ 03 октября 2018

Мне не удалось заставить его работать с transition_manual, но вы можете получить желаемый результат, используя transition_states.Если вы не хотите переход, вы можете установить значение transition_length на ноль.

data%>%
  left_join(data2)%>%
  mutate(user = as.numeric(user)) %>%

  ggplot() +
  geom_point(aes(x = accord,  y = agree),  color = "grey",  size = 2,  fill = "grey") +
  geom_point(aes(x = accord2, y = agree2), color = "green", size = 2)+
  xlim(0,1)+ ylim(0,1)+
  geom_segment(aes(x = accord, y = agree, xend = accord2, yend = agree2),
               size = 0.5, color = "grey",
               arrow = arrow(type="closed", length = unit(.08, "inches"), angle = 30))+
  theme_minimal() +
  # Use zero for "transition_length" to remove animation easing altogether
  transition_states(user, transition_length = 1, state_length = 2) +
  # shadow_mark(exclude_layer = 3) # This hides the arrow from animating
  shadow_mark() 

enter image description here

...