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)
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)
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")
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))
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))
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
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