Sankey Diagram

Corporate Budget Allocation

Financial flow from revenue through departmental budgets to specific expense categories.

Output
Corporate Budget Allocation
Python
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.path import Path

def draw_flow(ax, x0, y0, x1, y1, w0, w1, color, alpha=0.6):
    cx = (x0 + x1) / 2
    verts = [
        (x0, y0 + w0/2), (cx, y0 + w0/2), (cx, y1 + w1/2), (x1, y1 + w1/2),
        (x1, y1 - w1/2), (cx, y1 - w1/2), (cx, y0 - w0/2), (x0, y0 - w0/2),
        (x0, y0 + w0/2)
    ]
    codes = [Path.MOVETO] + [Path.CURVE4]*3 + [Path.LINETO] + [Path.CURVE4]*3 + [Path.CLOSEPOLY]
    ax.add_patch(mpatches.PathPatch(Path(verts, codes), fc=color, alpha=alpha, ec='none'))

def draw_node(ax, x, y, w, h, color, label):
    ax.add_patch(mpatches.FancyBboxPatch((x-w/2, y-h/2), w, h, boxstyle="round,pad=0.02",
                                          fc=color, ec='white', lw=1.5))
    ax.text(x, y, label, ha='center', va='center', fontsize=8, color='white', fontweight='bold')

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

s = 0.0012

# Revenue to departments
draw_flow(ax, 0.5, 5, 2.5, 7, 2000*s, 2000*s, '#F54927', 0.7)
draw_flow(ax, 0.5, 5, 2.5, 5, 1500*s, 1500*s, '#27D3F5', 0.7)
draw_flow(ax, 0.5, 5, 2.5, 3, 1000*s, 1000*s, '#6CF527', 0.7)
draw_flow(ax, 0.5, 5, 2.5, 1.5, 500*s, 500*s, '#F5B027', 0.7)

# Nodes
draw_node(ax, 0, 5, 0.6, 5000*s*1.2, '#F5276C', 'Revenue\n$5M')
draw_node(ax, 3, 7, 0.6, 2000*s*1.3, '#F54927', 'Operations\n$2M')
draw_node(ax, 3, 5, 0.6, 1500*s*1.4, '#27D3F5', 'R&D\n$1.5M')
draw_node(ax, 3, 3, 0.6, 1000*s*1.5, '#6CF527', 'Marketing\n$1M')
draw_node(ax, 3, 1.5, 0.6, 500*s*2, '#F5B027', 'Admin\n$0.5M')

ax.set_title('Corporate Budget Allocation Flow', fontsize=16, color='white', fontweight='bold', pad=20)
ax.set_xlim(-1, 4)
ax.set_ylim(0, 9)
ax.axis('off')
plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Part-to-Whole

Did this help you?

Support PyLucid to keep it free & growing

Support