Calendar Heatmap
Stock Volatility Calendar
Daily market volatility index showing trading risk levels.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(205)
days = 365
# Simulate VIX-like volatility
volatility = np.random.exponential(15, days)
# Add some spikes for market events
spike_days = np.random.choice(days, size=20, replace=False)
volatility[spike_days] *= 2.5
volatility = np.clip(volatility, 5, 60)
# Weekends no trading
for i in range(days):
if i % 7 >= 5:
volatility[i] = 0
vol_levels = np.digitize(volatility, bins=[0, 12, 18, 25, 35, 50]) - 1
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(vol_levels):
week = i // 7
day = i % 7
if week < weeks:
data[day, week] = val
# Temperature palette
colors = ['#1e3a8a', '#3b82f6', '#22d3ee', '#fbbf24', '#f97316', '#dc2626']
cmap = LinearSegmentedColormap.from_list('volatility', colors, N=256)
fig, ax = plt.subplots(figsize=(16, 4), facecolor='#0a0a0f')
ax.set_facecolor('#0a0a0f')
im = ax.imshow(data, cmap=cmap, aspect='auto', vmin=0, vmax=5)
ax.set_yticks(range(7))
ax.set_yticklabels(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], fontsize=9, color='#e2e8f0')
ax.set_xticks(range(0, 52, 4))
ax.set_xticklabels(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ''],
fontsize=9, color='#e2e8f0')
ax.set_title('Market Volatility Index - Daily VIX Levels', fontsize=16, color='white', fontweight='bold', pad=15)
for i in range(8):
ax.axhline(y=i-0.5, color='#1e293b', linewidth=0.5)
for i in range(weeks+1):
ax.axvline(x=i-0.5, color='#1e293b', linewidth=0.5)
ax.tick_params(colors='#e2e8f0', length=0)
for spine in ax.spines.values():
spine.set_visible(False)
legend_elements = [mpatches.Patch(facecolor=c, label=l, edgecolor='#334155')
for c, l in zip(colors, ['Low <12', 'Normal', 'Elevated', 'High', 'V.High', 'Extreme'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=6,
fontsize=8, facecolor='#1e293b', edgecolor='#334155', labelcolor='white')
high_vol_days = int(np.sum(volatility >= 25))
ax.annotate(f'{high_vol_days} high volatility trading days', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=11, color='#dc2626', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕