Keep points in gganimate

本秂侑毒 提交于 2020-01-04 05:05:45

问题


I would like to document the progress in a test situation using gganimate: I have come so far:

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)

The colours and representations are of secondary importance at first. It would be important to learn how to animate the points one after the other without the previous points disappearing again? Any help is welcome! Thanks


回答1:


Maybe just create another dataframe that holds the previous observations, and add it using 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")




回答2:


I wasn't able to get it working with transition_manual, but you can get the desired output using transition_states. If you want no transition, you can set transition_length to zero.

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() 



来源:https://stackoverflow.com/questions/52614197/keep-points-in-gganimate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!