Polar Chart

Supply Chain Risk Assessment

Polar radar visualizing supply chain risk factors across different vendor categories with threat level indicators.

Output
Supply Chain Risk Assessment
Python
import matplotlib.pyplot as plt
import numpy as np

# Risk categories
categories = ['Supplier\nStability', 'Logistics', 'Quality\nControl', 'Cyber\nSecurity', 
              'Compliance', 'Cost\nVolatility', 'Geo-Political', 'Capacity']
current_risk = [72, 58, 85, 45, 78, 62, 38, 70]
threshold = [60, 60, 60, 60, 60, 60, 60, 60]

# Prepare angles
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
risk_plot = current_risk + [current_risk[0]]
threshold_plot = threshold + [threshold[0]]
angles += angles[:1]

# Dark theme
fig, ax = plt.subplots(figsize=(10, 10), subplot_kw=dict(polar=True), facecolor='#020B14')
ax.set_facecolor('#020B14')

# Risk threshold line
ax.plot(angles, threshold_plot, color='#F5276C', linestyle='--', linewidth=2, alpha=0.8, label='Risk Threshold')
ax.fill(angles, threshold_plot, color='#F5276C', alpha=0.1)

# Current risk with glow
for lw, alpha in [(14, 0.06), (10, 0.12), (6, 0.25)]:
    ax.plot(angles, risk_plot, color='#27D3F5', linewidth=lw, alpha=alpha)
ax.plot(angles, risk_plot, color='#27D3F5', linewidth=2.5, label='Current Risk')
ax.fill(angles, risk_plot, color='#27D3F5', alpha=0.2)

# Highlight high-risk points
for angle, val in zip(angles[:-1], current_risk):
    color = '#F5276C' if val < 60 else '#27F5B0'
    ax.scatter(angle, val, color=color, s=120, zorder=5, edgecolors='white', linewidth=1.5)

# Styling
ax.set_ylim(0, 100)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories, fontsize=10, color='white', fontweight='500')
ax.set_yticks([25, 50, 75, 100])
ax.set_yticklabels(['25', '50', '75', '100'], fontsize=9, color='#888888')

ax.spines['polar'].set_color('#555555')
ax.grid(color='#555555', linewidth=0.8, alpha=0.7)
ax.tick_params(colors='#888888')

ax.set_title('Supply Chain Risk Analysis', fontsize=16, color='white', fontweight='bold', pad=25)
ax.legend(loc='upper right', bbox_to_anchor=(1.25, 1.1), frameon=False, labelcolor='white')

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Part-to-Whole

Did this help you?

Support PyLucid to keep it free & growing

Support