Gráficos de barras e histogramas
Visualice recuentos categóricos con ax.bar() y distribuciones de datos con ax.hist(), ajustando el número de intervalos y el color del borde.
Gráficos de barras e histogramas es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
Gráficos de barras e histogramas
Los gráficos de barras muestran datos categóricos: una barra por categoría, cuya altura es proporcional a un valor. Responden a la pregunta «¿cuánto tiene cada categoría?». Los histogramas muestran la distribución de una variable numérica continua: los datos se agrupan en intervalos y la altura de la barra indica el recuento o la frecuencia de cada intervalo. Responden a la pregunta «¿cómo se distribuyen estos valores?». Para ambos se utilizan ax.bar() y ax.hist(), respectivamente.
ax.bar() para gráficos de barras verticales
ax.bar(x, height) dibuja un gráfico de barras verticales donde x es una secuencia de posiciones (o etiquetas) de categorías y height es el valor de la barra. Parámetros principales: width (0.8 de forma predeterminada; controla el ancho de la barra con respecto al espacio), color, edgecolor y align ('center' o 'edge'). Devuelve una lista de objetos artist Rectangle.
import matplotlib.pyplot as plt
import numpy as np
categories = ['East', 'West', 'North', 'South']
values = [420, 380, 310, 290]
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
ax.set_title('Regional Revenue')
ax.set_xlabel('Region')
ax.set_ylabel('Revenue (USD)')
# plt.show()
plt.close()Personalización del aspecto de las barras
Algunas personalizaciones hacen que los gráficos de barras sean mucho más fáciles de leer: use un único color de énfasis para todas las barras (o un array de colores para distinguir cada barra), añada etiquetas de valores encima de cada barra con ax.bar_label(), controle el ancho de las barras para dejar espacio suficiente y establezca ax.set_ylim(0, max * 1.15) para dejar espacio sobre la barra más alta.
fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
# Add value labels above bars
ax.bar_label(bars, fmt='%d', padding=3, fontsize=10)
# Give space above bars for labels
ax.set_ylim(0, max(values) * 1.15)
ax.set_title('Regional Revenue')
plt.tight_layout()
plt.close()Gráficos de barras horizontales con ax.barh()
Use ax.barh(y, width) para crear gráficos de barras horizontales. Se prefieren las barras horizontales cuando las etiquetas de las categorías son largas (se leen naturalmente de izquierda a derecha) o cuando hay muchas categorías (se apilan de forma más compacta). Se aplican los mismos parámetros de personalización: height controla el grosor de la barra y ax.barh_label() (o ax.bar_label()) añade etiquetas de texto.
import pandas as pd
df = pd.DataFrame({'region': categories, 'revenue': values})
df_sorted = df.sort_values('revenue')
fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(df_sorted['region'], df_sorted['revenue'],
color='steelblue', edgecolor='white', height=0.5)
ax.set_title('Revenue by Region (Sorted)')
ax.set_xlabel('Revenue (USD)')
plt.tight_layout()
plt.close()Gráficos de barras agrupadas
Para comparar varios grupos uno junto a otro, cree un gráfico de barras agrupadas desplazando manualmente las posiciones de las barras. Calcule las posiciones centrales de cada grupo y, después, reste o sume un desplazamiento fijo para cada subgrupo. El ancho total de las barras más el espacio entre grupos debe ser igual a 1.0 para evitar que las barras se solapen. Establecer ax.set_xticks() centra las etiquetas de las marcas entre las barras agrupadas.
products = ['A', 'B', 'C']
q1 = [80, 120, 95]
q2 = [90, 110, 105]
x = np.arange(len(products))
width = 0.35
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(x - width/2, q1, width, label='Q1', color='steelblue')
ax.bar(x + width/2, q2, width, label='Q2', color='coral')
ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()
ax.set_title('Q1 vs Q2 Sales by Product')
plt.close()Gráficos de barras apiladas
Las barras apiladas muestran la composición de un total en varios subgrupos. Las barras del segundo grupo comienzan donde terminan las del primero, mediante el parámetro bottom. El valor de bottom de cada capa posterior es la suma acumulada de todas las capas anteriores. Las barras apiladas son útiles para mostrar simultáneamente el total y la contribución de cada componente.
q1_arr = np.array(q1)
q2_arr = np.array(q2)
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(products, q1_arr, label='Q1', color='steelblue')
ax.bar(products, q2_arr, bottom=q1_arr, label='Q2', color='coral')
ax.legend()
ax.set_title('Stacked Q1 + Q2 Sales by Product')
ax.set_ylabel('Total Sales')
plt.close()ax.hist() para histogramas
ax.hist(data, bins) crea un histograma. El parámetro bins controla en cuántos intervalos de igual tamaño se dividen los datos (10 de forma predeterminada). También puede pasar una lista de límites de intervalos desiguales. Parámetros principales: density=True normaliza el histograma como una densidad de probabilidad, edgecolor añade bordes entre las barras, y color y alpha controlan el aspecto.
np.random.seed(42)
data = np.random.randn(500) # 500 samples from standard normal
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(data, bins=30, color='steelblue', edgecolor='white', alpha=0.7)
ax.set_title('Distribution of Values')
ax.set_xlabel('Value')
ax.set_ylabel('Count')
plt.close()Elección del número de intervalos
El número de intervalos afecta considerablemente al aspecto de un histograma. Muy pocos intervalos ocultan la estructura; demasiados crean picos ruidosos. Algunas heurísticas habituales son la regla de Sturges (≈ log2(n) + 1), la regla de Scott y la de Freedman-Diaconis. Matplotlib admite estas opciones como cadenas: bins='auto', bins='scott', bins='fd'. Para el análisis exploratorio, pruebe manualmente varios valores; para las presentaciones, elija el número de intervalos que comunique mejor la forma de los datos.
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
for ax, b in zip(axes, [5, 30, 'auto']):
ax.hist(data, bins=b, edgecolor='white', color='steelblue', alpha=0.7)
ax.set_title(f'bins={b}')
ax.set_xlabel('Value')
plt.tight_layout()
plt.close()Histogramas superpuestos para comparar
Para comparar dos distribuciones en los mismos ejes, llame dos veces a ax.hist() con datos y colores diferentes. Use alpha=0.5 en ambas para que la superposición sea visible. Añada etiquetas y llame a ax.legend(). Usar density=True normaliza ambos histogramas a la misma escala cuando los tamaños de muestra difieren, lo que permite comparar directamente sus formas.
group_a = np.random.randn(300)
group_b = np.random.randn(300) + 1.5 # shifted right
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(group_a, bins=25, alpha=0.5, color='steelblue', label='Group A', density=True)
ax.hist(group_b, bins=25, alpha=0.5, color='coral', label='Group B', density=True)
ax.legend()
ax.set_title('Distribution Comparison')
plt.close()Trazar Series y DataFrames de Pandas
Tanto .plot.bar() como .plot.hist() están disponibles como métodos de DataFrame/Series y generan figuras de Matplotlib automáticamente. Aceptan un parámetro ax para dibujar sobre unos Axes existentes. Esta es la forma más rápida de crear gráficos de barras a partir de datos de Pandas agrupados: calcule la agregación con groupby, llame a .plot.bar() sobre el resultado y, después, personalice los Axes devueltos.
import pandas as pd
import numpy as np
df_sales = pd.DataFrame({
'region': ['East', 'West', 'North', 'South'],
'revenue': [420, 380, 310, 290]
}).set_index('region')
fig, ax = plt.subplots(figsize=(7, 4))
df_sales['revenue'].plot.bar(ax=ax, color='steelblue', rot=0)
ax.set_title('Revenue by Region')
plt.tight_layout()
plt.close()Elegir entre gráfico de barras e histograma
La elección entre un gráfico de barras y un histograma depende del tipo de datos. Use un gráfico de barras cuando el eje x represente categorías distintas y sin un orden establecido (nombres de productos, regiones o segmentos de usuarios), y las barras representen valores agregados para cada categoría. Use un histograma cuando el eje x sea una variable numérica continua y quiera mostrar cómo se distribuyen los valores a lo largo de un intervalo. Confundirlos es un error frecuente de visualización que induce a los lectores a interpretar incorrectamente el tipo de dato.
# Bar chart: categorical x-axis (product names)
products = ['Widget', 'Gadget', 'Doohickey']
revenue = [500, 300, 200]
fig, ax = plt.subplots(figsize=(5, 3))
ax.bar(products, revenue, color='steelblue')
ax.set_title('Revenue per Product (Bar Chart)')
plt.close()
# Histogram: continuous x-axis (order sizes)
order_sizes = np.random.exponential(scale=50, size=300)
fig, ax = plt.subplots(figsize=(5, 3))
ax.hist(order_sizes, bins=20, color='coral', edgecolor='white')
ax.set_title('Distribution of Order Sizes (Histogram)')
plt.close()Comprobación rápida
Compruebe cuánto ha comprendido sobre los gráficos de barras y los histogramas de esta lección.
Resumen de la lección
En esta lección ha aprendido que ax.bar() crea gráficos de barras verticales y ax.barh() crea gráficos de barras horizontales; bottom permite crear barras apiladas; ax.hist() crea histogramas cuyo número de intervalos se controla con bins; y density=True normaliza los histogramas para compararlos de forma justa. A continuación añadiremos etiquetas de ejes y títulos, y guardaremos figuras con calidad de publicación.
Aprende Python con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Gráficos de barras e histogramas» es gratis?
Sí — el texto completo de «Gráficos de barras e histogramas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Gráficos de barras e histogramas»?
Visualice recuentos categóricos con ax.bar() y distribuciones de datos con ax.hist(), ajustando el número de intervalos y el color del borde. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Pandas & NumPy Academy?
No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Gráficos de barras e histogramas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?
Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Arquitectura de Figure y Axes
- Gráficos de líneas y de dispersión
- Gráficos de barras e histogramas
- Etiquetas, títulos y guardado de figuras