2 min read

Trigonometric Funs

En mis épocas más humanistas desarrollé cierta admiración por los antiguos griegos, y siempre me dió intriga la trigonometría. En este post armo un gráfico de las dos funciones trigonométricas más famosas.

El código no es muy complejo. Uso stat_function para dibujar las dos funciones, geom_segment para los ejes y scale_x_continuous para especificar la posición y etiqueta de los ticks.

Un detalle poco intutivo sobre ggplot que surgió fue la forma en que se crean las leyendas. En stat_function especifico aes(colour = "sin(x)"). Eso hace que el color de ese geom quede ligado al texto "sin(x)" en la leyenda.

Otra cosa que resultó más complicada de lo esperado son las etiquetas del eje x con letras griegas. Este post de stackoverflow sobre como poner letras griegas en ggplot fue de bastante utilidad, pero me parece que la solución que encontré es demasiado verbose.

library(tidyverse)
library(ggplot2)

# Crear etiquetas para eje x
lbls <- c( expression(-2 * pi),
           expression(-3 * pi / 2),
           expression(- pi),
           expression(-pi/2),
           0,
           expression(pi/ 2),
           expression(pi),
           expression(3 * pi /2),
           expression(2 * pi)
           )


# Gráfico
ggplot(data_frame(x = c(-7, 7)), aes(x = x)) +
  stat_function(fun = function(x) { sin(x) }, 
                geom = "line", 
                linetype = "dashed", 
                size = 1,
                aes(colour = "sin(x)")) +
  stat_function(fun = function(x) { cos(x) },
                linetype = "dashed",
                size = 1,
                aes(colour = "cos(x)")
                ) +
  scale_x_continuous(
    breaks = seq(-2 * pi, 2*pi, pi/2),
    labels = lbls
  ) + 
  labs(x = "x", y = "y") + 
  geom_segment(aes(x=-7, xend = 7, y=0, yend=0), 
               size = 0.5,
               arrow = arrow(length = unit(0.2, "cm"))) + 
  geom_segment(aes(x=0, xend=0, y=-1, yend=1.2),
               size = 0.5,
               lineend = "butt",
               arrow = arrow(length = unit(0.2, "cm"))) + 
  labs(title = "Funciones Trigonométricas") + 
  theme_minimal() + 
  theme(
    plot.title = element_text(hjust = 0.5),
    legend.title = element_blank(),
  )