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
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!