Calendar Heatmap
Temperature Weather Calendar
Daily temperature heatmap showing seasonal 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(999)
days = 365
# Simulate seasonal temperature pattern (Northern Hemisphere)
base_temp = 15 + 15 * np.sin(2 * np.pi * (np.arange(days) - 80) / 365)
temp = base_temp + np.random.normal(0, 5, days)
temp = np.clip(temp, -10, 40)
temp_levels = np.digitize(temp, bins=[-20, 0, 10, 18, 25, 32]) - 1
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(temp_levels):
week = i // 7
day = i % 7
if week < weeks:
data[day, week] = val
# Cold to hot gradient
colors = ['#1e3a8a', '#3b82f6', '#22d3ee', '#fbbf24', '#f97316', '#dc2626']
cmap = LinearSegmentedColormap.from_list('temp', 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 Temperature - Weather Patterns', 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, ['<0C', '0-10C', '10-18C', '18-25C', '25-32C', '>32C'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=6,
fontsize=8, facecolor='#1e293b', edgecolor='#334155', labelcolor='white')
avg = np.mean(temp)
max_t = np.max(temp)
min_t = np.min(temp)
ax.annotate(f'Avg: {avg:.1f}C | Range: {min_t:.0f}C to {max_t:.0f}C', 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
☕