Para causas de defectos o categorias de consultas, el grafico de Pareto es el clasico para mostrar la contribucion acumulada. Combina barras y linea acumulada para marcar el 80/20.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
categories = ["Configuracion incorrecta", "Operacion desconocida", "Bug", "Duda de especificacion", "Error de integracion", "Otros"]
counts = np.array([120, 95, 70, 45, 30, 18])
sorted_idx = np.argsort(counts)[::-1]
counts = counts[sorted_idx]
categories = [categories[i] for i in sorted_idx]
cumulative = counts.cumsum() / counts.sum()
fig, ax1 = plt.subplots(figsize=(6.4, 4))
ax1.bar(categories, counts, color="#38bdf8")
ax1.set_ylabel("Cantidad")
ax1.set_title("Analisis de Pareto de categorias de consultas")
ax1.grid(axis="y", alpha=0.2)
ax2 = ax1.twinx()
ax2.plot(categories, cumulative, color="#ef4444", marker="o")
ax2.set_ylabel("Proporcion acumulada")
ax2.set_ylim(0, 1.05)
ax2.yaxis.set_major_formatter(FuncFormatter(lambda x, _: f"{x:.0%}"))
threshold = np.argmax(cumulative >= 0.8)
ax2.axhline(0.8, color="#475569", linestyle="--", linewidth=1)
ax1.axvline(threshold + 0.5, color="#475569", linestyle=":", linewidth=1)
fig.tight_layout()
plt.show()

Consejos de lectura #
- Las barras muestran el volumen individual y la linea muestra el aporte acumulado.
- La linea del 80% destaca las categorias prioritarias.
- Si la linea sube lentamente, las causas estan dispersas y se requiere mejora transversal.