Sankey Diagram
Corporate Budget Allocation
Financial flow from revenue through departmental budgets to specific expense categories.
Output
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
More Sankey Diagram examples
☕