How to Chart Wind Turbine Height and Rotor Size by Year

On this page

Problem statement

Onshore wind turbines have grown every few years: taller towers reach steadier wind, longer blades sweep more of it, and generators have been scaled up to match. The US Wind Turbine Database records hub height, rotor diameter, total tip height and rated capacity for nearly every turbine, with the year its project came online, so the growth can be charted by year. Three things distort that chart if left in: offshore turbines, which are a different machine; repowered turbines, which carry a new rotor under the project's original year; and the turbines from before 2000, most of which have already been taken down. This page charts the medians for onshore turbines in their original form.

Quick answer

Keep onshore turbines that were never retrofitted, then take the median of each size column by project year:

on = wt[(wt.t_offshore == 0) & (wt.t_retrofit == 0)]
y = on.groupby("p_year").agg(turbines=("case_id", "size"), kw=("t_cap", "median"), hub_m=("t_hh", "median"),
                             rotor_m=("t_rd", "median"), tip_m=("t_ttlh", "median"))
print(y.loc[[2000, 2005, 2010, 2015, 2020, 2025]].to_string())
        turbines      kw  hub_m  rotor_m  tip_m
p_year                                         
2000.0        28   660.0   65.0     47.0   88.4
2005.0       762  1500.0   70.0     77.0  110.9
2010.0      2369  1600.0   80.0     82.5  121.3
2015.0      4295  2000.0   80.0    100.0  131.4
2020.0      6229  2750.0   89.0    127.0  152.4
2025.0      3036  3400.0  101.0    140.0  177.4

The median turbine of a 2025 project is rated at 3,400 kW, on a 101 m hub, with a 140 m rotor and a tip 177.4 m above the ground. Twenty years earlier the median was 1,500 kW, 70 m, 77 m and 110.9 m. Capacity has more than doubled, but the rotor grew fastest: its diameter rose by 82% while the hub rose by 44%. The years between are what the chart shows.

Line chart from 2000 to 2026 of median tip height rising from about 88 to 180 m, rotor diameter from 47 to 150 m and hub height from 65 to about 105 m, with rated capacity rising from under 1 to over 4 MW. Line chart from 2000 to 2026 of median tip height rising from about 88 to 180 m, rotor diameter from 47 to 150 m and hub height from 65 to about 105 m, with rated capacity rising from under 1 to over 4 MW.
Median size of onshore turbines never repowered, by project year.

Which turbines to chart

1. Leave out offshore turbines

off = wt[wt.t_offshore == 1]
print(off.groupby("p_name")[["t_cap", "t_rd", "t_hh"]].median().to_string())
                                  t_cap   t_rd   t_hh
p_name                                               
Block Island                     6000.0  150.0  106.0
Coastal Virginia Offshore Wind  14000.0  222.0  108.0
Empire Wind I                       NaN    NaN    NaN
Revolution Wind                 11000.0  200.0  133.0
South Fork Wind Farm            11000.0  200.0  140.0
Sunrise Wind                    11000.0  200.0    NaN
Vineyard Wind                   13000.0  220.0  137.5
unknown NA                          NaN    NaN    NaN

The offshore machines are a different class: 11 to 14 MW with rotors of 200 to 222 m on most projects, against 3.4 MW and 140 m onshore. There are only a few hundred of them, but in the latest years they would pull the medians upward and make the onshore trend look steeper than it is. Two projects are too new to have specifications yet.

2. Leave out repowered turbines

for label, d in [("all turbines", wt[wt.t_offshore == 0]), ("never retrofitted", on)]:
    print(f"{label:>17}: median rotor of 2008 projects {d[d.p_year == 2008].t_rd.median():.1f} m")
     all turbines: median rotor of 2008 projects 82.0 m
never retrofitted: median rotor of 2008 projects 77.0 m

With repowered turbines left in, the median rotor of 2008 projects is 82 m. Without them it is 77 m, the rotor those projects were built with. A third of the turbines from 2008 projects have since had new rotors fitted, and the file records the new size under the old year.

3. Old years are the survivors

print(f"turbines in the file from projects before 2000: {on[on.p_year < 2000].shape[0]:,}; from 2000 on: {on[on.p_year >= 2000].shape[0]:,}")
turbines in the file from projects before 2000: 2,660; from 2000 on: 65,499

Projects from before 2000 account for 2,660 turbines in the file and projects from 2000 on for 65,499. The early years' medians come from the few machines still standing, and decommissioned turbines are removed from the database, so the chart starts in 2000 and the first years are the least representative.

Bars of turbines in the file by project year: a few hundred a year before 2000, then thousands a year from the mid-2000s, peaking at over 6,000 for 2020. Bars of turbines in the file by project year: a few hundred a year before 2000, then thousands a year from the mid-2000s, peaking at over 6,000 for 2020.
Turbines by project year: the survivors of each year.

Rotor against generator, and the tallest

The data used on this page

The US Geological Survey's US Wind Turbine Database, version 9.1 of 28 September 2026 (Hoen and others, doi:10.5066/F7TX3DN0), public domain, saved on this site on 19 October 2026 because USGS replaces the file every quarter.

from pathlib import Path
import zipfile

import pandas as pd
import requests

Path("data").mkdir(exist_ok=True)
# USGS US Wind Turbine Database v9.1 (28 September 2026) with its metadata and changelog, Census 2024 cartographic
# boundary counties and the EIA-860 2025 wind table. Saved 19 October 2026: USGS replaces the file every quarter.
# Live: https://energy.usgs.gov/uswtdb/assets/data/uswtdbCSV.zip
ARCHIVE = "usgs-uswtdb-v9-1-2026-10-19.zip"
if not Path(f"data/{ARCHIVE}").exists():
    Path(f"data/{ARCHIVE}").write_bytes(requests.get(f"https://data.spatialworkflow.io/{ARCHIVE}", timeout=600).content)
Z = zipfile.ZipFile(f"data/{ARCHIVE}")
wt = pd.read_csv(Z.open("uswtdb_V9_1_20260928.csv"), dtype={"t_fips": str})
print(f"US Wind Turbine Database v9.1: {len(wt):,} turbines, {wt.p_year.min():.0f} to {wt.p_year.max():.0f}")
US Wind Turbine Database v9.1: 77,839 turbines, 1982 to 2026

Example 1: specific power

on = on.assign(w_per_m2=on.t_cap * 1000 / on.t_rsa, rotor_to_hub=on.t_rd / on.t_hh)
print(on.groupby("p_year")[["w_per_m2", "rotor_to_hub"]].median().loc[[2005, 2010, 2015, 2020, 2025]].round(2).to_string())
        w_per_m2  rotor_to_hub
p_year                        
2005.0    322.12          0.96
2010.0    322.12          1.03
2015.0    251.07          1.25
2020.0    222.61          1.43
2025.0    222.61          1.43

The median specific power fell from 322 W/mΒ² in 2005 and 2010 to 223 W/mΒ² in 2020 and 2025, and the rotor grew from about as wide as the tower was tall to 1.43 times the hub height. Manufacturers lengthened blades faster than they raised generator ratings, so that turbines would produce more from the moderate winds of the plains.

Specific power, the rated capacity divided by the area the rotor sweeps, measures how big the rotor is for its generator. A lower value means a turbine that reaches its rated output in lighter wind and runs closer to it for more of the year.

Line of median specific power by project year, about 380 W per square metre in the early 2000s, 322 from 2005 to 2010, then falling to about 220 from 2016 on. Line of median specific power by project year, about 380 W per square metre in the early 2000s, 322 from 2005 to 2010, then falling to about 220 from 2016 on.
Specific power by project year.

Example 2: the tallest turbines

print(on.nlargest(1, "t_ttlh")[["p_name", "t_state", "p_year", "t_model", "t_hh", "t_rd", "t_ttlh"]].to_string(index=False))
print(f"onshore turbines with a tip above 200 m: {(on.t_ttlh > 200).sum()}")
            p_name t_state  p_year  t_model  t_hh  t_rd  t_ttlh
Delta Wind Project      MS  2024.0 V150-4.5 136.0 150.0   210.9
onshore turbines with a tip above 200 m: 41

The tallest onshore turbines are Vestas V150-4.5 machines of the Delta Wind Project in Mississippi, online in 2024: a 136 m hub and a 150 m rotor give a tip of 210.9 m. 41 onshore turbines in the file reach above 200 m.