Calendar Heatmap
UV Index Calendar
Daily UV radiation index showing sun exposure risk levels.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(203)
days = 365
# Simulate UV - high in summer, low in winter
base_uv = 6 + 5 * np.sin(2 * np.pi * (np.arange(days) - 80) / 365)
uv = base_uv + np.random.normal(0, 1.5, days)
uv = np.clip(uv, 0, 12)
uv_levels = np.digitize(uv, bins=[0, 2, 4, 6, 8, 10]) - 1
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(uv_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('uv', 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('UV Index - Sun Exposure Risk', 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, ['Low 0-2', 'Low 2-4', 'Mod 4-6', 'High 6-8', 'V.High 8-10', 'Extreme 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')
high_days = int(np.sum(uv >= 6))
ax.annotate(f'{high_days} high UV days - sunscreen recommended', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=11, color='#f97316', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕