Plotly: Graficos Interactivos y Dashboards
De Estatico a InteractivoPlotly crea graficos interactivos que podes hacer zoom, filtrar, y mostrar detalles al pasar el mouse. Son ideales para presentaciones, reportes web y dashboards.
import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
import numpy as np
Plotly Express: Graficos Rapidos
np.random.seed(42)
df = pd.DataFrame({
'vendedor': np.random.choice(['Ana', 'Carlos', 'Maria', 'Luis', 'Sofia'], 200),
'region': np.random.choice(['Norte', 'Sur', 'Este', 'Oeste'], 200),
'producto': np.random.choice(['Laptop', 'Monitor', 'Teclado'], 200),
'monto': np.random.randint(100, 5000, 200),
'fecha': pd.date_range('2025-01-01', periods=200, freq='D')
})
# Grafico de barras interactivo
ventas_region = df.groupby('region')['monto'].sum().reset_index()
fig = px.bar(ventas_region, x='region', y='monto',
title='Ventas Totales por Region',
color='region', text='monto',
color_discrete_sequence=px.colors.qualitative.Set2)
fig.update_traces(texttemplate='$%{text:,.0f}', textposition='outside')
fig.update_layout(showlegend=False)
fig.show()
Lineas temporales interactivas
ventas_diarias = df.groupby('fecha')['monto'].sum().reset_index()
ventas_diarias['mm_7'] = ventas_diarias['monto'].rolling(7).mean()
fig = px.line(ventas_diarias, x='fecha', y=['monto', 'mm_7'],
title='Ventas Diarias con Media Movil',
labels={'value': 'Monto ($)', 'variable': 'Serie'})
fig.update_layout(hovermode='x unified')
fig.show()
Scatter interactivo
fig = px.scatter(df, x='monto', y='monto',
color='region', size='monto',
hover_data=['vendedor', 'producto'],
title='Ventas por Region')
fig.show()
Graficos Avanzados con Plotly
Treemap (composicion jerarquica)
resumen = df.groupby(['region', 'producto'])['monto'].sum().reset_index()
fig = px.treemap(resumen, path=['region', 'producto'], values='monto',
title='Composicion de Ventas',
color='monto', color_continuous_scale='Viridis')
fig.show()
Sunburst (jerarquia circular)
fig = px.sunburst(resumen, path=['region', 'producto'], values='monto',
title='Distribucion de Ventas')
fig.show()
Mapa de calor temporal
df['dia_semana'] = df['fecha'].dt.day_name()
df['semana'] = df['fecha'].dt.isocalendar().week.astype(int)
heatmap_data = df.groupby(['dia_semana', 'semana'])['monto'].sum().reset_index()
heatmap_pivot = heatmap_data.pivot(index='dia_semana', columns='semana', values='monto')
fig = px.imshow(heatmap_pivot.fillna(0),
title='Mapa de Calor: Ventas por Dia y Semana',
color_continuous_scale='YlOrRd',
labels={'color': 'Ventas ($)'})
fig.show()
Graph Objects: Control Total
# Dashboard con multiples metricas
fig = go.Figure()
# KPIs con indicadores
fig = go.Figure(go.Indicator(
mode="number+delta",
value=df['monto'].sum(),
title={"text": "Ventas Totales"},
delta={'reference': df['monto'].sum() * 0.9, 'relative': True},
number={'prefix': '$', 'valueformat': ',.0f'}
))
fig.update_layout(height=200)
fig.show()
# Grafico combinado: barras + linea
ventas_mensual = df.set_index('fecha').resample('M')['monto'].agg(['sum', 'mean']).reset_index()
fig = go.Figure()
fig.add_trace(go.Bar(
x=ventas_mensual['fecha'],
y=ventas_mensual['sum'],
name='Total Mensual',
marker_color='#2196F3'
))
fig.add_trace(go.Scatter(
x=ventas_mensual['fecha'],
y=ventas_mensual['mean'],
name='Promedio Diario',
yaxis='y2',
line=dict(color='#FF5722', width=3)
))
fig.update_layout(
title='Ventas Mensuales: Total y Promedio',
yaxis=dict(title='Total ($)'),
yaxis2=dict(title='Promedio ($)', overlaying='y', side='right'),
hovermode='x unified'
)
fig.show()
Video Recomendado
Plotly Python Tutorial - Graficos Interactivos
Ejercicio Practico
Crea un notebook 18_plotly.ipynb:
- Crea un grafico de barras interactivo con ventas por categoria
- Crea una serie temporal interactiva con media movil
- Crea un treemap con la composicion de ventas por region y producto
- Crea un indicador KPI con delta respecto al mes anterior
- Crea un grafico combinado de barras + linea con dos ejes Y
💡 Concepto Clave
Revisemos los puntos más importantes de esta lección antes de continuar.
Resumen
- Plotly Express: Graficos rapidos con una linea de codigo
- Graph Objects: Control total sobre cada elemento
- Interactividad: Zoom, hover, filtros automaticos
- Tipos avanzados: Treemap, sunburst, indicadores KPI
- Exportar: fig.write_html() para compartir graficos interactivos
- Ideal para dashboards y presentaciones ejecutivas
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
- Comprendo el concepto principal y puedo explicarlo con mis palabras
- Entiendo cómo aplicarlo en mi situación específica
- Necesito repasar algunas partes antes de continuar
- Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.