Polar Chart
Supply Chain Risk Assessment
Polar radar visualizing supply chain risk factors across different vendor categories with threat level indicators.
Output
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
☕