---
title: "svg-animation"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{svg-animation}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
```{r eval=TRUE}
library(emphatic)
library(dplyr)
library(tidyr)
# dimensions of data.frame
w <- 8
h <- 20
# Create an emphatic object
create_sinus <- function(xoff, yoff) {
expand.grid(x=1:w, y=1:h) |>
as.data.frame() |>
mutate(val = cos((x - w/2)/w + xoff) + sin((y - h/3)/h + yoff) ) |>
mutate(val = round(val, 3)) |>
spread(x, val) |>
select(-y) |>
setNames(sprintf("% 7i", seq(w))) |>
hl(ggplot2::scale_color_gradient2(), cols = all())
}
# Test
create_sinus(0, 0)
```
```{r}
# Loop over x,y and create a list of emphatic objects
groups <- purrr::map2(
cos(seq(0, 2*pi , length.out = 60)),
sin(seq(-2*pi, 2*pi, length.out = 60)),
~create_sinus(.x, .y)
)
# Save the list as an SVG animation to file
if (FALSE) {
as_svg_anim(groups, duration = 0.1, playback = 'infinite') |>
writeLines("sinus.svg")
}
# Play the SVG animation back in the Rstudio console
if (FALSE) {
as_svg_anim(groups, duration = 0.1, playback = 'infinite', browsable = TRUE)
}
```