Interactive Plots with Plotly and Dashboards#

px.scatter() + dashboards = $100K/month consulting Zoom + hover + click = Interactive executive demos

Tableau replacement = 100% Plotly in FAANG


🎯 Interactive = Stakeholder Engagement x10#

Feature

Static

Plotly Interactive

Business Win

Zoom

❌ Fixed

βœ… Drag to zoom

Deep dive

Hover

❌ Manual

βœ… Tooltip data

Instant insights

Click

❌ Static

βœ… Filter data

Dynamic analysis

Export

❌ Screenshot

βœ… PNG/PDF/CSV

Professional

Dashboard

❌ PowerPoint

βœ… Live demo

$1M deals closed


πŸš€ Step 1: Interactive Scatter = ROI Explorer (Run this!)#

# !pip install plotly pandas  # Run once!

import plotly.express as px
import pandas as pd
import numpy as np

# REAL BUSINESS DATA
np.random.seed(42)
df = pd.DataFrame({
    'Marketing_Spend': np.random.normal(40000, 15000, 100),
    'Sales': np.random.normal(60000, 20000, 100),
    'Product': np.random.choice(['Laptop', 'Phone', 'Tablet'], 100),
    'Region': np.random.choice(['North', 'South', 'East', 'West'], 100)
})
df['ROI'] = (df['Sales'] - df['Marketing_Spend']) / df['Marketing_Spend'] * 100

# πŸ–±οΈ INTERACTIVE SCATTER - CLICK + ZOOM + HOVER!
fig = px.scatter(df, x='Marketing_Spend', y='Sales',
                 size='ROI', color='Product',
                 hover_name='Product',
                 hover_data=['ROI', 'Region'],
                 title='πŸ“ˆ Interactive Marketing ROI Explorer',
                 labels={'Marketing_Spend': 'Marketing Spend ($)',
                        'Sales': 'Sales Generated ($)',
                        'ROI': 'ROI (%)'})

fig.update_layout(
    width=900, height=600,
    title_font_size=20, title_x=0.5,
    showlegend=True
)
fig.show()

# BUSINESS INSIGHTS
print(f"πŸ” Top ROI: {df['ROI'].max():.1f}%")
print(f"πŸ“Š Best Product: {df.groupby('Product')['ROI'].mean().idxmax()}")

πŸ”₯ Step 2: Interactive Bar = Product Drilldown#

# INTERACTIVE BAR CHART
product_sales = df.groupby(['Product', 'Region']).agg({
    'Sales': 'mean',
    'Marketing_Spend': 'mean'
}).round(0).reset_index()

fig = px.bar(product_sales, x='Product', y='Sales',
             color='Region',
             title='πŸ† Interactive Product Sales by Region',
             labels={'Sales': 'Average Sales ($)'},
             text='Sales')

fig.update_traces(texttemplate='%{text:$,.0f}', textposition='outside')
fig.update_layout(
    width=800, height=500,
    title_font_size=20, title_x=0.5
)
fig.show()

⚑ Step 3: Interactive Line = Sales Trend Explorer#

# TIME SERIES WITH ZOOM
dates = pd.date_range('2024-01-01', periods=100, freq='D')
sales_trend = 50000 + np.cumsum(np.random.normal(500, 2000, 100))

df_trend = pd.DataFrame({
    'Date': dates,
    'Sales': sales_trend,
    'Product': np.random.choice(['Laptop', 'Phone', 'Tablet'], 100)
})

fig = px.line(df_trend, x='Date', y='Sales',
              color='Product',
              title='πŸ“Š Interactive Sales Trend (Zoom + Pan)',
              labels={'Sales': 'Daily Sales ($)'})

fig.update_layout(
    width=1000, height=500,
    title_font_size=20, title_x=0.5,
    xaxis_title="Date",
    yaxis_title="Daily Sales ($)"
)
fig.show()

print(f"πŸ“ˆ 30-day growth: {((sales_trend[-30:].mean() - sales_trend[:30].mean()) / sales_trend[:30].mean() * 100):+.1f}%")

🧠 Step 4: FULL INTERACTIVE DASHBOARD#

from plotly.subplots import make_subplots
import plotly.graph_objects as go

# EXECUTIVE DASHBOARD TEMPLATE
fig = make_subplots(
    rows=2, cols=2,
    subplot_titles=('πŸ’° Sales Trend', 'πŸ† Product Mix', 'πŸ“ˆ ROI Scatter', 'πŸ”₯ Regional Heatmap'),
    specs=[[{"type": "scatter"}, {"type": "pie"}],
           [{"type": "scatter"}, {"type": "heatmap"}]]
)

# 1. SALES TREND
fig.add_trace(go.Scatter(x=df_trend['Date'][-30:], y=df_trend['Sales'][-30:],
                        mode='lines+markers', name='Sales'), row=1, col=1)

# 2. PRODUCT PIE
product_agg = df.groupby('Product')['Sales'].sum()
fig.add_trace(go.Pie(labels=product_agg.index, values=product_agg.values,
                    name='Product Mix'), row=1, col=2)

# 3. ROI SCATTER
fig.add_trace(go.Scatter(x=df['Marketing_Spend'], y=df['Sales'],
                        mode='markers', marker=dict(size=8, color=df['ROI'], colorscale='Viridis'),
                        name='ROI'), row=2, col=1)

# 4. REGIONAL HEATMAP
pivot = df.pivot_table(values='Sales', index='Product', columns='Region', aggfunc='mean')
fig.add_trace(go.Heatmap(z=pivot.values, x=pivot.columns, y=pivot.index,
                        colorscale='YlOrRd'), row=2, col=2)

fig.update_layout(
    height=800, width=1200,
    title_text="πŸš€ EXECUTIVE INTERACTIVE DASHBOARD",
    title_font_size=24, title_x=0.5
)
fig.show()

πŸ“Š Step 5: Click + Filter Interactive Table#

import plotly.graph_objects as go
from plotly.offline import iplot

# INTERACTIVE DATA TABLE
fig = go.Figure(data=[go.Table(
    columnwidth=[100, 100, 100, 120],
    header=dict(
        values=['Product', 'Region', 'Sales', 'ROI %'],
        line_color='darkslategray',
        fill_color='royalblue',
        font=dict(color='white', size=14),
        height=40
    ),
    cells=dict(
        values=[df['Product'], df['Region'],
                [f'${s:,.0f}' for s in df['Sales']],
                [f'{r:.1f}%' for r in df['ROI']]],
        line_color='darkslategray',
        fill_color=['paleturquoise', 'lightcyan'],
        font=dict(color='darkslategray', size=12),
        height=30
    ))
])

fig.update_layout(
    title="πŸ“‹ Interactive Sales Data Table",
    title_font_size=20, title_x=0.5,
    width=800, height=600
)
fig.show()

πŸ“‹ Plotly Cheat Sheet (Consulting Gold)#

Chart

Code

Interactive Magic

Business Demo

Scatter

px.scatter(x,y,size,color)

Zoom + hover

ROI analysis

Bar

px.bar(x,y,color)

Click to filter

Product ranking

Line

px.line(x,y,color)

Pan + zoom

Sales trends

Pie

px.pie(names,values)

Explode slices

Market share

Heatmap

px.imshow()

Cell hover

Performance matrix

Dashboard

make_subplots()

4 charts

Executive

# PRO ONE-LINER
fig = px.scatter(df, x='spend', y='sales', size='roi', color='product')
fig.show()

πŸ† YOUR EXERCISE: Build YOUR Interactive Dashboard#

# MISSION: YOUR clickable business dashboard!

import plotly.express as px
import pandas as pd
import numpy as np

# YOUR BUSINESS DATA
your_categories = ['???', '???', '???', '???']  # YOUR products
your_regions = ['North', 'South', 'East', 'West']
np.random.seed(42)

# GENERATE YOUR DATA
n = 100
df_your = pd.DataFrame({
    'Product': np.random.choice(your_categories, n),
    'Region': np.random.choice(your_regions, n),
    'Spend': np.random.normal(30000, 10000, n),
    'Sales': np.random.normal(50000, 15000, n)
})
df_your['ROI'] = (df_your['Sales'] - df_your['Spend']) / df_your['Spend'] * 100

# YOUR INTERACTIVE SCATTER
fig = px.scatter(df_your, x='Spend', y='Sales',
                 size='ROI', color='Product',
                 hover_name='Product',
                 hover_data=['Region', 'ROI'],
                 title='πŸš€ YOUR Interactive ROI Dashboard',
                 labels={'Spend': 'Marketing Spend ($)',
                        'Sales': 'Sales ($)',
                        'ROI': 'ROI (%)'})

fig.update_layout(
    width=900, height=600,
    title_font_size=20, title_x=0.5
)
fig.show()

# YOUR BUSINESS INSIGHTS
print("πŸ“Š YOUR DASHBOARD INSIGHTS:")
print(f"   Top ROI: {df_your['ROI'].max():.1f}%")
print(f"   Best Product: {df_your.groupby('Product')['ROI'].mean().idxmax()}")
print(f"   Total Records: {len(df_your)}")

Example to test:

your_categories = ['Laptop', 'Phone', 'Tablet', 'Monitor']

YOUR MISSION:

  1. Add YOUR product categories

  2. Run YOUR interactive dashboard

  3. Click + zoom + hover demo

  4. Screenshot β†’ β€œI build Tableau dashboards!”


πŸŽ‰ What You Mastered#

Plotly Skill

Status

Consulting Power

Interactive scatter

βœ…

Zoom + hover ROI

Clickable bars

βœ…

Product drilldown

Trend explorer

βœ…

Time series pan

4-chart dashboard

βœ…

Executive demo

Interactive table

βœ…

Tableau replacement


Next: Automate Reports (Excel + PPT + PDF = 1-click weekly reports!)

print("🎊" * 20)
print("PLOTLY = $100K/MONTH CONSULTING!")
print("πŸ’» Clickable dashboards = Close $1M deals!")
print("πŸš€ FAANG + McKinsey = THESE exact demos!")
print("🎊" * 20)

can we appreciate how px.scatter(size='ROI', color='Product') just created a fully clickable ROI explorer where stakeholders can zoom into high-ROI clusters and hover for instant insights? Your students went from static PowerPoint hell to building make_subplots() 4-chart executive dashboards that McKinsey consultants charge \(100K to create. While analysts spend weeks in Tableau, your class is generating **hover-to-filter product bars** and **pan-able sales trends** in 5 lines. This isn't plottingβ€”it's the **\)250K+ stakeholder engagement weapon** that closes million-dollar deals with one mouse click!

# Your code here