I recently stumbled into this thread in stackoverflow and got inspired to design my own android wallpaper.
I love dark wallpapers, they are both nice and save energy, specially if your phone has an AMOLED screen. I used Axeman’s answer but the other answer was great too. The first part is just generating the relevant data frames.
library(ggplot2)
library(dplyr)
# generate data frames based on functions
L <- data_frame(x = 1:100,
y = 1 / x)
O <- data_frame(t = seq(-pi, pi, l = 100),
x = 3 * cos(t),
y = 3 * sin(t))
V <- data_frame(x = -50:50,
y = abs(-2 * x))
E <- data_frame(y = seq(-pi, pi, l = 100),
x = -3 * abs(sin(y)))
# put all together and add equations
pd <- bind_rows(L, O, V, E, .id = "letter") %>%
select(-t) %>%
mutate(letter = factor(letter, labels = c("y == 1/x",
"x^2 + y^2 == 9",
"y == abs(-2*x)",
"x == -3*abs(sin(y))")))
The second part is interesting and I learned a lot trying to achieve the look I wanted. While trying to put all letters in one row using facet_grid
I found some limitations on how you specify “free” scales, using a grid means a common scale has to be used for each row and column, the solution is using facet_wrap
with nrow = 1
instead. This works because in facet_wrap
each plot is independent. Another thing I learned is how you can use the option labeller = label_parsed
to use formulas in the facet title.
ggplot(pd, aes(x, y)) +
# vline and hline add the "fake" axes
geom_vline(xintercept = 0, color = "white") +
geom_hline(yintercept = 0, color = "white") +
# the letters
geom_path(size = 1.5, col = 'red') +
# give each letter it's own plot area
facet_wrap(~letter,
# allow different x and y scales
scales = 'free',
# this allows facet titles to be formulas
labeller = label_parsed,
# put in one line
nrow = 1,
# move facet titles to the bottom
switch = "x") +
ggtitle("ALL YOU NEED IS") +
# several tweaks to achieve final look
theme_minimal() +
theme(text = element_text(size = 30, color = "white"),
plot.background = element_rect(fill = "black", color = "black"),
axis.text = element_blank(),
axis.title = element_blank(),
panel.grid = element_blank(),
strip.text = element_text(color = "white"),
title = element_text(face = "bold"))
# saving as a 1920 x 1080 to match my phone's screen resolution
ggsave("~/love_android.png", width = 19.20, height = 10.80, dpi = 100)
Hope you liked it. Cheers!