Earth Data School/Area-weighting (cos-latitude)
Lesson 3.4 · 9 of 17

Area-weighting (cos-latitude)

A one-line fix that separates an honest spatial average from a wrong one. Skip it and your 'global mean temperature' quietly over-counts the poles.

In one lineOn a normal lat/lon grid, cells near the poles cover far less ground than cells at the equator. A plain average treats them as equal — so weight each cell by cos(latitude), its true share of area.

The trap

Climate grids are usually a regular lat/lon mesh — say 0.25° × 0.25°. That sounds uniform, but the Earth is a sphere: meridians (lines of longitude) converge toward the poles. A 0.25° cell at the equator is a ~28 × 28 km square; the same 0.25° cell at 60° latitude is only ~14 km wide — half the ground. At 80° it's a sliver.

So if you just average every cell equally (field.mean()), you give a tiny patch of Arctic the same vote as a big patch of tropics. With thousands of skinny polar cells, that bias is real — it can shift a "global mean" by a noticeable amount and exaggerate polar swings.

The fix

Weight each cell by how much area it actually covers. That area is proportional to the cosine of its latitude (cos 0° = 1 at the equator, cos 90° = 0 at the pole):

weighted mean = Σ(value × cos(lat)) / Σ(cos(lat))

That's it. Every honest spatial mean on this site — including the ERA5 trends on /verify — uses it.

Play with it

Each row is a latitude band; its drawn width is its true ground area (cos lat) — see them shrink toward the pole. Add a polar anomaly and watch the naïve average chase it while the area-weighted average barely moves.

naïve mean (every cell equal): area-weighted mean: error from skipping it:

Do it yourself

editable · runs in your browser

Two footnotes for later: cos-latitude is the right weight for a regular lat/lon grid; other projections (equal-area grids, EASE-Grid) bake the area in differently. And for a small region the effect is tiny — it matters most for wide or high-latitude domains.