# You R My Valentine 3.0!

After a hiatus of three years already(!) I wanted to make another Valentine’s post. Like in 2019 and 2020 I wanted to make something special for my wonderful R-Lady. I tried to figure rayshader out for a while now and tried to make a heart shape map first. After some failed attempts I noticed you can also turn ggplot2 objects into 3-D objects, which is absolutely amazing. So without further ado, here is some code:

library(rayshader)
library(tidyverse)

# make data for one heart
hrt_dat <- data.frame(t = seq(0, 2 * pi, by = 0.01)) %>%
mutate(xhrt = 16 * sin(t) ^ 3,
yhrt = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))

# replicate the same 50 times, decreasing radius each time
hrt_dat_all <- map2_df(seq(from = 1, to = 0.05, length.out = 50),
seq_len(50),
function(x, i) {
hrt_dat %>%
mutate(xhrt = xhrt * x,
yhrt = yhrt * x,
run = log10(i))
})

# make plot in ggplot
hrt <- ggplot(hrt_dat_all, aes(xhrt, yhrt, colour = run)) +
geom_point(size = 4, alpha = 0.9, show.legend = FALSE) +
render_movie("heart3d.mp4", frames = 180, fps = 15)