Sunburst Chart

Docker Image Layer Structure

Dark-themed sunburst chart showing Docker container image layer hierarchy from base image to application layers.

Output
Docker Image Layer Structure
Python
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(12, 10), facecolor='#0a0a0f')
ax.set_facecolor('#0a0a0f')

# Inner ring - Image layers
layer_sizes = [35, 25, 25, 15]
layer_labels = ['Base OS', 'Runtime', 'Dependencies', 'App Code']
layer_colors = ['#5314E6', '#27D3F5', '#F5B027', '#6CF527']

# Outer ring - Specific components
comp_sizes = [15, 12, 8, 10, 8, 7, 12, 8, 5, 8, 7]
comp_colors = ['#5314E6', '#7B4DFF', '#9C7AFF',
               '#27D3F5', '#5CE8FF', '#8CF2FF',
               '#F5B027', '#FFCC5C', '#FFD98C',
               '#6CF527', '#8FFF5C']

wedges_outer, _ = ax.pie(comp_sizes, radius=1, colors=comp_colors,
       wedgeprops=dict(width=0.3, edgecolor='#0a0a0f', linewidth=2))

wedges_inner, _ = ax.pie(layer_sizes, radius=0.7, colors=layer_colors,
       wedgeprops=dict(width=0.3, edgecolor='#0a0a0f', linewidth=2))

# Add layer labels
for i, (wedge, label) in enumerate(zip(wedges_inner, layer_labels)):
    ang = (wedge.theta2 - wedge.theta1) / 2 + wedge.theta1
    x = 0.55 * np.cos(np.radians(ang))
    y = 0.55 * np.sin(np.radians(ang))
    ax.text(x, y, label, ha='center', va='center', fontsize=10, 
            color='white', fontweight='bold')

centre_circle = plt.Circle((0, 0), 0.4, fc='#0a0a0f', ec='#334155', linewidth=2)
ax.add_artist(centre_circle)
ax.text(0, 0, 'Image\n1.2 GB', ha='center', va='center',
        fontsize=14, color='white', fontweight='bold')

# Legend
comp_labels = ['Ubuntu 22.04', 'System Libs', 'CA Certs', 'Python 3.11', 
               'Node 20', 'Configs', 'pip packages', 'npm modules', 
               'System deps', 'Source Code', 'Static Assets']
ax.legend(wedges_outer, comp_labels, loc='center left', bbox_to_anchor=(1.05, 0.5),
          fontsize=9, frameon=True, facecolor='#1e293b', edgecolor='#334155',
          labelcolor='white', title='Components', title_fontsize=10)

ax.set_title('Docker Image Layers', fontsize=18, color='#f8fafc',
             fontweight='bold', pad=20)

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Part-to-Whole

Did this help you?

Support PyLucid to keep it free & growing

Support