Building Interactive Charts for Exploration, Communication, and Dashboardsยถ
Notebook Guideยถ
The original Plotly content remains intact. This added section clarifies what learners should extract from it.
Focus areasยถ
how interactivity changes analysis workflows
when hovering, zooming, and filtering add value
what makes an interactive chart stakeholder-friendly rather than distracting
how Plotly supports dashboards and exploratory investigation
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:
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 250K+ stakeholder engagement weapon** that closes million-dollar deals with one mouse click!
# Your code hereExercisesยถ
Exerciseยถ
Write summarize_series(vals) that returns a dict with min, max, mean of a numeric list. This is a data-prep utility before plotting.
Summaryยถ
Interactive charts are strongest when they let the user answer a question faster. Use the original examples in this notebook as patterns for exploration, not just decoration.
8. Interactive Codeยถ
Expected output
A 50
B 75
C 65Expected output
B