Calendar Heatmap
Hydration Tracker Calendar
Daily water intake visualization tracking hydration goals.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(147)
# Generate water intake (glasses per day, 0-10)
days = 365
water = np.random.choice([2, 4, 5, 6, 7, 8, 9, 10], size=days, p=[0.05, 0.1, 0.15, 0.2, 0.2, 0.15, 0.1, 0.05])
water_levels = np.digitize(water, bins=[0, 3, 5, 7, 8, 10]) - 1
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(water_levels):
week = i // 7
day = i % 7
if week < weeks:
data[day, week] = val
# Cyan water gradient
colors = ['#0a0a0f', '#083344', '#0e7490', '#06b6d4', '#22d3ee', '#67e8f9']
cmap = LinearSegmentedColormap.from_list('hydration', 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('Daily Hydration - Glasses of Water', 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, ['<3', '3-5', '5-7', '7-8', '8-10', '10+'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=6,
fontsize=8, facecolor='#1e293b', edgecolor='#334155', labelcolor='white')
goal_days = int(np.sum(water >= 8))
avg = np.mean(water)
ax.annotate(f'Goal (8+): {goal_days} days | Avg: {avg:.1f} glasses/day', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=11, color='#22d3ee', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕