¿Por qué usar gráficos combinados?
Los gráficos combinados permiten mostrar dos tipos de información en una sola representación visual. Usualmente, se combinan gráficos de barras para mostrar magnitudes concretas y gráficos de líneas para ilustrar tendencias. Esta combinación es especialmente útil en informes empresariales donde se requiere mostrar tanto valores actuales como direcciones de cambio.
Casos de uso ideales
Los gráficos combinados son más efectivos cuando:
- Ambos conjuntos de datos comparten el mismo eje X
- Existe una relación lógica entre los conjuntos de datos
- Se requiere comparar magnitudes y tendencias simultáneamente
Ejemplos comunes incluyen:
| Escenario | Barras | Línea |
|---|---|---|
| Ventas mensuales | Ventas reales | Promedio móvil |
| Soporte técnico | Casos mensuales | Tendencia de crecimiento |
| Inventario | Nivel actual | Tendencia histórica |
Ejemplo básico de impleemntación
import matplotlib.pyplot as plt
# Configuración básica
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# Datos de ejemplo
meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun"]
valores = [120, 98, 135, 110, 150, 160]
tendencia = [110, 112, 120, 122, 135, 145]
plt.figure(figsize=(10, 6))
# Gráfico de barras
plt.bar(meses, valores, label="Valores", edgecolor="black", alpha=0.85)
# Gráfico de línea
plt.plot(meses, tendencia, label="Tendencia", linewidth=2, marker="o")
# Formateo
plt.title("Gráfico Combinado: Barras + Línea")
plt.xlabel("Mes")
plt.ylabel("Valores")
plt.grid(axis="y", linestyle="--", alpha=0.3)
plt.legend()
plt.tight_layout()
plt.show()
Mejoras prácticas
Uso de promedio móvil
import pandas as pd
# Calcular promedio móvil de 3 periodos
serie = pd.Series(valores)
promedio_movil = serie.rolling(window=3).mean()
Añadir etiquetas de valores
# Dentro del código de generación del gráfico
barras = plt.bar(meses, valores)
for i, v in enumerate(valores):
plt.text(i, v, str(v), ha="center", va="bottom")
Integración con Excel
import pandas as pd
def generar_grafico_desde_excel(ruta_archivo, hoja, columna_x, columna_y):
df = pd.read_excel(ruta_archivo, sheet_name=hoja)
x = df[columna_x].astype(str).tolist()
y = pd.to_numeric(df[columna_y], errors="coerce").fillna(0)
# Generación del gráfico...
plt.savefig("grafico_salida.png")
plt.close()
Problemas comunes y soluciones
- Fuente de caracteres: Asegurar configuración de fuentes con
plt.rcParams["font.sans-serif"] - Formato de datos: Validar y convertir datos con
pd.to_numeric() - Escala desigual: Usar ejes Y dobles cuando los rangos de datos son muy diferentes
- Verificación: Confirmar que los datos mostrados coincidan con las fuentes originales
Principios de diseño efectivo
- Mantener un solo mensaje central por gráfico
- Usar barras para magnitudes y líneas para tendencias
- Limitar el número de colores y estilos
- Etiquetar solo información crítica
- Evitar sobrecargra visualmente el gráfico