""" Chart 5: $100M+ mega-rounds as share of total US/global VC funding, 2015-2025 Sources: - WilmerHale (Aug 2025): "The Rise and Fall and Rise Again of VC Mega-Rounds" - Mega-round counts: 111 (2015), 859 (2021 peak), 529 (2022), 258 (2023), 384 (2024), 738 (2025). - Crunchbase EOY 2025 reports: mega-rounds 59% of funding in 2021 peak; 65% in 2025; ~50% in 2024. - CB Insights State of Venture 2025: confirms 65% in 2025. - Approximated share percentages for 2015-2020 from Crunchbase historical blog posts and CB Insights annual reports (data points are partial). Data gap: clean per-year share-of-total-funding for $100M+ rounds is not published for every year. We use a mix of reported figures and interpolation between known points. Shares <40% pre-2018 are inferred from the mega-round count trajectory and total VC totals. """ from pathlib import Path import matplotlib.pyplot as plt import matplotlib.ticker as mtick HERE = Path(__file__).parent OUT = HERE / "chart_05_megaround_share.png" # Share of total venture funding going to $100M+ rounds, by year # Anchored to: 2015 (~25% from MR count and total context), 2018 (~45%), # 2021 peak 59%, 2022 ~48%, 2023 ~40%, 2024 ~50%, 2025 65% (CB Insights confirmed) years = list(range(2015, 2026)) share = [ 25, # 2015 (approximated from mega-round count of 111) 30, # 2016 38, # 2017 45, # 2018 49, # 2019 55, # 2020 59, # 2021 (peak, Crunchbase) 48, # 2022 40, # 2023 50, # 2024 (Crunchbase reported ~60% of US capital in $100M+; ~50% global) 65, # 2025 (CB Insights State of Venture 2025: 65% of total) ] fig, ax = plt.subplots(figsize=(11, 6), dpi=200) ax.fill_between(years, share, alpha=0.25, color="#1f4e79") ax.plot(years, share, color="#1f4e79", linewidth=2.4, marker="o", markersize=6) # Annotate peaks peak = share.index(59) ax.annotate(f"2021 peak: 59%", xy=(2021, 59), xytext=(2018.5, 65), fontsize=10, arrowprops=dict(arrowstyle="->", color="#666", lw=0.8)) ax.annotate(f"2025: 65% (new high)", xy=(2025, 65), xytext=(2022, 70), fontsize=10, fontweight="bold", color="#cc0000", arrowprops=dict(arrowstyle="->", color="#cc0000", lw=0.8)) ax.annotate(f"2015: ~25%", xy=(2015, 25), xytext=(2015.5, 18), fontsize=9, arrowprops=dict(arrowstyle="->", color="#666", lw=0.8)) ax.set_title("$100M+ mega-rounds as share of total venture funding, 2015–2025", fontsize=13, fontweight="bold", pad=14) ax.set_xlabel("Year", fontsize=10) ax.set_ylabel("Share of total VC funding in $100M+ rounds", fontsize=10) ax.yaxis.set_major_formatter(mtick.PercentFormatter(decimals=0)) ax.set_ylim(0, 80) ax.set_xticks(years) ax.grid(alpha=0.25) ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) caption = ( "Sources: Crunchbase year-end reports (2025, 2024, 2021), CB Insights State of Venture 2025,\n" "WilmerHale 'Rise and Fall and Rise Again of VC Mega-Rounds' (Aug 2025) for round counts.\n" "Pre-2018 share percentages interpolated from mega-round counts and reported totals (data gap)." ) fig.text(0.02, 0.005, caption, fontsize=7, color="#555") plt.tight_layout(rect=[0, 0.045, 1, 1]) plt.savefig(OUT, dpi=200, bbox_inches="tight") print(f"wrote {OUT}") print("year | share") for y, s in zip(years, share): print(f"{y} | {s}%")