Saltar al contenido principal
InicioTutorialesProgramación R

Cómo hacer un histograma ggplot2 en R

Aprenda a hacer un histograma ggplot2 en R. Haga histogramas en R basándose en la gramática de los gráficos.
3 may 2024  · 15 min leer

datarhys_an_absurdist_oil_painting_of_a_humanoid_robot_assembli_43ea48e7-758d-48ef-9154-2c1d956ec52a.png

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://raw.githubusercontent.com/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)

image6.png

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

image11.png

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

image8.png

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)

image4.png

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)

image12.png

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)

image5.png

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)

image7.png

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

image9.png

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

image1.png

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

image13.png

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)

image3.png

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.

image2.png

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.

 

Temas

Más información sobre R

Certificación disponible

Course

Visualización intermedia de datos con ggplot2

4 hr
43.6K
Aprenda a utilizar facetas, sistemas de coordenadas y estadísticas en ggplot2 para crear gráficos explicativos significativos.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Cómo hacer un histograma en R básico: 6 pasos con ejemplos

Aprende a crear un histograma con R básico utilizando la función hist(). En 6 sencillos pasos (con ejemplos) puedes hacer un histograma básico en R para un análisis exploratorio.

Kevin Babitz

10 min

tutorial

Histogramas en Matplotlib

Aprende sobre histogramas y cómo puedes utilizarlos para obtener información de los datos con la ayuda de matplotlib.

Aditya Sharma

8 min

tutorial

Tutorial de regresión lineal en R

En este tutorial aprenderás los fundamentos de un modelo estadístico muy popular: la regresión lineal.

Eladio Montero Porras

15 min

tutorial

Creación de una lista en R

Practica Listas en R utilizando el material del curso Introducción a R de DataCamp.
Ryan Sheehy's photo

Ryan Sheehy

3 min

tutorial

Tutorial de tablas de contingencia en R

En este tutorial, aprenderás a crear tablas de contingencia y a probar y cuantificar las relaciones visibles en ellas.
Łukasz Deryło's photo

Łukasz Deryło

10 min

tutorial

Tutorial de pruebas T en R: Aprende a realizar pruebas T

Determina si existe una diferencia significativa entre las medias de los dos grupos utilizando t.test() en R.
Abid Ali Awan's photo

Abid Ali Awan

10 min

See MoreSee More