问题
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