Error Bar Chart

ISP Speed Test Results

Internet service provider comparison showing real-world download and upload speeds.

Output
ISP Speed Test Results
Python
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)

# Internet speed data
providers = ['Comcast', 'AT&T', 'Verizon', 'Spectrum', 'Cox']
download = np.array([285, 245, 320, 265, 255])
upload = np.array([35, 28, 280, 32, 30])
download_err = np.array([45, 38, 52, 42, 40])
upload_err = np.array([8, 6, 42, 7, 6])

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5), facecolor='#ffffff')

for ax in [ax1, ax2]:
    ax.set_facecolor('#ffffff')

x = np.arange(len(providers))

# Download speeds
colors_dl = ['#27D3F5', '#276CF5', '#6CF527', '#4927F5', '#F5B027']
ax1.bar(x, download, yerr=download_err, capsize=5, color=colors_dl,
        edgecolor='#1f2937', error_kw={'ecolor': '#374151', 'elinewidth': 1.5})
ax1.axhline(y=250, color='#F5276C', linestyle='--', linewidth=1.5, 
            label='Advertised Speed', alpha=0.7)
ax1.set_xlabel('Provider', fontsize=10, color='#374151', fontweight='500')
ax1.set_ylabel('Download Speed (Mbps)', fontsize=10, color='#374151', fontweight='500')
ax1.set_title('Download Speeds', fontsize=12, color='#1f2937', fontweight='bold')
ax1.set_xticks(x)
ax1.set_xticklabels(providers, rotation=15, ha='right')
ax1.legend(facecolor='#f8fafc', edgecolor='#d1d5db', fontsize=9)
ax1.tick_params(colors='#6b7280', labelsize=9)
ax1.grid(True, axis='y', alpha=0.3, color='#d1d5db')

# Upload speeds
ax2.bar(x, upload, yerr=upload_err, capsize=5, color=colors_dl,
        edgecolor='#1f2937', error_kw={'ecolor': '#374151', 'elinewidth': 1.5})
ax2.set_xlabel('Provider', fontsize=10, color='#374151', fontweight='500')
ax2.set_ylabel('Upload Speed (Mbps)', fontsize=10, color='#374151', fontweight='500')
ax2.set_title('Upload Speeds', fontsize=12, color='#1f2937', fontweight='bold')
ax2.set_xticks(x)
ax2.set_xticklabels(providers, rotation=15, ha='right')
ax2.tick_params(colors='#6b7280', labelsize=9)
ax2.grid(True, axis='y', alpha=0.3, color='#d1d5db')

for ax in [ax1, ax2]:
    for spine in ax.spines.values():
        spine.set_color('#d1d5db')

plt.suptitle('ISP Speed Test Results', fontsize=14, color='#1f2937', 
             fontweight='bold', y=1.02)
plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Statistical

Did this help you?

Support PyLucid to keep it free & growing

Support