2018-08-14

Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 1.2

Gráfico a replicar

Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning con ggplot2 parte 1. En esta ocasión replicaremos el gráfico de la figura 1.2. Se trata de tres pares de diagramas de caja, representando el índice S&P 500 entre 2001 y 2005. En cada uno de ellos se representa si el índice subió o bajó respecto al día anterior para tres momentos en el tiempo: ayer, hace dos días y hace tres días.

Solución

No lo replicamos idénticamente a propósito. Es más eficinet usar facet_grid para mostrar los tres en un solo gráfico y no repetir títulos de los ejes 3 veces. La parte esencial para obtenerlo es la transformación del data frame de formato ancho a largo con la función gather de tidyr. Renombramos los niveles de la variable key y añadimos colores similares, títulos de los ejes y cierto nivel de transparencia para los valores atípicos (outliers).

library(tidyr)
library(dplyr)
Smarket %>%
  gather(key, value, Lag1:Lag3) %>%
  mutate(key = recode(
    factor(key),
    Lag1 = "Yesterday",
    Lag2 = "Two Days Previous",
    Lag3 = "Three Days Previous"
  )) %>% 
  ggplot(aes(x = Today, y = value, fill = Direction)) +
  geom_boxplot(outlier.alpha = .5) +
  facet_grid( ~ key) +
  scale_fill_manual(values = c("royalblue", "orangered")) +
  labs(x = "Today's Direction", y = "Percentage change in S&P")+
  theme(panel.background = element_blank())
  • Alternativa
  • Podríamos haber creado los tres gráficos de manera independiente como mostramos a continuación y unirlos con gridExtra. En este caso necesitamos repetir cada argumento o refinamiento del gráfico tres veces.

    library(gridExtra)
    # Yesterday
    p1 <-
      ggplot(Smarket, aes(x = Direction, y = Lag1, fill = Direction)) +
      geom_boxplot(show.legend = FALSE, outlier.alpha = .5) + ggtitle("Yesterday") +
      scale_fill_manual(values = c("royalblue", "orangered")) +
      labs(x = "Today's Direction", y = "Percentage change in S&P")
    # Two Days Previous
    p2 <-
      ggplot(Smarket, aes(x = Direction, y = Lag2, fill = Direction)) +
      geom_boxplot(show.legend = FALSE, outlier.alpha = .5) + ggtitle("Two Days Previous") +
      scale_fill_manual(values = c("royalblue", "orangered")) +
      labs(x = "Today's Direction", y = "Percentage change in S&P")
    # Three Days Previous
    p3 <-
      ggplot(Smarket, aes(x = Direction, y = Lag3, fill = Direction)) +
      geom_boxplot(show.legend = FALSE, outlier.alpha = .5) + ggtitle("Three Days Previous") +
      scale_fill_manual(values = c("royalblue", "orangered")) +
      labs(x = "Today's Direction", y = "Percentage change in S&P")
    grid.arrange(p1, p2, p3, ncol = 3)
    

    Entradas relacionadas

    No hay comentarios:

    Publicar un comentario

    Nube de datos