Calendar Heatmap
Pages Read Calendar
Daily book pages read tracked in neon amber gradient for bookworms.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(135)
days = 365
pages = np.random.exponential(20, days).astype(int)
pages = np.clip(pages, 0, 80)
pages[np.random.choice(days, size=80, replace=False)] = 0
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(pages):
week = i // 7
day = i % 7
if week < weeks:
data[day, week] = val
# CLAUDE.md Neon Amber palette
colors_neon = ['#ffffff', '#fef5e0', '#f9d77d', '#F5B027']
cmap = LinearSegmentedColormap.from_list('neon_amber', colors_neon, N=256)
fig, ax = plt.subplots(figsize=(16, 4), facecolor='#ffffff')
ax.set_facecolor('#ffffff')
im = ax.imshow(data, cmap=cmap, aspect='auto', vmin=0, vmax=80)
ax.set_yticks(range(7))
ax.set_yticklabels(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], fontsize=9, color='#374151')
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='#374151')
ax.set_title('Reading - Pages Per Day', fontsize=16, color='#1f2937', fontweight='bold', pad=15)
for i in range(8):
ax.axhline(y=i-0.5, color='#e5e7eb', linewidth=0.5)
for i in range(weeks+1):
ax.axvline(x=i-0.5, color='#e5e7eb', linewidth=0.5)
ax.tick_params(colors='#374151', length=0)
for spine in ax.spines.values():
spine.set_visible(False)
legend_elements = [mpatches.Patch(facecolor=c, label=l, edgecolor='#d1d5db')
for c, l in zip(colors_neon, ['0', '1-25', '26-55', '56+'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=4,
fontsize=8, facecolor='#f9fafb', edgecolor='#d1d5db', labelcolor='#374151', title='Pages',
title_fontsize=9)
total = int(np.sum(pages))
books = total // 300
ax.annotate(f'{total:,} pages - ~{books} books', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=11, color='#F5B027', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕