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 |
|
Zoom + hover |
ROI analysis |
Bar |
|
Click to filter |
Product ranking |
Line |
|
Pan + zoom |
Sales trends |
Pie |
|
Explode slices |
Market share |
Heatmap |
|
Cell hover |
Performance matrix |
Dashboard |
|
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:
Add YOUR product categories
Run YOUR interactive dashboard
Click + zoom + hover demo
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