Heatmap

Workout Intensity Calendar

Modern heatmap tracking workout intensity over weeks

Output
Workout Intensity Calendar
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap

np.random.seed(321)
weeks = [f'Week {i}' for i in range(1, 13)]
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data = np.random.randint(0, 100, (len(weeks), len(days)))
data[0:3, :] = np.random.randint(60, 100, (3, 7))
data[5:8, :] = np.random.randint(20, 50, (3, 7))
data[:, 6] = np.random.randint(0, 30, len(weeks))

colors = ['#fdf4ff', '#f5d0fe', '#e879f9', '#c026d3']
cmap = LinearSegmentedColormap.from_list('PinkGrad', colors, N=256)

fig, ax = plt.subplots(figsize=(10, 10), facecolor='white')
im = ax.imshow(data, cmap=cmap, aspect='auto', vmin=0, vmax=100)

ax.set_xticks(range(len(days)))
ax.set_yticks(range(len(weeks)))
ax.set_xticklabels(days, fontsize=11, color='#374151', fontweight='500')
ax.set_yticklabels(weeks, fontsize=10, color='#1f2937')

for i in range(len(weeks)):
    for j in range(len(days)):
        val = data[i, j]
        color = '#ffffff' if val > 70 else '#1f2937'
        ax.text(j, i, f'{val}', ha='center', va='center', fontsize=9, fontweight='500', color=color)

cbar = plt.colorbar(im, ax=ax, shrink=0.5, pad=0.02)
cbar.set_label('Intensity %', fontsize=11, color='#1f2937')
cbar.ax.tick_params(labelsize=9, colors='#6b7280')
cbar.outline.set_visible(False)

for spine in ax.spines.values():
    spine.set_visible(False)
ax.tick_params(length=0)
ax.set_title('12-Week Workout Intensity Tracker', fontsize=16, color='#111827', fontweight='bold', pad=15)

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Heatmaps & Density

Did this help you?

Support PyLucid to keep it free & growing

Support