Lección 15 de 29Módulo 3: Visualización de Datos

15. Mejores Prácticas de Visualización

Principios de diseño, color, storytelling y accesibilidad

15 minutos

Aprende principios de diseño, uso de color, storytelling y accesibilidad para crear visualizaciones profesionales.

Principios de diseño

1. Simplicidad

import matplotlib.pyplot as plt
import seaborn as sns

# ❌ Mal: Demasiado complejo
plt.figure(figsize=(12, 8))
plt.plot(data, color='red', linestyle='--', marker='o', markersize=10, linewidth=3)
plt.plot(data2, color='blue', linestyle='-.', marker='s', markersize=10, linewidth=3)
plt.plot(data3, color='green', linestyle=':', marker='^', markersize=10, linewidth=3)
plt.grid(True, which='both', linestyle='--', linewidth=0.5, color='gray')
plt.title('VENTAS MENSUALES POR REGIÓN Y PRODUCTO', fontsize=20)

# ✅ Bien: Simple y claro
plt.figure(figsize=(10, 6))
plt.plot(meses, ventas, marker='o', linewidth=2, color='steelblue')
plt.title('Ventas Mensuales 2024', fontsize=14)
plt.xlabel('Mes')
plt.ylabel('Ventas ($)')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

2. Jerarquía visual

plt.figure(figsize=(12, 6))
plt.plot(ventas, linewidth=3, color='#2E86AB', label='Ventas Reales', zorder=3)
plt.plot(objetivo, linewidth=1.5, color='gray', linestyle='--', label='Objetivo', alpha=0.7, zorder=2)
plt.fill_between(range(len(ventas)), ventas, objetivo, alpha=0.1, color='green', zorder=1)

plt.title('Ventas vs Objetivo - Q1 2024', fontsize=16, fontweight='bold', pad=20)
plt.legend(fontsize=11, frameon=False)
plt.tight_layout()
plt.show()

Uso de color

Paletas recomendadas

# Categorías: Usar colores distintos
colores_categoricos = ['#E63946', '#F1FAEE', '#A8DADC', '#457B9D', '#1D3557']

# Secuencial: Para magnitudes (de bajo a alto)
import matplotlib.cm as cm
cmap_secuencial = cm.Blues

# Divergente: Para datos con punto medio
cmap_divergente = cm.RdYlGn

# Accesibilidad: Paletas color-blind friendly
sns.set_palette("colorblind")

Ejemplo con paletas

# Ventas por categoría (paleta categórica)
fig, ax = plt.subplots(figsize=(10, 6))
categorias = ['Electrónica', 'Ropa', 'Alimentos', 'Hogar']
ventas_cat = [120000, 95000, 75000, 60000]

colores = ['#264653', '#2A9D8F', '#E9C46A', '#F4A261']
ax.barh(categorias, ventas_cat, color=colores)
ax.set_title('Ventas por Categoría', fontsize=14, fontweight='bold')
ax.set_xlabel('Ventas ($)')
plt.tight_layout()
plt.show()

# Heatmap con paleta secuencial
correlation_matrix = df.corr()
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='Blues', center=0)
plt.title('Matriz de Correlación')
plt.show()

Storytelling con datos

Estructura de una historia

# Historia: "Las ventas crecieron 40% en Q2 gracias a la región Norte"

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# 1. Contexto: Tendencia general
axes[0].plot(meses, ventas, marker='o', linewidth=2, color='steelblue')
axes[0].set_title('1. Las ventas muestran crecimiento', fontsize=12, fontweight='bold')
axes[0].set_ylabel('Ventas ($)')

# 2. Insight principal: Destacar Q2
q2_meses = meses[3:6]
q2_ventas = ventas[3:6]
axes[1].bar(meses, ventas, color='lightgray', alpha=0.5)
axes[1].bar(q2_meses, q2_ventas, color='#E63946')
axes[1].set_title('2. Q2 supera expectativas (+40%)', fontsize=12, fontweight='bold')
axes[1].set_ylabel('Ventas ($)')

# 3. Acción: Por qué (desglose por región)
regiones = ['Norte', 'Sur', 'Este', 'Oeste']
contrib = [45, 20, 20, 15]
colores_region = ['#E63946', '#457B9D', '#457B9D', '#457B9D']
axes[2].pie(contrib, labels=regiones, autopct='%1.0f%%', colors=colores_region,
            startangle=90, textprops={'fontsize': 10})
axes[2].set_title('3. Región Norte lidera crecimiento', fontsize=12, fontweight='bold')

plt.tight_layout()
plt.savefig('storytelling_ventas.png', dpi=300)
plt.show()

Accesibilidad

# 1. Usar patrones además de colores
fig, ax = plt.subplots(figsize=(10, 6))
x = range(5)
y1 = [10, 15, 13, 17, 20]
y2 = [12, 18, 14, 19, 22]

ax.bar([i - 0.2 for i in x], y1, width=0.4, label='Producto A',
       color='#457B9D', edgecolor='black', linewidth=1.5)
ax.bar([i + 0.2 for i in x], y2, width=0.4, label='Producto B',
       color='#E63946', edgecolor='black', linewidth=1.5, hatch='//')

ax.legend()
ax.set_title('Ventas Comparativas (Accesible)')
plt.show()

# 2. Alto contraste
fig, ax = plt.subplots(figsize=(10, 6), facecolor='white')
ax.plot(meses, ventas, linewidth=3, color='#000000', marker='o', markersize=8)
ax.set_title('Ventas 2024', fontsize=16, color='#000000')
ax.set_xlabel('Mes', fontsize=12, color='#000000')
ax.set_ylabel('Ventas ($)', fontsize=12, color='#000000')
ax.grid(alpha=0.2, color='#666666')
plt.show()

Checklist de visualización profesional

"""
✅ ANTES DE COMPARTIR TU VISUALIZACIÓN:

1. ¿Es clara la historia/mensaje principal?
2. ¿Los ejes tienen etiquetas descriptivas?
3. ¿El título explica qué se está mostrando?
4. ¿La leyenda es necesaria y comprensible?
5. ¿Los colores son accesibles (color-blind friendly)?
6. ¿Hay demasiados elementos visuales?
7. ¿Los números están formateados correctamente?
8. ¿La resolución es adecuada para el medio (pantalla/impresión)?
9. ¿Se puede entender sin contexto adicional?
10. ¿Has eliminado elementos innecesarios (chartjunk)?
"""

Resumen de la lección

Simplicidad: Menos es más, elimina elementos innecesarios ✅ Color: Usa paletas apropiadas (categóricas, secuenciales, divergentes) ✅ Storytelling: Contexto → Insight → Acción ✅ Accesibilidad: Alto contraste, patrones, color-blind friendly ✅ Jerarquía: Destaca lo importante, reduce énfasis en lo secundario


🎯 Próxima lección: 16. Proyecto: Dashboard de Social Listening

En la siguiente lección crearás tu primer proyecto integrador completo. 🚀

Checkpoint de comprensión

3 preguntas para verificar lo aprendido. No afecta tu nota del examen final.

1¿Cuál es la regla de oro del diseño de visualizaciones?
2¿Cuándo NO deberías usar un pie chart?
3Tu gráfico va a un reporte para C-level. ¿Qué priorizás?

¿Completaste esta lección?

Marca esta lección como completada. Tu progreso se guardará en tu navegador.