ggplot2

ggplot permite generar gráficos 2D basados en capas, que se pueden adicionar en infinitas combinaciones, empoderando al científico para que pueda realizar gráficos imposibles para otros programas tradicionales

Elementos básicos

R Users Group - Ecuador

3 elementos básicos

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.5.3
ggplot(mtcars, aes(x = hp, y = mpg)) +
  geom_point()

Forma tidyverse

tidyverse es una colección de paquetes R diseñados para la ciencia de datos. Todos los paquetes comparten una filosofía de diseño, gramática y estructuras de datos subyacentes.

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.5.3
## Warning: package 'tibble' was built under R version 3.5.3
## Warning: package 'tidyr' was built under R version 3.5.3
## Warning: package 'readr' was built under R version 3.5.3
## Warning: package 'purrr' was built under R version 3.5.3
## Warning: package 'dplyr' was built under R version 3.5.3
## Warning: package 'stringr' was built under R version 3.5.3
## Warning: package 'forcats' was built under R version 3.5.3
mtcars %>%
  ggplot(aes(x = hp, y = mpg)) +
  geom_point()

Geometrias básicas

Gráficos que consideran una variable continua

Histograma de frecuencia

ggplot(mtcars, aes(x = mpg)) + 
  geom_histogram(binwidth = 0.5)

Gráfico de densidad

ggplot(mtcars, aes(x = mpg)) + 
  geom_density()

Gráfico de puntos

ggplot(mtcars, aes(x = mpg)) + 
  geom_dotplot()
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

Polígono de frecuencia

ggplot(mtcars, aes(x = mpg)) + 
  geom_freqpoly()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Gráficos que consideran una variable discreta

Gráfico de barras

ggplot(mtcars, aes(x = factor(gear))) + 
  geom_bar(width=0.5, colour="blue", fill="red")

Gráficos que consideran dos variables continuas

Gráfico de dispersión o puntos bivariados

ggplot(mtcars, aes(x = mpg, y = hp)) + 
  geom_point()

Gráfico de Alfombra, manta, tapete (rug)

ggplot(mtcars, aes(x = mpg, y = hp)) + 
  geom_rug()

Gráficos que consideran dos variables (discreta y continua)

Gráfico de barras con geom_col

ggplot(mtcars, aes(x = factor(gear), y = mpg)) +
  geom_col() 

Gráfico de caja o de bigotes

ggplot(mtcars, aes(x = factor(gear), y = mpg)) +
  geom_boxplot()

Gráfico de violin

ggplot(mtcars, aes(x = factor(gear), y = mpg)) +
  geom_violin()

Atributos y mapeos

Gráficos que consideran dos variables continuas

Gráfico de dispersión o puntos bivariados

datos <- mtcars %>% 
  mutate_at(vars(c("cyl", "vs", "am", "gear", "carb")), factor) 

ggplot(datos, aes(x = mpg, y = hp, col = gear, label = hp)) + 
  geom_point() +
  geom_text(vjust = 1.5)

Gráficos que consideran dos variables (discreta y continua)

Gráfico de barras con geom_col

ggplot(datos, aes(x = gear, y = mpg, fill = cyl)) +
  geom_col()

Gráfico de barras con geom_bar

ggplot(datos, aes(x = gear,  fill = cyl)) +
  geom_bar(position="dodge")

Gráfico de caja o de bigotes

ggplot(datos, aes(x = factor(gear), y = mpg, fill = gear)) +
  geom_boxplot(fill = "white") + 
  geom_violin(alpha = 0.5)

Gráficos que considran una variable continua

Gráfico de densidad

ggplot(datos, aes(x = mpg, fill = gear)) + 
  geom_density(alpha = 0.3)

Sumar capas geométricas

## Gráfico Inicial

datos %>% 
  ggplot(aes(x = gear, y = mpg)) + 
  geom_point() +
  geom_boxplot()

Gráfico de Caja con puntos sobrexpuestos

datos %>% 
  ggplot(aes(x = gear, y = mpg)) + 
  geom_boxplot() +
  geom_point() 

Gráfico de Puntos con Caja transparente sobrexpuesta

datos %>% 
  ggplot(aes(x = gear, y = mpg)) + 
  geom_point() +
  geom_boxplot(alpha = 0.3)

Gráfico de Caja con puntos sobrexpuestos y línea de media de mpg

# Cálculo de la media de mpg
media <- mean(datos$mpg)

datos %>% 
  ggplot(aes(x = gear, y = mpg)) + 
  geom_boxplot() +
  geom_point() +
  geom_hline(yintercept = media, colour = "red", linetype = "dashed")

Añadir etiquetas a los gráficos (títulos)

Gráfico Inicial

graf_ejemplo <- datos %>% 
  ggplot(aes(x = hp, y = mpg, col = gear, shape = vs)) + 
  geom_point(size = 2)

graf_ejemplo

Añadir Etiquetas (labels)

graf_ejemplo + 
  labs(title = "Gráfico de dispersión de hp vs mpg",
       subtitle = "A mayor hp se observa menor mpg",
       x = "hp \n(Caballos de fuerza)",
       y = "mpg \n(Millas por galón)",
       col = "Cantidad de cambios",
       shape = "Tiene forma en V",
       caption = "Fuente de datos: mtcars")

Otra forma

graf_ejemplo + 
  ggtitle(label = "Gráfico de dispersión de hp vs mpg", subtitle = "A mayor hp se observa menor mpg") +
  xlab(label = 'hp \n(Caballos de fuerza)') +
  ylab(label = 'mpg \n(Millas por galón)')

Añadir facets a los gráficos (títulos)

Añadir Facets

graf_ejemplo +
  facet_wrap(~ cyl, nrow = 2, scales = "free_y") + 
  labs(title = "Caballos de fuerza vs millas por galón por cilindros")

Añadir temas a los gráficos (títulos)

graf_ejemplo +
  theme_minimal()

graf_ejemplo +
  theme_dark()

library(ggthemes)
## Warning: package 'ggthemes' was built under R version 3.5.3
graf_ejemplo +
  theme_economist() + 
  scale_color_economist() +
  ggtitle("Gráfico de dispersión de hp vs mpg")

graf_ejemplo +
  theme_stata() + 
  scale_color_stata() +
  ggtitle("Gráfico de dispersión de hp vs mpg")

graf_ejemplo +
  theme_hc()+ scale_colour_hc() +
  ggtitle("Gráfico de dispersión de hp vs mpg")

Modificar o crear temas

graf_ejemplo +
  ggtitle(label = "Gráfico de dispersión de hp vs mpg", subtitle = "A mayor hp se observa menor mpg") +
  xlab(label = 'hp \n(Caballos de fuerza)') +
  ylab(label = 'mpg \n(Millas por galón)') +
  theme_light() +
  theme(panel.background = element_rect(fill = "lightblue"),
        plot.background = element_rect(colour = "green", fill="gray"),
        legend.background = element_rect(fill = "orange"),
        axis.text.x =  element_text(color = "red", angle = 45))

Modificar o revisar detalle de cada tema

# theme_set(theme_gray(base_size = 20))
# 
# theme_gray