Sankey Diagram
Marketing Funnel Analysis
Customer journey through marketing stages from awareness to conversion and retention.
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.0004
# Awareness to Interest
draw_flow(ax, 0.5, 5, 2.5, 5, 10000*s, 10000*s, '#6CF527', 0.6)
# Interest split
draw_flow(ax, 3.5, 5.5, 5.5, 7, 5000*s, 5000*s, '#C82909', 0.6) # Lost
draw_flow(ax, 3.5, 4.5, 5.5, 4, 5000*s, 5000*s, '#27D3F5', 0.6) # Consider
# Consider to Convert
draw_flow(ax, 6.5, 4.5, 8.5, 6, 3000*s, 3000*s, '#F5B027', 0.6) # Eval only
draw_flow(ax, 6.5, 3.5, 8.5, 3, 2000*s, 2000*s, '#F5276C', 0.6) # Purchase
# Nodes
draw_node(ax, 0, 5, 0.6, 10000*s*1.1, '#6CF527', 'Awareness\n10K')
draw_node(ax, 3, 5, 0.6, 10000*s*1.1, '#27F5B0', 'Interest\n10K')
draw_node(ax, 6, 7, 0.6, 5000*s*1.3, '#C82909', 'Lost\n5K')
draw_node(ax, 6, 4, 0.6, 5000*s*1.3, '#27D3F5', 'Consider\n5K')
draw_node(ax, 9, 6, 0.6, 3000*s*1.5, '#F5B027', 'Evaluate\n3K')
draw_node(ax, 9, 3, 0.6, 2000*s*1.7, '#F5276C', 'Purchase\n2K')
ax.set_title('Marketing Funnel Conversion 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
☕