# graficos-en-matplotlib
Gráficos en Matplotlib
Volver a la portada del cursoPrimer Gráfico con Matplotlib
Sección 1 · Introducción a Matplotlib
Primer Gráfico con Matplotlib
El notebook primer-grafico convierte las ventas 2025 de PyShop en los primeros gráficos del curso: una línea con el ingreso de cada mes, varias líneas por categoría, la venta diaria con su media móvil y barras simples, agrupadas y apiladas. Termina guardando un PNG y con cuatro ejercicios con assert. Es autocontenido: la primera celda de código define generar_ventas, así que corre de principio a fin sin descargar nada y siempre da las mismas cifras. Esta guía explica cada bloque, qué resultado esperar y en qué fijarse.
1. Preparación
Se necesitan Python 3.11 o superior (lo exige pandas 3), matplotlib, pandas y numpy; el notebook se probó con matplotlib 3.10.9 y pandas 3.0.3, y su primera celda imprime las versiones instaladas. Si trabajas en un entorno virtual, basta con pip install matplotlib pandas jupyter. La celda de datos crea 6000 pedidos con un ingreso total de 10,932,695.87 MXN. En Jupyter cada gráfico aparece debajo de su celda sin llamar a plt.show(); en un script de Python sí hace falta al final.
2. Anatomía de la figura
El primer gráfico es la línea del ingreso mensual en millones. Para obtenerla se agrupan los pedidos por número de mes y se suma la columna total:
mes = ventas["fecha"].dt.month
mensual = ventas.groupby(mes)["total"].sum() / 1e6
fig, ax = plt.subplots()
lineas = ax.plot(mensual.index, mensual.values,
marker="o", label="Ingreso")
ax.set_title("Ingreso mensual de PyShop, 2025")
ax.set_xlabel("Mes")
ax.set_ylabel("Millones de MXN")
ax.legend()
print(type(lineas[0]).__name__) # Line2D
La celda imprime el tipo de cada objeto: Figure, Axes, Line2D, los dos ejes XAxis y YAxis y los cuatro bordes (spines). Fíjate en que ax.plot devuelve una lista de líneas. Febrero es el mes más bajo (0.61 M) y diciembre el más alto (1.50 M).
3. pyplot contra la interfaz orientada a objetos
Una celda dibuja dos paneles con plt.subplots(1, 2) y después llama a plt.title. El título cae en el panel derecho, el último creado, y la celda lo comprueba imprimiendo el título de cada panel. Es la razón por la que el curso usa ax.set_title. La celda siguiente muestra la forma del arreglo de ejes: (2, 2) para una cuadrícula y (3,) para una sola fila.
4. Líneas: marcadores, meses y referencias
La línea mensual se mejora en un solo bloque: marcadores, nombres de mes con set_xticks(range(1, 13), labels=MESES), eje y desde cero, una línea de promedio con axhline y el área sombreada con fill_between. La celda imprime que noviembre y diciembre crecen 56.8 % y 72.6 % sobre octubre. Después se dibujan las cinco categorías en el mismo panel: cada ax.plot toma el siguiente color del ciclo y su label aparece en la leyenda. Electrónica va de 298 a 833 mil MXN por mes; Libros, de 18 a 59 mil, y en esa escala se ve casi plana.
5. Venta diaria y media móvil
La serie diaria tiene 365 puntos. El máximo es el 2025-12-04 con 86,020.11 MXN. rolling(7).mean() promedia cada día con los seis anteriores; su máximo es 58,339.59. La serie diaria va en gris claro y la media móvil en color: la tendencia se lee sin perder el detalle.
6. Barras
Las barras comparan grupos. El notebook dibuja lado a lado el ingreso por categoría (columnas con bar_label, que escribe 6.1, 1.8, 1.4, 1.3 y 0.4) y las unidades por categoría (barras horizontales). Ropa vende más unidades que nadie (2794) pero ingresa solo 1.26 M: su precio medio es bajo. Para que barh ponga la mayor arriba, la serie se ordena de menor a mayor.
x = np.arange(len(cat_canal))
ancho = 0.27
for i, canal in enumerate(cat_canal.columns):
ax1.bar(x + (i - 1) * ancho, cat_canal[canal],
width=ancho, label=canal)
ax1.set_xticks(x, labels=cat_canal.index)
Ese es el truco de las barras agrupadas: cada canal se desplaza un ancho a la izquierda o a la derecha de la posición entera. Las apiladas usan bottom= con la suma acumulada. En Electrónica, Web (2.62 M) y App (2.40 M) casi empatan; la celda más grande de categoría × región es Electrónica-Centro con 2.41 M.
7. Guardar y configurar
fig.savefig guarda la línea mensual en la carpeta salidas/. Con los valores por defecto el PNG mide 640 × 480 píxeles; con dpi=150, 960 × 720. La última celda de teoría lee rcParams: tamaño 6.4 × 4.8 pulgadas, 100 dpi, fuente sans-serif de 10 pt y un ciclo de 10 colores que empieza en #1f77b4.
Ejercicios
Hay cuatro funciones por completar: barras horizontales del ingreso por región con Centro (4.22 M) arriba, la línea de pedidos por mes con marcadores y nombres de mes, columnas de unidades con etiquetas enteras y una función que guarda un PNG a 200 dpi. La celda de pruebas imprime «pendiente» mientras no resuelvas una función; las soluciones están al final y se verifican con las mismas pruebas.
Trampas que el notebook expone
plt.titlecon varios paneles va al último creado.barhdibuja de abajo hacia arriba: ordena de menor a mayor.- Sin
labelen cada serie, la leyenda queda vacía. - El tamaño en píxeles depende de las pulgadas y de los dpi a la vez.