Last active
August 31, 2018 02:07
-
-
Save djnavarro/6d02eaea072629d37458973686999362 to your computer and use it in GitHub Desktop.
wear it purple day animation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(tidyverse) | |
library(e1071) | |
library(gganimate) | |
# take a vector of inputs and return a binary | |
# matrix corresponding to the character | |
read_letter <- function(...) { | |
cbind( | |
matrix(data = c(...), nrow = 9, ncol = 5, byrow = TRUE), | |
matrix(data = rep(0,9), nrow = 9, ncol = 1) | |
) | |
} | |
# for visual clarity only | |
. <- 0 | |
# character data based on the BPdots font | |
# https://www.1001fonts.com/bpdots-font.html | |
char_list <- list( | |
" " = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"A" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.) | |
, | |
"B" = read_letter( | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"C" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,1, | |
.,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"D" = read_letter( | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"E" = read_letter( | |
1,1,1,1,1, | |
1,.,.,.,., | |
1,.,.,.,., | |
1,1,1,1,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"F" = read_letter( | |
1,1,1,1,1, | |
1,.,.,.,., | |
1,.,.,.,., | |
1,1,1,1,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"G" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,1,1, | |
1,.,.,.,1, | |
.,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"H" = read_letter( | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"I" = read_letter( | |
1,1,1,1,1, | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
1,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"J" = read_letter( | |
1,1,1,1,., | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,.,1,., | |
1,.,.,1,., | |
.,1,1,.,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"K" = read_letter( | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,1,., | |
1,1,1,.,., | |
1,.,.,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"L" = read_letter( | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,.,., | |
1,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"M" = read_letter( | |
1,.,.,.,1, | |
1,1,.,1,1, | |
1,1,.,1,1, | |
1,.,1,.,1, | |
1,.,1,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"N" = read_letter( | |
1,.,.,.,1, | |
1,1,.,.,1, | |
1,.,1,.,1, | |
1,.,1,.,1, | |
1,.,.,1,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"O" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"P" = read_letter( | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., | |
1,.,.,.,., | |
1,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"Q" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,1,.,1, | |
.,1,1,1,., | |
.,.,1,.,., | |
.,.,.,1,.), | |
"R" = read_letter( | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., | |
1,.,.,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"S" = read_letter( | |
.,1,1,1,1, | |
1,.,.,.,., | |
1,.,.,.,., | |
.,1,1,1,., | |
.,.,.,.,1, | |
.,.,.,.,1, | |
1,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"T" = read_letter( | |
1,1,1,1,1, | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"U" = read_letter( | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"V" = read_letter( | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,.,1,., | |
.,1,.,1,., | |
.,.,1,.,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"W" = read_letter( | |
1,.,.,.,1, | |
1,.,1,.,1, | |
1,.,1,.,1, | |
1,.,1,.,1, | |
1,.,1,.,1, | |
.,1,.,1,., | |
.,1,.,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"X" = read_letter( | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,.,1,., | |
.,.,1,.,., | |
.,1,.,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"Y" = read_letter( | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,.,1,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"Z" = read_letter( | |
1,1,1,1,1, | |
.,.,.,.,1, | |
.,.,.,1,., | |
.,.,1,.,., | |
.,1,.,.,., | |
1,.,.,.,., | |
1,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"a" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., | |
.,.,.,.,1, | |
.,1,1,1,1, | |
1,.,.,.,1, | |
.,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"b" = read_letter( | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,1,1,., | |
1,1,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,.), | |
"c" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., ## | |
1,.,.,.,1, | |
1,.,.,.,., | |
1,.,.,.,1, | |
.,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"d" = read_letter( | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,1,1,1,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,1,1, | |
.,1,1,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"e" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,1,1,1,1, | |
1,.,.,.,., | |
.,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"f" = read_letter( | |
.,.,.,1,1, | |
.,.,1,.,., | |
.,1,1,1,1, | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
1,1,1,1,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"g" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,1,1, | |
.,1,1,.,1, | |
.,.,.,.,1, | |
.,1,1,1,.), | |
"h" = read_letter( | |
1,.,.,.,., | |
1,.,.,.,., | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,.), | |
"i" = read_letter( | |
.,.,1,.,., | |
.,.,.,.,., | |
1,1,1,.,., ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"j" = read_letter( | |
.,.,.,.,1, | |
.,.,.,.,., | |
.,1,1,1,1, ## | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,.,1, ## | |
1,.,.,.,1, | |
.,1,1,1,.), | |
"k" = read_letter( | |
1,.,.,.,., | |
1,.,.,.,., | |
1,.,.,1,., ## | |
1,.,.,1,., | |
1,1,1,.,., | |
1,.,.,1,., | |
1,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"l" = read_letter( | |
1,1,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"m" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,1,.,1, ## | |
1,1,1,1,1, | |
1,.,1,.,1, | |
1,.,1,.,1, | |
1,.,1,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"n" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,1,1,., ## | |
1,1,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"o" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., ## | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"p" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,1,1,., ## | |
1,1,.,.,1, | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,1,1,1,., ## | |
1,.,.,.,., | |
1,.,.,.,.), | |
"q" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,1, ## | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,1,1, | |
.,1,1,.,1, ## | |
.,.,.,.,1, | |
.,.,.,.,1), | |
"r" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,1,.,1,1, ## | |
.,1,1,.,., | |
.,1,.,.,., | |
.,1,.,.,., | |
1,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"s" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,1, ## | |
1,.,.,.,., | |
.,1,1,1,., | |
.,.,.,.,1, | |
1,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"t" = read_letter( | |
.,.,.,.,., | |
.,.,1,.,., | |
1,1,1,1,1, ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,.,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"u" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,.,.,1, ## | |
1,.,.,.,1, | |
1,.,.,.,1, | |
1,.,.,1,1, | |
.,1,1,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"v" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,.,.,1, ## | |
1,.,.,.,1, | |
.,1,.,1,., | |
.,1,.,1,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"w" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,.,.,1, ## | |
1,.,1,.,1, | |
1,.,1,.,1, | |
.,1,.,1,., | |
.,1,.,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"x" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,.,.,1, ## | |
1,.,.,.,1, | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"y" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,.,.,.,1, ## | |
1,.,.,.,1, | |
.,1,.,1,., | |
.,1,.,1,., | |
.,.,1,.,., ## | |
.,.,1,.,., | |
1,1,.,.,.), | |
"z" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,1,1,1,1, ## | |
.,.,.,1,., | |
.,.,1,.,., | |
.,1,.,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"1" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,1,1,.,., ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"2" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., ## | |
1,.,.,.,1, | |
.,.,1,1,., | |
.,1,.,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"3" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., ## | |
1,.,.,.,1, | |
.,.,.,.,1, | |
.,1,1,1,., | |
.,.,.,.,1, ## | |
1,.,.,.,1, | |
.,1,1,1,.), | |
"4" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,1,., ## | |
.,.,1,1,., | |
.,1,.,1,., | |
1,.,.,1,., | |
1,1,1,1,1, ## | |
.,.,.,1,., | |
.,.,.,1,.), | |
"5" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,1,1,1,1, ## | |
1,.,.,.,., | |
1,.,.,.,., | |
1,1,1,1,., | |
.,.,.,.,1, ## | |
.,.,.,.,1, | |
1,1,1,1,.), | |
"6" = read_letter( | |
.,.,1,1,., | |
.,1,.,.,., | |
1,.,.,.,., ## | |
1,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"7" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,1, | |
.,.,.,1,., | |
.,.,1,.,., | |
.,1,.,.,., ## | |
.,1,.,.,., | |
.,1,.,.,.), | |
"8" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, ## | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"9" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., ## | |
1,.,.,.,1, | |
1,.,.,.,1, | |
.,1,1,1,1, | |
.,.,.,.,1, ## | |
.,.,.,1,., | |
.,1,1,.,.), | |
"0" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,1,1,., ## | |
1,.,.,1,1, | |
1,.,1,.,1, | |
1,1,.,.,1, | |
.,1,1,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"\\" = read_letter( | |
.,1,.,.,., | |
.,1,.,.,., | |
.,.,1,.,., ## | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,.,.,1, | |
.,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"]" = read_letter( | |
.,.,.,1,1, | |
.,.,.,.,1, | |
.,.,.,.,1, ## | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"^" = read_letter( | |
.,.,1,.,., | |
.,1,.,1,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"_" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
1,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"`" = read_letter( | |
1,.,.,.,., | |
.,1,.,.,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"!" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,1, ## | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,.,., ## | |
.,.,.,.,1, | |
.,.,.,.,1), | |
'"' = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,.,1,., ## | |
.,1,.,1,., | |
.,1,.,1,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"#" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,1,.,1,., ## | |
.,1,.,1,., | |
1,1,1,1,1, | |
.,1,.,1,., | |
1,1,1,1,1, ## | |
.,1,.,1,., | |
.,1,.,1,.), | |
"$" = read_letter( | |
.,.,.,.,., | |
.,.,1,.,., | |
.,1,1,1,1, ## | |
1,.,1,.,., | |
.,1,1,1,., | |
.,.,1,.,1, | |
1,1,1,1,., ## | |
.,.,1,.,., | |
.,.,.,.,.), | |
"%" = read_letter( | |
.,1,1,.,1, | |
.,1,1,.,1, | |
.,.,.,1,., ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,1,.,1,1, | |
.,1,.,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"&" = read_letter( | |
.,1,1,.,., | |
1,.,.,.,., | |
1,.,.,.,., ## | |
.,1,1,1,1, | |
1,.,.,1,., | |
1,.,.,1,., | |
.,1,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"'" = read_letter( | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
")" = read_letter( | |
.,.,.,1,., | |
.,.,.,.,1, | |
.,.,.,.,1, ## | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"(" = read_letter( | |
.,.,.,.,1, | |
.,.,.,1,., | |
.,.,.,1,., ## | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"*" = read_letter( | |
.,1,.,1,., | |
.,.,1,.,., | |
.,1,.,1,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"+" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,1,.,., ## | |
.,.,1,.,., | |
1,1,1,1,1, | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"," = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,1,.,., ## | |
.,.,1,.,., | |
.,1,.,.,.), | |
"." = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,1,., | |
.,.,.,1,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"/" = read_letter( | |
.,.,.,.,1, | |
.,.,.,.,1, | |
.,.,.,1,., ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,1,.,.,., | |
.,1,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
":" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,1,.,., ## | |
.,.,1,.,., | |
.,.,.,.,., | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
";" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,1, ## | |
.,.,.,.,1, | |
.,.,.,.,., | |
.,.,.,.,1, | |
.,.,.,.,1, ## | |
.,.,.,1,., | |
.,.,.,.,.), | |
"<" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,1, ## | |
.,.,.,1,., | |
.,.,1,.,., | |
.,.,.,1,., | |
.,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
">" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,1,.,., ## | |
.,.,.,1,., | |
.,.,.,.,1, | |
.,.,.,1,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"=" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
1,1,1,1,1, | |
.,.,.,.,., | |
1,1,1,1,1, | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"?" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
.,.,.,.,1, ## | |
.,.,1,1,., | |
.,.,.,.,., | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"@" = read_letter( | |
.,1,1,1,., | |
1,.,.,.,1, | |
1,.,1,1,1, ## | |
1,1,.,1,1, | |
1,1,1,1,1, | |
1,.,.,.,., | |
.,1,1,1,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"{" = read_letter( | |
.,.,.,.,1, | |
.,.,.,1,., | |
.,.,.,1,., ## | |
.,.,1,.,., | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,.,.,1, ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"}" = read_letter( | |
.,.,1,.,., | |
.,.,.,1,., | |
.,.,.,1,., ## | |
.,.,.,.,1, | |
.,.,.,1,., | |
.,.,.,1,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"|" = read_letter( | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., | |
.,.,1,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.), | |
"-" = read_letter( | |
.,.,.,.,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,1,1,1,., | |
.,.,.,.,., | |
.,.,.,.,., ## | |
.,.,.,.,., | |
.,.,.,.,.) | |
) | |
# coerce to a tibble | |
char_table <- char_list %>% | |
imap_dfr(function(x,n) { | |
x %>% as.tibble() %>% | |
mutate(ypos = 9:1) %>% | |
gather(key = "xpos", value = "value", V1, V2, V3, V4, V5, V6) %>% | |
mutate(xpos = xpos %>% str_remove("V") %>% as.integer()) %>% | |
mutate(char = n) | |
}) | |
# message to plot | |
msg <- list( | |
frame1 = c("Be Kind", " Be You", " Be Awesome"), | |
frame2 = c("Wear It Purple", " 31/08/2018") | |
) | |
# convert the message to a tidy form | |
msg_frame <- msg %>% | |
imap_dfr( | |
function(m, v) { # apply to each frame: | |
m %>% | |
str_split("") %>% # split into a list (one element per "line") | |
imap_dfr( | |
function(x, v) { # apply to each line | |
x %>% | |
as.tibble() %>% | |
rename(char = value) %>% | |
mutate( | |
xoff = 6 * (1:n()), # scaled x-offset for each character | |
yoff = v # unscaled y-offset for each character | |
) | |
}) %>% | |
mutate( | |
yoff = 10 * (max(yoff) - yoff), # scale the y-offset | |
frame = v %>% str_remove("frame") %>% as.integer() # append frame info | |
) | |
}) | |
# left join with the character table to produce | |
# co-ordinate map for the raw points in each frame | |
msg_map <- left_join(msg_frame, char_table) %>% | |
filter(value == 1) | |
# read the message map | |
msg_map <- msg_map %>% | |
mutate(xval = xpos + xoff, yval = ypos + yoff) %>% | |
arrange(frame, xval, yval) %>% | |
select(char, frame, xval, yval) | |
# dot count | |
dot_count <- msg_map %>% group_by(frame) %>% | |
summarise(count = n()) | |
print(dot_count) | |
# give each dot a unique identity | |
msg_map$id <- dot_count$count %>% | |
map(function(x){1:x}) %>% reduce(c) | |
# keep only the dot label, position, and frame | |
msg_map <- msg_map %>% | |
select(id, frame, xval, yval) %>% | |
arrange(id, frame) | |
# parameters | |
nsteps <- 6 | |
scale <- 8 | |
# function to convert start and end points to | |
# a meandering path using brownian bridge | |
brownian_path <- function(id, xval, yval, nsteps = 5, scale = 20) { | |
# expand from two end points to a straight line path | |
path <- tibble( | |
id = id[1], | |
frame = 1:nsteps, | |
xval = seq(xval[1], xval[2], length.out = nsteps), | |
yval = seq(yval[1], yval[2], length.out = nsteps) | |
) | |
# create a meandering path using rbridge | |
path$xval <- path$xval + c(0, rbridge(1, nsteps-1)) * scale | |
path$yval <- path$yval + c(0, rbridge(1, nsteps-1)) * scale | |
# return as a single element list | |
return(list(p=path)) | |
} | |
# construct a tibble tracking all 395 points across | |
# every jump in the brownian bridge from F1 to F2 | |
msg_walk_forward <- msg_map %>% | |
group_by(id) %>% | |
summarise( | |
path = brownian_path(id, xval, yval, nsteps, scale) | |
) %>% | |
pull(path) %>% | |
reduce(bind_rows) | |
# do the same thing to walk back | |
msg_walk_backward <- msg_map %>% | |
mutate(frame = 3-frame) %>% | |
arrange(id, frame) %>% | |
group_by(id) %>% | |
summarise( | |
path = brownian_path(id, xval, yval, nsteps, scale) | |
) %>% | |
pull(path) %>% | |
reduce(bind_rows) %>% | |
mutate( | |
frame = frame + nsteps | |
) | |
# combine | |
msg_walk <- bind_rows( | |
msg_walk_forward, msg_walk_backward | |
) %>% arrange(frame,id,xval,yval) | |
# add lgbt palette | |
lgbt <- c( | |
`1` = "#E70000", # Electric Red | |
`2` = "#FF8C00", # Dark Orange | |
`3` = "#FFEF00", # Canary Yellow | |
`4` = "#00811F", # La Salle Green | |
`5` = "#0044FF", # Blue (RYB) | |
`6` = "#760089" # Patriarch | |
) | |
# discrete values for the colours | |
msg_walk <- msg_walk %>% | |
mutate( | |
base_colour = xval %>% cut(breaks = 6) %>% as.numeric(), | |
unbounded_colour = case_when( | |
frame <= 6 ~ base_colour + (frame - 1), | |
frame > 6 ~ base_colour + (12-frame) | |
), | |
colour = case_when( | |
unbounded_colour > 6 ~ 6, | |
TRUE ~ unbounded_colour | |
) | |
) | |
background <- "grey90" | |
# create the base plot | |
base_pic <- msg_walk %>% | |
ggplot(aes( | |
x = xval, | |
y = yval, | |
colour = factor(colour), | |
group = id)) + | |
geom_point(show.legend = FALSE, | |
size = 4, alpha = .6) + | |
coord_equal() + | |
theme_void() + | |
theme( | |
panel.background = element_rect( | |
fill = background, colour = background, | |
size = 0.5, linetype = "solid" | |
) | |
) + | |
scale_color_manual(values = lgbt) | |
# construct animation | |
pic <- base_pic + | |
transition_states( | |
states = frame, | |
transition_length = 2, | |
state_length = c(2.5,0,0,0,0,2.5,2.5,0,0,0,0,2.5), | |
wrap = TRUE | |
) + | |
ease_aes('sine-in-out') + | |
shadow_wake(.1) | |
# create animation | |
pic %>% animate( | |
nframes = 300, fps = 15, width = 800, | |
bg = background, detail = 3 | |
) | |
anim_save("~/Desktop/wear-it-purple.gif") | |
Author
djnavarro
commented
Aug 29, 2018
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment