[This article was first published on R on kieranhealy.org, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Some Lissajous animations for Pi Day. Made with R, ggplot, and gganimate.
< video autoplay loop muted playsinline controls="true" width = "100%"> < source src="./lissajous-fixed-lg-2.mp4" type="video/mp4"> < source src="./lissajous-fixed-lg-2.mov" type="video/mov"> < source src="./lissajous-fixed-lg-2.webm" type="video/webm">And the really not very efficient code that made them:
r
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
library(tidyverse) library(gganimate) library(transformr) df_base <- tibble( id = seq(1, 1000, 1), t_vals = seq(0, 2 * pi, length.out = 1000)) circles <- function(t) { x01 <- cos(t * 1) y01 <- sin(t * 1) x02 <- cos(t * 2) y02 <- sin(t * 2) x03 <- cos(t * 3) y03 <- sin(t * 3) x04 <- cos(t * 4) y04 <- sin(t * 4) x05 <- cos(t * 5) y05 <- sin(t * 5) x06 <- cos(t * 6) y06 <- sin(t * 6) x07 <- cos(t * 7) y07 <- sin(t * 7) x08 <- cos(t * 8) y08 <- sin(t * 8) x09 <- cos(t * 9) y09 <- sin(t * 9) x10 <- cos(t * 10) y10 <- sin(t * 10) tibble( tick = seq_along(t), x01, x02, x03, x04, x05, x06, x07, x08, x09, x10, y01, y02, y03, y04, y05, y06, y07, y08, y09, y10 ) } df_out <- circles(t = df_base$t_vals) df <- bind_cols(df_base, df_out) |> select(id, tick, everything()) |> pivot_longer(x01:x10, names_to = "x_group", values_to = "x") |> pivot_longer(y01:y10, names_to = "y_group", values_to = "y") |> mutate(x_group = str_remove(x_group, "x"), y_group = str_remove(y_group, "y")) |> unite("group_id", x_group, y_group, remove = FALSE) out <- df |> ggplot(aes(x = x, y = y, color = group_id, group = group_id)) + geom_point(size = 3) + geom_path() + facet_grid(x_group ~ y_group) + coord_equal() + guides(color = "none") + theme_void() + transition_reveal(tick) + ease_aes("linear") animate(out, duration = 30, fps = 24, height = 1080, width = 1080, renderer = ffmpeg_renderer()) anim_save(filename = "lissajous-fixed-lg-2.webm", height = 1080, width = 1080) |
To leave a comment for the author, please follow the link and comment on their blog: R on kieranhealy.org.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.