R te da dos grandes formas de construir un histograma: la función integrada hist() para un resultado rápido, y ggplot2 para gráficos pulidos y listos para publicar. Ambas se muestran abajo con código listo para copiar, incluyendo cómo ajustar el número de intervalos y cambiar a frecuencia relativa.
The hist() es parte de R base, así que no hay nada que instalar. Pásale un vector numérico y agrupa los datos y dibuja las barras. Los argumentos de abajo cubren casi todo lo que necesitas día a día.
# Basic histogram from a numeric vector hist(data) # A fuller, report-ready version hist(data, breaks = 10, # bins: a number or a method col = "steelblue", # bar color border = "white", # bar outline main = "Distribution of values", xlab = "Value", ylab = "Frequency")
The breaks es el argumento a recordar: controla cuántos intervalos obtienes. Pasa un número para un conteo aproximado, un vector de puntos de corte para control exacto, o una regla como "Sturges" or "FD" (Freedman–Diaconis).
R no siempre te da el número exacto de intervalos que pides — con un número simple, breaks se trata como sugerencia y R redondea a puntos de corte “bonitos”. Para intervalos exactos, pasa una secuencia: hist(data, breaks = seq(0, 100, by = 10)) crea intervalos exactamente de 10 de ancho desde 0 hasta 100. Los métodos integrados "Sturges", "Scott" and "FD" each apply a different rule of thumb; Freedman–Diaconis ("FD") es un buen valor por defecto para conjuntos más grandes o asimétricos porque se adapta a la dispersión de los datos.
If hist() lanza un error, la causa habitual es que tu entrada no es numérica — una columna de factor o carácter fallará. Envuélvela en as.numeric() primero, y elimina los valores faltantes con na.omit() si hace falta. Otra sorpresa frecuente es que el eje y muestra densidad en vez de conteos: eso pasa cuando pones cortes desiguales, porque R cambia a densidad automáticamente. Añade freq = TRUE to force counts.
Si solo tienes conteos, puedes reconstruir los datos brutos con rep() — por ejemplo rep(c(5, 15, 25), times = c(3, 8, 12)) recrea tres clases con 3, 8 y 12 observaciones — luego pásalo a hist(). Para datos ya agrupados con alturas de barra que ya conoces, barplot() sin espaciado suele ser la opción más simple.
Cuando el gráfico va a un informe o artículo, ggplot2 vale la línea extra. Mapea tu valor a la estética x y añade un geom_histogram() layer.
library(ggplot2) ggplot(df, aes(x = value)) + geom_histogram(bins = 20, fill = "steelblue", color = "white") + labs(title = "Distribution of values", x = "Value", y = "Count")
Use bins for a target number of bars or binwidth para fijar el ancho de cada intervalo en unidades de datos. Para mostrar proporciones en vez de conteos, transforma la estética y:
# Relative frequency (proportions on the y-axis) ggplot(df, aes(x = value)) + geom_histogram(aes(y = after_stat(count / sum(count))), bins = 20) + labs(y = "Relative frequency")
Si solo necesitas un gráfico y los números resumidos, puedes saltarte la configuración. Pega tus valores en el generador y descarga un PNG, SVG o CSV en segundos — útil para una comprobación rápida antes de comprometerte con código.
Use the breaks argument in hist(), for example hist(data, breaks = 20). You can pass a single number, a vector of break points, or a method name such as "Sturges" or "FD". In ggplot2 use bins = or binwidth = inside geom_histogram().
hist() está integrado y es perfecto para un vistazo rápido. ggplot2 requiere una línea extra para cargar pero da mucho más control sobre colores, temas, facetas y leyendas, por eso es la opción habitual para gráficos de publicación.
En R base, dibuja el primero con hist(a, col = rgb(0,0,1,0.5)) luego añade el segundo con hist(b, col = rgb(1,0,0,0.5), add = TRUE) using semi-transparent colors. In ggplot2, map a grouping variable to fill and set position = "identity" with alpha = 0.5.
Wrap the plot in a device: png("hist.png"); hist(data); dev.off(). For ggplot2 use ggsave("hist.png", width = 7, height = 5).