Gauge Chart

Network Throughput Gauge

Bandwidth utilization monitor with cyan blue gradient

Output
Network Throughput Gauge
Python
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge, Circle, Polygon
import numpy as np

# Data
current_mbps = 780
max_mbps = 1000
value = (current_mbps / max_mbps) * 100

# Colors
bg_color = '#0a0a0f'
track_color = '#1a1a2e'
arc_color = '#27D3F5'
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')

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

# Value arc
value_pct = value / 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))

# Ticks with Mbps labels
labels = ['0', '250', '500', '750', '1G']
for i in range(5):
    pct = i / 4
    angle = np.radians(end_angle - pct * 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), labels[i],
            fontsize=10, color=dim_color, ha='center', va='center')

# Needle
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'))

# Hub
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))

# Text
ax.text(0, -0.22, f'{current_mbps}', fontsize=52, fontweight='bold', color=text_color, ha='center', va='center')
ax.text(0, -0.40, 'Mbps', fontsize=16, color=arc_color, ha='center', va='center', fontweight='600')
ax.text(0, -0.56, f'{value:.0f}% utilization', fontsize=12, color=dim_color, ha='center', va='center')
ax.text(0, 1.22, 'Network Throughput', 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