Dibujar funciones en ggplot2

La función geom_function se puede usar para dibujar funciones en ggplot2. En este escenario no necesitas pasar un data frame a ggplot, sino que tienes que especificar los límites del eje X con xlim y la función a ser dibujada.

# install.packages("ggplot2")
library(ggplot2)

ggplot() +
  xlim(c(0, 5)) +
  geom_function(fun = cos)

Dibujar una función en ggplot2 con geom_function

Personalización de la línea

La función dibujada se puede personalizar con los argumentos habituales, como color, lwd y linetype para el color, ancho y tipo de línea, respectivamente.

# install.packages("ggplot2")
library(ggplot2)

ggplot() +
  xlim(c(0, 5)) +
  geom_function(fun = cos,
                colour = "red",
                lwd = 1,
                linetype = 1)

Dibujando una función con geom_function

stat_function

También puedes usar stat_function en lugar de geom_function. En este escenario puedes cambiar el geom por defecto, como se muestra en el ejemplo siguiente.

# install.packages("ggplot2")
library(ggplot2)

ggplot() +
  xlim(c(0, 5)) +
  stat_function(fun = cos,
                geom = "point")

Dibujando una función con stat_function

Argumentos adicionales

Ten en cuenta que si la función que estás dibujando tiene argumentos adicionales puedes pasarlos a través de una lista con el argumento args. En el siguiente ejemplo estamos dibujando funciones bessel con besselJ, que requiere un argumento llamado nu.

# install.packages("ggplot2")
library(ggplot2)

ggplot() +
  xlim(c(0, 50)) +
  geom_function(fun = besselJ,
                args = list(nu = 2))

Pasando argumentos adicionales a geom_function

Número de puntos

Cabe destacar que el número de puntos usados para dibujar la función puede no ser suficiente, como en el ejemplo anterior. Para crear una función más suave puedes incrementar el valor del argumento n.

# install.packages("ggplot2")
library(ggplot2)

ggplot() +
  xlim(c(0, 50)) +
  geom_function(fun = besselJ,
                n = 400,
                args = list(nu = 2))

Incrementando el número de puntos en geom_function

Superponer varias funciones

Superponer una función en ggplot2

Superponer sobre un gráfico existente

Si has creado un gráfico puedes añadir una función sobre él con geom_function. En el siguiente ejemplo superponemos la distribución normal teórica sobre una distribución normal generada con 200 muestras.

# install.packages("ggplot2")
library(ggplot2)

set.seed(1)
df <- data.frame(x = rnorm(200))

ggplot(df, aes(x = x)) +
  geom_density() +
  geom_function(fun = dnorm, colour = "red")

Añadiendo varias funciones con geom_function

Añadiendo varias funciones

Por último, vale la pena mencionar que puedes agregar varias funciones al mismo gráfico, añadiendo más capas.

# install.packages("ggplot2")
library(ggplot2)

ggplot() +
  xlim(c(0, 50)) +
  geom_function(fun = besselJ, n = 400,
                aes(color = "BJ 0"),
                args = list(nu = 0)) +
  geom_function(fun = besselJ, n = 400,
                aes(color = "BJ 2"),
                args = list(nu = 2)) +
  guides(colour = guide_legend(title = ""))

También te puede interesar