Capítulo 6 Gráficos estáticos con ggplot2
- En esta sección podrás ver una guía introductoria a gráficos estáticos usando
ggplot2
. - Sirve para hacer gráficos mucho más elegantes.
- Implementa el concepto de “gramática de gráficos en capas.”
- Cuenta con muchas opciones de personalización.
- Ve la clase que realicé en video desde el siguiente link.
install.packages("ggplot2")
require(ggplot2)
Primero veamos las variables de la base de datos iris
:
%>%
iris str()
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
6.1 Primer gráfico con ggplot2
Los gráficos con ggplot2
suelen tener la siguiente estructura
# Llamado a la función "ggplot" e indicar base de datos con la información a graficar
ggplot(data = iris) +
# Aesthetics: Cómo dibujar los distintos trazos, formas y colores del gráfico, "Bosquejo"
aes(x = Sepal.Length, y = Petal.Length) +
# Geom del gráfico que necesitamos ver (puntos, lineas, barras, etc.)
geom_point()
Podemos omitir el nombre de los parámetros una vez que tengamos más practica.
ggplot(iris) +
aes(Sepal.Length, Petal.Length) +
geom_point()
6.2 Aesthetics
Acá vamos a indicar que variables van en el gráfico, en conjunto a parámetros adicionales según lo que necesitemos.
x
: Variable que va en el eje X.y
: Variable que va en el eje Y.color
: Dentro de las aesthetics significa colorear según una variable categórica.fill
: Dentro de las aesthetics significa rellenar de un color según una variable categórica.
Ejemplo:
Hacer un scatter plot de Sepal.Length
y Petal.Length
que coloree los puntos según Species
.
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point()
6.3 Geoms
Indica que tipo de gráfico necesitamos ver.
Entre las principales geoms se encuentran:
6.3.1 geom_point()
Es el gráfico de dispersión. Recomendado para identificar visualmente relaciones entre variables.
Ejemplo:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point()
6.3.2 geom_line()
Es el gráfico de lineas. Recomendado para graficar series de tiempo.
Ejemplo:
require(datasets)
data("economics")
%>% str economics
spec_tbl_df [574 x 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ date : Date[1:574], format: "1967-07-01" ...
$ pce : num [1:574] 507 510 516 512 517 ...
$ pop : num [1:574] 198712 198911 199113 199311 199498 ...
$ psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
$ uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
$ unemploy: num [1:574] 2944 2945 2958 3143 3066 ...
ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_line()
6.3.3 geom_histogram
Es el histograma. Sirve para ver la distribución de una variable
Ejemplo:
Al ser solo una variable, solo hay que especificar un argumento en aes
.
ggplot(data = iris) +
aes(x = Sepal.Length) +
geom_histogram()
6.3.4 geom_boxplot
Es el gráfico de caja y bigote. Sirve para ver la dispersión y cuartiles de una variable.
Ejemplo:
Al ser solo una variable, solo hay que especificar un argumento en aes
.
ggplot(data = iris) +
aes(y = Sepal.Length, fill = Species) +
geom_boxplot()
6.3.5 geom_bar
Es el gráfico de barras. Sirve para ver con longitudes proporcionales a los valores que representan.
Ejemplo:
ggplot(data = iris) +
aes(x = Species, fill = Species) +
geom_bar()
Argumentos de un geom
:
aes()
: En caso de querer usar una aesthetic distinta a la usada anteriormente.color
: Colorea el gráfico según el color que indiquemos.
Ejemplo:
ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_line(color = "dodgerblue1")
fill
: Rellena el gráfico según el color que indiquemos.
Ejemplo:
ggplot(data = iris) +
aes(x = Sepal.Length) +
geom_histogram(fill = "deepskyblue1")
Podemos añadirle el argumento color para colorear los contornos con otro color:
ggplot(data = iris) +
aes(x = Sepal.Length) +
geom_histogram(color = "deepskyblue4", fill = "deepskyblue3")
linetype
: Para indicar el tipo de linea que necesitamos en el gráfico.
Ejemplo:
ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_line(linetype = "longdash")
size
: Cambia el tamaño de la geom del gráfico.
Ejemplo:
ggplot(iris) +
aes(Sepal.Length, Petal.Length) +
geom_point(size = 3)
alpha
: Añade transparencia a la geom gráfico.
Ejemplo:
Añadir un 50% de transparencia al gráfico.
ggplot(data = iris) +
aes(x = Sepal.Length) +
geom_histogram(color = "deepskyblue4", fill = "deepskyblue3", alpha = 0.5)
6.4 Labs
Es una capa para indicar las etiquetas de Eje y título en los gráficos.
Ejemplo:
ggplot(data = economics) +
aes(x = date, y = unemploy) +
geom_line(color = "brown4", linetype = "solid") +
labs(x = "Año", y = "Desempleo", title = "Desempleo a través del tiempo",
subtitle = "1965 a 2010")
6.5 Lims
Es una capa para indicar los límites de los ejes.
Ejemplo.
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
lims(x = c(6, 8), y = c(4, NA))
6.6 Temas
Sirve para establecer un tema de fondo:
Los temas que se pueden usar por defecto con ggplot2
son:
theme_gray
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_gray()
theme_bw
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_bw()
theme_linedraw
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_linedraw()
theme_light
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_light()
theme_dark
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_dark()
theme_minimal
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_minimal()
theme_classic
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_classic()
theme_void
:
ggplot(data = iris) +
aes(x = Sepal.Length, y = Petal.Length, color = Species) +
geom_point() +
theme_void()
¡Puedes buscar muchos temas más en internet!
6.7 Gráfico ggplot
como un objeto
- Podemos guardar un gráfico
ggplot
como un objeto de R. - Es muy eficiente.
Ejemplos:
6.7.1 1. Distintos Geoms
Guardamos el gráfico como una variable
<- ggplot(data = iris) +
grafico_Sepal.Length aes(x = Sepal.Length)
Luego construimos los gráficos:
- Histograma
+
grafico_Sepal.Length geom_histogram(color = "dodgerblue4", fill = "dodgerblue3", alpha = 0.5) +
theme_bw()
- Boxplot
+
grafico_Sepal.Length geom_boxplot(aes(fill = Species)) +
coord_flip() + # Voltear ejes
theme_light()
6.7.2 2. Gráficos interactivos
No funcionan en archivos .pdf
. Creamos una variable con el gráfico:
# install.packages("plotly")
# require(plotly)
<- ggplot(data = economics) +
tiempo_y_desempleo aes(x = date, y = unemploy) +
geom_line(color = "brown4", linetype = "solid") +
labs(x = "Año", y = "Desempleo", title = "Desempleo a través del tiempo",
subtitle = "1965 a 2010") +
theme_bw()
Creamos gráfico interactivo:
# install.packages(plotly)
%>%
tiempo_y_desempleo ::ggplotly() plotly
6.8 Actividad
Usando la base de datos de siguiente link, genere un gráfico de lineas para ver la evolución de la cantidad de casos por día en Chile, Argentina y Perú en enero de 2021. ¡Personalizelo a su gusto!
Hint: Use dplyr
y magrittr
.
6.9 Solución de Actividad
require(dplyr)
require(magrittr)
require(ggplot2)
require(plotly)
<- vroom::vroom(here::here("data", "covid", "owid-covid-data.csv"))
data
<- data %>%
chile_arg_peru_01_2021 select(location, date, new_cases) %>%
filter(location %in% c("Chile", "Argentina", "Peru")) %>%
filter(date >= "2021-01-01" & date <= "2021-01-31") %>%
filter(!is.na(new_cases))
<- ggplot(data = chile_arg_peru_01_2021) +
grafico_actividad aes(x = date, y = new_cases, color = location) +
geom_line(size = 1) +
labs(x = "Fecha", y = "Casos Nuevos", title = "Nuevos casos por día en enero 2021",
subtitle = "Chile, Argentina y Perú", caption = "Figura 1") +
theme_bw() +
scale_color_manual(labels = c("Arg", "Chi", "Per"), # Nombre de Leyendas
values = c("deepskyblue", "red", "gray")) + # Color de Leyendas
guides(color = guide_legend("País")) # Título de Leyendas
%>%
grafico_actividad ggplotly()