Gauge Chart
Uptime SLA Compliance
Service level agreement tracking with lime green success theme
Output
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
More Gauge Chart examples
☕