Calendar Heatmap
Sleep Quality Calendar
Annual sleep quality tracking with hours and quality score visualization.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(789)
# Generate sleep quality (0-4: poor to excellent)
days = 365
sleep_quality = np.random.choice([0, 1, 2, 3, 4], size=days, p=[0.05, 0.15, 0.35, 0.30, 0.15])
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(sleep_quality):
week = i // 7
day = i % 7
if week < weeks:
data[day, week] = val
# Purple gradient for sleep
colors = ['#0a0a0f', '#1e1b4b', '#4c1d95', '#7c3aed', '#a78bfa']
cmap = LinearSegmentedColormap.from_list('sleep', 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=4)
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('Sleep Quality Score - Annual View', 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, ['Poor', 'Fair', 'Good', 'Great', 'Excellent'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=5,
fontsize=8, facecolor='#1e293b', edgecolor='#334155', labelcolor='white')
good_sleep = int(np.sum(sleep_quality >= 3))
avg_score = np.mean(sleep_quality)
ax.annotate(f'Good sleep: {good_sleep} nights | Avg score: {avg_score:.1f}/4', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=11, color='#a78bfa', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕