# graficos-en-matplotlib
Gráficos en Matplotlib
Volver a la portada del cursoAnálisis de Datos de Ventas
Sección 6 · Proyecto Final
Análisis de Datos de Ventas
Hasta aquí cada lección agregó un tipo de gráfico. El notebook analisis-ventas invierte el orden: parte de las preguntas que haría la dirección de PyShop y elige el gráfico que mejor responde cada una. Recorre los KPIs del año, la tendencia mensual y trimestral, los rankings por categoría y región, la composición por canal y dos casos en que los datos no muestran lo que uno esperaría. Termina con conclusiones escritas con cifras, el mismo formato que pide el proyecto final. Como todos los notebooks del curso, es autocontenido y determinista.
1. De la pregunta al gráfico
El notebook abre con una tabla que guía todo el análisis:
| Pregunta | Ejemplo | Gráfico |
|---|---|---|
| Tendencia | ¿cómo evolucionó el ingreso? | línea |
| Ranking | ¿qué categoría vende más? | barras ordenadas |
| Composición | ¿qué parte aporta cada canal? | donut o barras apiladas al 100 % |
| Relación | ¿más pedidos, más ingreso? | dispersión |
| Distribución | ¿cómo se reparten los montos? | histograma |
Escribe la pregunta antes de abrir Matplotlib. Si no puedes formularla en una frase, el gráfico tampoco la va a responder.
2. KPIs como tarjetas
Cuatro números resumen el año: ingreso de 10.93 M, 6,000 pedidos, ticket medio de 1,822.12 MXN y calificación media de 4.14. En un tablero se presentan como tarjetas: cada una es un Axes sin ejes con un valor grande y un nombre pequeño debajo.
fig, axs = plt.subplots(1, 4, figsize=(12, 1.8))
for ax, (nombre, valor) in zip(axs, kpis.items()):
ax.axis("off")
ax.text(0.5, 0.62, valor, ha="center", fontsize=20,
fontweight="bold", color="#2563EB")
ax.text(0.5, 0.18, nombre, ha="center", fontsize=11)
Las coordenadas de ax.text van de 0 a 1 dentro del panel cuando no hay datos dibujados, así que (0.5, 0.62) queda centrado y un poco arriba.
3. Tendencia y trimestres
La línea mensual muestra la forma del año y, a su lado, las barras por trimestre muestran el peso de cada parte: 2.27, 2.38, 2.55 y 3.73 M. El cuarto trimestre aporta el 34.1 % del ingreso, y solo noviembre y diciembre suman el 26.2 %. La barra de T4 va en azul y las demás en gris: el color dirige la mirada a la conclusión. bar_label recibe aquí una lista de textos propios con el monto y el porcentaje en dos renglones.
4. Rankings
Dos paneles de barras horizontales ordenadas, con el valor al final de cada barra (padding=3 lo separa del borde). Electrónica concentra 6.10 de los 10.93 M; Centro es la región más fuerte con 4.22 M, y Norte (2.51 M) y Occidente (2.46 M) casi empatan. Se amplía el límite del eje x un 18 % para que las etiquetas no se corten.
5. Composición: barras apiladas al 100 %
Para comparar el reparto por canal dentro de cada categoría, se normaliza cada fila de la tabla categoría × canal para que sume 100 (cc.div(cc.sum(axis=1), axis=0) * 100) y se apilan barras horizontales con left=. El resultado es parejo: Web entre 43 y 47 %, App entre 33 y 39 % y Marketplace entre 17.5 y 20.7 %. Ninguna categoría depende de un canal distinto, y eso también es un hallazgo.
6. Dos casos sin patrón
Calificación por categoría. Las medias van de 4.09 a 4.17. El notebook las dibuja dos veces: con el eje y entre 4.05 y 4.2 parecen muy distintas; con el eje de 0 a 5 son casi iguales. El segundo gráfico es el honesto.
Día de la semana. 2025 tiene 53 miércoles y 52 de cada otro día, así que se compara el promedio por día y no la suma:
dow = ventas["fecha"].dt.dayofweek
fechas = pd.date_range("2025-01-01", "2025-12-31")
n_dias = pd.Series(fechas.dayofweek).value_counts().sort_index()
promedio = ventas.groupby(dow)["total"].sum() / n_dias / 1e3
print(promedio.round(1).tolist())
# [33.5, 29.1, 29.6, 31.2, 27.5, 30.7, 28.0]
Los promedios van de 27.5 mil (viernes) a 33.5 mil (lunes) sin una forma que se repita. En estos datos sintéticos el día de cada pedido se eligió al azar: la diferencia es ruido y no hay base para recomendar un día de promociones. Un buen análisis reporta también lo que no encontró.
7. Conclusiones
La sección final escribe cuatro conclusiones, cada una con su cifra y su gráfico: la temporada alta (T4 con 34.1 %), la concentración en Electrónica (55.8 %) y en Centro, la estabilidad de los canales (Web 44.2 %) y la ausencia de efecto del día y de diferencias de calificación.
Ejercicios
Cuatro funciones con pruebas: calcular el diccionario de KPIs, el ingreso por trimestre, elegir el gráfico según el tipo de pregunta y dibujar las barras trimestrales con solo el trimestre mayor resaltado. Las soluciones están al final.
En qué fijarse
- Cada gráfico responde una pregunta; el título puede decir la respuesta.
- Color para lo importante, gris para el contexto.
- Compara promedios cuando los grupos tienen distinto tamaño.
- Un eje recortado convierte una diferencia mínima en una «tendencia».