Jonny Polonsky Jonny Polonsky - 2 months ago 7
R Question

Plotting equations in R

I recently saw this image, and wanted to emulate these plots in

R
.

equations

However, being more of a "data-wrangler" than a mathematician, I'm not sure how to do this. Ideally, I would like to use
ggplot2
. I managed the first example (the 'L'), but then got stuck:

library(ggplot2)

ggplot(data.frame(x = c(1, 100)), aes(x = x)) +
stat_function(fun = function(x){1/x}, geom = 'line')


enter image description here

The ideal answer would use
ggplot2
, and would make a
facet_wrap
of the images to plot them in a square arrangement

Answer

A start with facets:

library(ggplot2)
library(dplyr)

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)))
pd <- bind_rows(L = L, O = O, V = V, E = E, .id = 'letter')

pd$letter <- factor(pd$letter, 
                    c('L', 'O', 'V', 'E'),
                    c('y == 1/x', 'x^2 + y^2 == 9', 'y == abs(-2*x)', 'x == -3*abs(sin(y))'))

ggplot(pd, aes(x, y)) +
  geom_vline(xintercept = 0) + geom_hline(yintercept = 0) +
  geom_path(size = 1.5, col = 'red') +
  facet_wrap(~letter, scales = 'free', labeller = label_parsed) +
  theme_minimal() +
  theme(axis.text = element_blank(), axis.title = element_blank(),
        panel.grid = element_blank())
ggsave('LOVE.png', w = 3.5, h = 4, dpi = 300)

enter image description here

Comments