Calendar Heatmap
Customer Support Tickets Calendar
Support ticket volume heatmap for resource planning.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.patches as mpatches
np.random.seed(222)
days = 365
tickets = np.random.poisson(15, days)
tickets = np.clip(tickets, 0, 40)
ticket_levels = np.digitize(tickets, bins=[0, 8, 15, 22, 30, 40]) - 1
weeks = 53
data = np.zeros((7, weeks))
for i, val in enumerate(ticket_levels):
week = i // 7
day = i % 7
if week < weeks:
data[day, week] = val
colors = ['#ffffff', '#f0fdf4', '#bbf7d0', '#4ade80', '#16a34a', '#14532d']
cmap = LinearSegmentedColormap.from_list('tickets', colors, 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=5)
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('Support Ticket Volume - Daily Trends', fontsize=16, color='#111827', 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, ['<8', '8-15', '15-22', '22-30', '30-40', '40+'])]
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(0, -0.15), ncol=6,
fontsize=8, facecolor='white', edgecolor='#d1d5db', labelcolor='#374151')
total = int(np.sum(tickets))
avg = np.mean(tickets)
ax.annotate(f'Total Tickets: {total:,} | Avg: {avg:.1f}/day', xy=(0.98, 1.1), xycoords='axes fraction',
fontsize=10, color='#16a34a', ha='right', fontweight='bold')
plt.tight_layout()
plt.subplots_adjust(bottom=0.25)
plt.show()
Library
Matplotlib
Category
Time Series
More Calendar Heatmap examples
☕