Gráfico de barras e histograma en R con ejemplo
⚡ Resumen inteligente
Los gráficos de barras y los histogramas en R se construyen con ggplot2, utilizando geom_bar() para recuentos categóricos y geom_histogram() para distribuciones continuas. Este tutorial personaliza el color, el grupoping, apilamiento, orientación, agrupamiento y etiquetas dentro de las barras en el conjunto de datos mtcars.

¿Qué es un gráfico de barras en R?
Un gráfico de barras es una excelente manera de mostrar variables categóricas en el eje x. Este tipo de gráfico denota dos aspectos en el eje y.
- El primero cuenta el número de ocurrencias en cada grupo.
- La segunda muestra una estadística descriptiva (mínimo, máximo, promedio, etc.) de una variable en el eje y.
Utilizarás el conjunto de datos mtcars, que tiene las siguientes variables:
- cyl: Número del cilindro del coche. variable numérica
- am: Tipo de transmisión. 0 para automática y 1 para manual. Variable numérica
- mpg: Millas por galón. variable numérica
Dado que un histograma se ve tan similar, vale la pena resolver la diferencia antes de escribir cualquier código.
Gráfico de barras vs. histograma en R: diferencias clave
Los dos gráficos se parecen mucho, pero se confunden constantemente. Responden a preguntas diferentes y utilizan objetos geométricos distintos.
| Criterios | Gráfico de barras | Histograma |
|---|---|---|
| Variable del eje X | Categórico o factor | Continuo y numérico |
| Lo que representa un bar | Una categoría | Un intervalo, o bin, de valores |
| Espacios entre barras | Sí, las categorías son separadas. | No, los contenedores están uno al lado del otro. |
| Orden de bar | Se puede reorganizar libremente | Fijado por la escala numérica |
| Pregunta respondida | ¿Cómo se comparan los grupos? | ¿Cómo se distribuye una variable? |
| objeto ggplot2 | geom_bar() | histograma geométrico() |
Regla general: si reordenar las barras aún tendría sentido, tienes un gráfico de barras. Si reordenarlas destruiría el significado, tienes un histograma. Para resúmenes basados en cuartiles de la misma variable continua, usa un diagrama de caja.
Cómo crear un gráfico de barras en R
Para crear un gráfico en R, puede utilizar la biblioteca ggplot que crea gráficos listos para su publicación. La sintaxis básica de esta biblioteca es:
ggplot(data, mapping = aes()) + geometric object arguments: data: dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common objects are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Este tutorial se centra en el objeto geométrico geom_bar(), que dibuja el gráfico de barras, y en geom_histogram() para datos continuos.
Gráfico de barras: recuento
Su primer gráfico muestra la frecuencia del cilindro con geom_bar(). El siguiente código es la sintaxis más básica.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Explicación
- Pasas el conjunto de datos mtcars a ggplot.
- Dentro del argumento aes(), se establece el eje x a la variable factor cyl.
- El signo + significa que quieres que R siga leyendo el código. Hace que el código sea más legible al dividirlo.
- Utilice geom_bar() para el objeto geométrico.
Salida:
Nota: : asegúrate de convertir las variables en un factor, de lo contrario, R las trata como numéricas. Consulta el ejemplo a continuación.
Personaliza el gráfico
Se pueden pasar cuatro argumentos para personalizar el gráfico:
- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar
Cambiar el color de las barras.
Puedes cambiar el color de las barras. Tenga en cuenta que los colores de las barras son todos similares.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Explicación
- Los colores de las barras están controlados por el mapa aes().ping dentro del objeto geométrico (es decir, fuera de ggplot()). Puedes cambiar el color con los argumentos fill. Aquí, eliges el color coral.
Salida:
Puedes usar este código:
grDevices::colors()
para ver todos los colores disponibles en R. Hay alrededor de 650 colores.
cambiar la intensidad
Puedes aumentar o disminuir la intensidad del color de las barras.
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Explicación
- Para aumentar o disminuir la intensidad de la barra, puedes modificar el valor de alfa. Un valor alto de alfa aumenta la intensidad, mientras que un valor bajo la reduce. El rango de alfa va de 0 a 1. Con un valor de 1, el color coincide exactamente con la paleta; con un valor de 0, la barra es invisible. En este caso, seleccionas alfa = 0.5.
Salida:
Color por grupos
Puedes cambiar los colores de las barras, es decir, un color diferente para cada grupo. Por ejemplo, la variable cyl tiene tres niveles, luego puede trazar el gráfico de barras con tres colores.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Explicación
- El argumento `fill` dentro de `aes()` cambia el color de la barra. Para cambiar el color, debes asignar `fill` a la variable del eje x. En tu ejemplo, la variable del eje x es `cyl`; `fill = factor(cyl)`.
Salida:
Añadir un grupo en las barras
Puedes dividir aún más el eje y en función de otro nivel de factor. Por ejemplo, puedes contar la cantidad de transmisiones automáticas y manuales en función del tipo de cilindro.
Procederá de la siguiente manera:
- Paso 1: crear el marco de datos con el conjunto de datos mtcars
- Paso 2: Etiquete la variable am con auto para transmisión automática y man para transmisión manual. Convierta am y cyl como un factor para no tener que usar factor() en la función ggplot().
- Paso 3: Dibuje el gráfico de barras para contar el número de transmisiones por cilindro
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
Una vez que tenga listo el conjunto de datos, puede generar el gráfico:
# Paso 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Explicación
- La llamada a ggplot() recibe los datos del conjunto de datos y el mapa aes().ping.
- En aes() incluyes la variable eje x y qué variable se requiere para llenar la barra (es decir, soy)
- geom_bar(): Crea el gráfico de barras
Salida:
El mapaping La barra se rellenará con dos colores, uno para cada nivel. Es muy sencillo cambiar el grupo seleccionando otras variables factoriales en el conjunto de datos.
Gráfico de barras en porcentaje
Puede visualizar la barra en porcentaje en lugar del recuento bruto.
# Gráfico de barras en porcentaje
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Explicación
- Utilice posición = "rellenar" en el argumento geom_bar() para crear un gráfico con porcentaje en el eje y.
Salida:
Barras lado a lado
Es fácil trazar el gráfico de barras con la variable de grupo una al lado de la otra.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Explicación
- position=position_dodge(): Indica explícitamente cómo organizar las barras
Salida:
Gráfico de barras con una estadística descriptiva
En la segunda parte del tutorial, el eje Y muestra un valor calculado en lugar de un recuento. Cabe destacar que sigue siendo un gráfico de barras: más adelante se explica cómo crear un histograma propiamente dicho, el cual utiliza un objeto geométrico diferente.
Tu objetivo es crear un gráfico con el promedio de millas por galón para cada tipo de cilindro. Para dibujar un gráfico informativo, seguirás estos pasos:
- Paso 1: cree una nueva variable con el promedio de millas por galón por cilindro
- Paso 2: crea un histograma básico
- Paso 3: cambia la orientación
- Paso 4: Cambia el color
- Paso 5: cambia el tamaño
- Paso 6: agregue etiquetas al gráfico
Paso 1) Crea una nueva variable
Crea un marco de datos llamado data_histogram que simplemente devuelve el promedio de millas por galón por la cantidad de cilindros del automóvil. A esta nueva variable la llamas mean_mpg y redondeas la media con dos decimales.
# Paso 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Paso 2) Crear un histograma básico
Puedes generar el histograma. Aún no está lo suficientemente pulido como para entregárselo a un cliente, pero ya muestra la tendencia.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Explicación
- El aes() tiene ahora dos variables. La variable cyl se refiere al eje x y el mean_mpg es el eje y.
- Se pasa stat = “identity” para que geom_bar() use la variable del eje y tal cual, en lugar de contar las filas. El valor predeterminado de geom_bar() es stat = “count”.
Salida:
Paso 3) Cambiar la orientación
Cambia la orientación del gráfico de vertical a horizontal.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Explicación
- Puedes controlar la orientación del gráfico con coord_flip().
Salida:
Paso 4) Cambiar el color
Puedes diferenciar los colores de las barras según el nivel de factor de la variable del eje x.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Explicación
- Puedes trazar el gráfico por grupos con el mapa fill=cylpingR se encarga automáticamente de los colores en función de los niveles de la variable cyl.
Salida:
Paso 5) Cambiar el tamaño
Para que el gráfico se vea más bonito, reduce el ancho de la barra.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Explicación
- El argumento width dentro de geom_bar() controla el grosor de la barra. Un valor mayor la hace más ancha.
- El gráfico se almacena en el objeto graph, ya que el siguiente paso lo reutiliza sin modificaciones. Almacenar gráficos intermedios facilita la lectura del código.
Salida:
Paso 6) Agregar etiquetas al gráfico
El último paso añade el valor de mean_mpg como etiqueta dentro de cada barra.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Explicación
- La función geom_text() es útil para controlar la estética del texto.
- label=: Agrega una etiqueta dentro de las barras
- mean_mpg: usa la variable mean_mpg para la etiqueta
- hjust controla la posición de la etiqueta en la barra. Los valores cercanos a 1 la sitúan cerca del extremo de la barra, y los valores mayores la desplazan hacia el eje. Si la orientación del gráfico es vertical, cambie hjust por vjust.
- color="white": cambia el color del texto. Aquí se utiliza el color blanco.
- tamaño = 3: establece el tamaño del texto.
Salida:
Cómo ordenar y etiquetar barras en un gráfico de barras en R
Dos detalles finales distinguen un borrador de gráfico de uno publicable: ordenar las barras por valor y etiquetar correctamente los ejes.
Reordenando barras. ggplot2 ordena los niveles de los factores alfabéticamente por defecto, lo cual rara vez es el orden más informativo. Envuelva la variable x en reorder() para ordenar por una segunda variable:
# Sort the bars from lowest to highest mean_mpg ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) + geom_bar(stat = "identity", fill = "coral") + theme_classic()
Anteponga un signo menos a la variable de ordenación, reorder(cyl, -mean_mpg), para invertir la dirección.
Agregar títulos y etiquetas a los ejes. La función labs() establece todos los elementos de texto en una sola llamada:
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + labs(title = "Average fuel economy by cylinder count", subtitle = "mtcars dataset", x = "Number of cylinders", y = "Mean miles per gallon", fill = "Cylinders", caption = "Source: mtcars") + theme_classic()
Establezca fill = NULL dentro de labs() para eliminar el título de la leyenda por completo, y use theme(legend.position = “none”) para eliminar la leyenda cuando el eje x ya nombre los grupos.
Elige tus propios colores. Sustituye la paleta de colores predeterminada por una específica para que el gráfico coincida con el estilo de tu casa:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Cómo crear un histograma en R con geom_histogram()
Un histograma muestra cómo se distribuye una variable continua. En lugar de contar categorías, ggplot2 divide el rango numérico en intervalos y cuenta cuántas observaciones caen en cada uno.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R imprime un mensaje recomendando que elijas un número de intervalos mejor, ya que el valor predeterminado de 30 intervalos es arbitrario. Dos argumentos controlan esto:
- contenedores: el número de intervalos en los que se dividirá el rango.
- ancho de papelera: el ancho de cada intervalo, expresado en las unidades de la variable. Utilice esta opción cuando las unidades sean significativas.
# Set the number of bins ggplot(mtcars, aes(x = mpg)) + geom_histogram(bins = 10, fill = "coral", color = "white") + theme_classic() # Or set the width of each bin instead ggplot(mtcars, aes(x = mpg)) + geom_histogram(binwidth = 4, fill = "coral", color = "white") + theme_classic()
La selección de intervalos es la decisión más importante en un histograma. Un número insuficiente de intervalos oculta estructuras reales, como un segundo pico; un número excesivo convierte el gráfico en ruido. Pruebe con varios valores antes de decidirse por uno.
Comparación de grupos. Asigne un factor para rellenar y establezca la posición de manera que las distribuciones sigan siendo legibles:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
Con position = “identity” y un valor alfa reducido, los histogramas se superponen, lo que permite comparar las formas directamente. Si prefiere ver los intervalos uno al lado del otro, utilice position = “dodge”.
Densidad en lugar de recuentos. Cuando los grupos difieren en tamaño, represente la densidad de manera que las áreas sean comparables y superponga una curva suavizada:
ggplot(mtcars, aes(x = mpg)) + geom_histogram(aes(y = after_stat(density)), bins = 10, fill = "coral", alpha = 0.6) + geom_density(color = "steelblue", linewidth = 1) + theme_classic()
Gráfico de barras e histograma en R: Code Referencias
Un gráfico de barras se adapta a un eje x categórico, donde el eje y representa un recuento o una estadística descriptiva. La tabla a continuación muestra la llamada a ggplot2 para cada variante mencionada anteriormente:
| Objetivo | Code |
|---|---|
| Contar |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Contar con diferente color de relleno. |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Contar con grupos, apilados |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Cuente con grupos, uno al lado del otro |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Contar con grupos, apilados en % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Valores (estadística descriptiva) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Histograma de una variable continua |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













