Area Chart

Funnel Stage Flow

Conversion funnel as flowing area.

Output
Funnel Stage Flow
Python
import matplotlib.pyplot as plt
import numpy as np

# Data - Conversion funnel
stages = ['Visitors', 'Signups', 'Activated', 'Paid', 'Retained']
values = [10000, 3500, 1800, 800, 450]
x = np.arange(len(stages))

# Figure - LIGHT THEME
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#ffffff')
ax.set_facecolor('#ffffff')

# Funnel as flowing area
colors = ['#4927F5', '#27D3F5', '#6CF527', '#F5B027', '#F5276C']
max_val = max(values)

for i, (val, color) in enumerate(zip(values, colors)):
    width = val / max_val
    ax.barh(i, width, height=0.7, color=color, alpha=0.8)
    ax.text(width + 0.02, i, f'{val:,}', va='center', ha='left', color='#1f2937', fontsize=11, fontweight='bold')
    if i > 0:
        conv_rate = (val / values[i-1]) * 100
        ax.text(width/2, i, f'{conv_rate:.0f}%', va='center', ha='center', color='white', fontsize=10, fontweight='bold')

# Styling
ax.set_yticks(x)
ax.set_yticklabels(stages)
ax.set_xlabel('Relative Volume', color='#1f2937', fontsize=11)
ax.set_title('Conversion Funnel Flow', color='#1f2937', fontsize=14, fontweight='bold', pad=15)
ax.tick_params(colors='#374151', labelsize=10)
ax.invert_yaxis()
for spine in ax.spines.values():
    spine.set_visible(False)
ax.set_xlim(0, 1.15)
ax.xaxis.set_visible(False)

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Basic Charts

Did this help you?

Support PyLucid to keep it free & growing

Support