Gauge Chart

Uptime SLA Compliance

Service level agreement tracking with lime green success theme

Output
Uptime SLA Compliance
Python
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge, Circle, Polygon
import numpy as np

sla = 99.95
target = 99.9
bg_color = '#0a0a0f'
track_color = '#1a1a2e'
arc_color = '#6CF527'
text_color = '#ffffff'
dim_color = '#6b7280'

start_angle, end_angle = -30, 210
sweep = end_angle - start_angle

fig, ax = plt.subplots(figsize=(10, 8), facecolor=bg_color)
ax.set_facecolor(bg_color)
ax.set_xlim(-1.4, 1.4)
ax.set_ylim(-0.5, 1.4)
ax.set_aspect('equal')
ax.axis('off')

ax.add_patch(Wedge((0, 0), 1.0, start_angle, end_angle, width=0.15, facecolor=track_color, edgecolor='none'))

sla_ang = np.radians(end_angle - (target/100) * sweep)
ax.plot([0.86*np.cos(sla_ang), 1.02*np.cos(sla_ang)], [0.86*np.sin(sla_ang), 1.02*np.sin(sla_ang)], color='#4a4a5a', linewidth=2)

value_pct = sla / 100
value_angle = start_angle + (1 - value_pct) * sweep
for r_off, w_off, alpha in [(0.05, 0.06, 0.1), (0.03, 0.04, 0.2), (0.015, 0.02, 0.4), (0, 0, 0.95)]:
    ax.add_patch(Wedge((0, 0), 1.0 + r_off, value_angle, end_angle, width=0.15 + w_off, facecolor=arc_color, edgecolor='none', alpha=alpha))

labels = ['99.0', '99.5', '99.9', '100']
positions = [0.99, 0.995, 0.999, 1.0]
for pos, label in zip(positions, labels):
    angle = np.radians(end_angle - pos * sweep)
    ax.plot([0.87*np.cos(angle), 0.80*np.cos(angle)], [0.87*np.sin(angle), 0.80*np.sin(angle)], color='#3a3a4a', linewidth=2)
    ax.text(0.72*np.cos(angle), 0.72*np.sin(angle), label, fontsize=9, color=dim_color, ha='center', va='center')

needle_angle = np.radians(end_angle - value_pct * sweep)
nx, ny = 0.62 * np.cos(needle_angle), 0.62 * np.sin(needle_angle)
perp = needle_angle + np.pi/2
bx1, by1 = 0.035 * np.cos(perp), 0.035 * np.sin(perp)

for scale, alpha in [(1.6, 0.1), (1.3, 0.2)]:
    ax.add_patch(Polygon([(nx*scale, ny*scale), (bx1*2, by1*2), (-bx1*2, -by1*2)], facecolor=arc_color, edgecolor='none', alpha=alpha))
ax.add_patch(Polygon([(nx, ny), (bx1, by1), (-bx1, -by1)], facecolor='#ffffff', edgecolor='none'))

for r, c, a in [(0.11, arc_color, 0.3), (0.09, arc_color, 0.5), (0.07, bg_color, 1), (0.05, arc_color, 0.9)]:
    ax.add_patch(Circle((0, 0), r, facecolor=c, edgecolor='none', alpha=a))

ax.text(0, -0.22, f'{sla}%', fontsize=50, fontweight='bold', color=text_color, ha='center', va='center')
ax.text(0, -0.40, 'UPTIME', fontsize=13, color=dim_color, ha='center', va='center', fontweight='500')
compliance = 'COMPLIANT' if sla >= target else 'BREACH'
ax.text(0, -0.56, f'SLA: {compliance}', fontsize=13, color=arc_color, ha='center', va='center', fontweight='bold')
ax.text(0, 1.22, 'SLA Compliance', fontsize=18, fontweight='bold', color=text_color, ha='center', va='center')

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Part-to-Whole

Did this help you?

Support PyLucid to keep it free & growing

Support