Curves with ggplot2


library(tidyverse)
library(glue)
f <- function(p, q) {
  sin((1:10) * p) + q
}

(my_data <- tibble(
  p = 2:4,
  q = c(1, 5, 2)
))


(my_plot_data <- my_data |> rowwise() |> mutate(y = list(f(p, q))) |>
  unnest_wider(col = y, names_sep = "_") |> pivot_longer(
    cols = starts_with("y_"), names_to = "x_",
    values_to = "y"
  ) |> mutate(
    x = parse_number(x_),
    pq_label = glue("f({p},{q})")
  ))

ggplot(data = my_plot_data) +
  aes(x = x, y = y, color = pq_label) +
  geom_line(linewidth=2)

1 Like