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