Calendar Heatmap
Energy Consumption Calendar
Daily household energy usage showing consumption patterns.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(204)
days = 365
# Simulate energy - higher in winter (heating) and summer (AC)
base_energy = 40 + 25 * np.abs(np.cos(2 * np.pi * (np.arange(days) - 15) / 365))
energy = base_energy + np.random.normal(0, 10, days)
# Weekends higher usage
for i in range(days):
if i % 7 >= 5:
energy[i] *= 1.2
energy = np.clip(energy, 10, 100)
energy_levels = np.digitize(energy, bins=[0, 25, 40, 55, 70, 85]) - 1
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(energy_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('energy', 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('Energy Consumption - Daily kWh Usage', 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, ['<25kWh', '25-40', '40-55', '55-70', '70-85', '>85kWh'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=6,
fontsize=8, facecolor='#1e293b', edgecolor='#334155', labelcolor='white')
total = np.sum(energy)
ax.annotate(f'Total: {total:,.0f} kWh this year', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=11, color='#fbbf24', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕