Sankey Diagram
HR Recruitment Funnel
Candidate flow through hiring stages from application to onboarding.
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='#374151', 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='#ffffff')
ax.set_facecolor('#ffffff')
s = 0.012
# Applications to screening
draw_flow(ax, 0.5, 5, 2.5, 5, 500*s, 500*s, '#F527B0', 0.6)
# Screening split
draw_flow(ax, 3.5, 5.5, 5.5, 7.5, 350*s, 350*s, '#C82909', 0.6) # Rejected
draw_flow(ax, 3.5, 4.5, 5.5, 4, 150*s, 150*s, '#27D3F5', 0.6) # Interview
# Interview outcomes
draw_flow(ax, 6.5, 4.5, 8.5, 6, 100*s, 100*s, '#F5B027', 0.6) # No offer
draw_flow(ax, 6.5, 3.5, 8.5, 3, 50*s, 50*s, '#6CF527', 0.6) # Hired
# Nodes
draw_node(ax, 0, 5, 0.6, 500*s*1.1, '#F527B0', 'Applied\n500')
draw_node(ax, 3, 5, 0.6, 500*s*1.1, '#4927F5', 'Screen\n500')
draw_node(ax, 6, 7.5, 0.6, 350*s*1.2, '#C82909', 'Rejected\n350')
draw_node(ax, 6, 4, 0.6, 150*s*1.5, '#27D3F5', 'Interview\n150')
draw_node(ax, 9, 6, 0.6, 100*s*1.5, '#F5B027', 'No Offer\n100')
draw_node(ax, 9, 3, 0.6, 50*s*2.5, '#6CF527', 'Hired\n50')
ax.set_title('HR Recruitment Pipeline Flow', fontsize=16, color='#1f2937', fontweight='bold', pad=20)
ax.set_xlim(-1, 10)
ax.set_ylim(0, 9)
ax.axis('off')
plt.tight_layout()
plt.show()
Library
Matplotlib
Category
Part-to-Whole
More Sankey Diagram examples
☕