teleo-codex/agents/rio/posts/figures/chart_05_megaround_share.py
m3taversal 495a710123 rio: add 8 original charts + embed in print edition, regenerate PDF
- 8 matplotlib charts generated from FRED, BEA, and primary 10-K data
- All chart Python scripts committed alongside PNGs for reproducibility
- Source data CSVs and BEA XLS pulled directly from public APIs
- Print MD updated to embed images inline (was: text-only callouts)
- PDF regenerated via tectonic (1.4MB with all charts)

Corrections from v1 prose (verified against actual data):
- Finance share of corporate profits peak: 34.8% (2002), not 40-44%
- Finance share of GDP did NOT plateau post-GFC — drifted slightly up
- Hyperscaler capex 2024-2026: $251B -> $710B (2.8x, not 3x)

Data gaps flagged in chart captions:
- Philippon 130-year unit-cost series replaced with BEA 1997-2025
- Carta middle-bucket percentages estimated from blog text
- Mega-round pre-2018 shares interpolated from round counts

Pentagon-Agent: Rio <244ba05f-3aa3-4079-8c59-6d68a77c76fe>
2026-05-18 16:01:24 +01:00

84 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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, 20152025",
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}%")