Skip to content

Instantly share code, notes, and snippets.

@thoughtfulbloke
Created October 31, 2019 00:16
Show Gist options
  • Save thoughtfulbloke/f1e27f681ac21ba14541dec61ec91847 to your computer and use it in GitHub Desktop.
Save thoughtfulbloke/f1e27f681ac21ba14541dec61ec91847 to your computer and use it in GitHub Desktop.
making animated breathing gif in #rstats
library(ggplot2)
library(dplyr)
library(gganimate)
exhale <- 5 # seconds
exhaled_pause <- 3 # seconds
inhale <- 4 # seconds
inhaled_pause <- 4 # seconds
frames_per_second = 16
exh <- data.frame(stage = rep("exhale", exhale*frames_per_second),
onscreen = rep(paste("exhale", exhale), exhale*frames_per_second),
strength = 100*((exhale*frames_per_second):1)/(exhale*frames_per_second),
stringsAsFactors = FALSE)
exp <- data.frame(stage = rep("exhaled_pause", exhaled_pause*frames_per_second),
onscreen = rep(paste("pause",exhaled_pause), exhaled_pause*frames_per_second),
strength = rep(1,exhaled_pause*frames_per_second),
stringsAsFactors = FALSE)
inh <- data.frame(stage = rep("inhale", inhale*frames_per_second),
onscreen = rep(paste("inhale",inhale), inhale*frames_per_second),
strength = 100*(1:(inhale*frames_per_second))/(inhale*frames_per_second),
stringsAsFactors = FALSE)
inp <- data.frame(stage = rep("inhaled_pause", inhaled_pause*frames_per_second),
onscreen = rep(paste("pause",inhaled_pause), inhaled_pause*frames_per_second),
strength = rep(100,inhaled_pause*frames_per_second),
stringsAsFactors = FALSE)
gf <- bind_rows(inh, inp, exh, exp) %>%
mutate(frame_n = row_number()) %>%
ggplot(aes(colour=strength,x=strength)) + geom_point(y=2, size=4) + scale_color_viridis_c() +
scale_size_identity() + ylim(1,3) + coord_polar() +
theme_void() + theme(legend.position = "none") +
geom_text(aes(label=onscreen),x=0,y=1, size=6, colour="#AAAAAA") +
transition_states(frame_n, transition_length = 0, state_length = 1)
animate(gf, nframes =((exhale+exhaled_pause+inhale+inhaled_pause)*frames_per_second),
fps=frames_per_second)
anim_save("~/Desktop/breath.gif")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment