London's six fare zones don't physically exist, they only have meaning at stations. It's not possible to draw a line round the edge of zone 4 in real life, only on a tube map, because no definitive dividing line exists.
But someone had to allocate all the stations in the first place so there is a rationale, evolved over the years, to help define how much your journey ought to cost. And although no official zonal map exists TfL do have a datafile which allocates every neighbourhood in London to one of the six zones. Here's what it looks like if you plot the dots and colour them in.
Note: consider these 'nominal' fare zones based on census output areas. In reality the fare zones used by TfL are defined by certain stations or points along each lines. Therefore official fare zone areas do not exist. However, this is what you get when you use the data.london.gov.uk output areas to fare zones file.
Note that only areas where people live and work are coloured. Parks and woodland remain blank, so for example the enormous white space to the southwest is Richmond Park.
The end result is a squished collection of concentric rings, fairly regular in the centre but increasingly anomalous as they extend towards the boundary because Greater London isn't an ellipse.
Zone 1 covers central London and was formed during the aftermath of the GLC's Fares Fair campaign in the 1980s. It stretches from Notting Hill to Aldgate (west to east) and King's Cross to Vauxhall (north to south). It's about five miles wide and three miles deep. Very little of zone 1 is south of the Thames. The fact it's bean-shaped rather than circular influences all the zones that follow.
Zone 2 was meant to extend three miles from the edge of zone 1. It pretty much does but constricts to two miles around Putney and extends to four towards Lewisham. Mostly by coincidence the northern edge of zone 2 roughly follows the official dividing line between Inner and Outer London. Hammersmith & Fulham, Kensington & Chelsea, Westminster, Camden, Islington, Hackney and Tower Hamlets are all (almost exclusively) zone 1/2 boroughs.
Zone 3 notionally extends another three miles beyond zone 2. Its narrowest point is probably around Willesden in Brent and its widest point at Beckton in Newham. Haringey and Newham are almost exclusively zone 3 boroughs. The map does not reflect the eastward nudge introduced in 2016 when Stratford and other stations in the Lower Lea Valley were blurred into an overlapping zone 2/3.
Zone 4 is supposed to extend another three miles beyond zone 3, but the edge is now somewhat irregular. Zone 4 is thinnest to the west of Thornton Heath where zone 3 simply dissolves into zone 5. Zone 4 is thickest along the eastern Central line because the entire Hainault Loop was placed in the same zone in 2007 (for political not geographical reasons), making Redbridge the only proper zone 4 borough. Zone 4 also touches the edge of London at Worcester Park between Kingston and Sutton (this being the closest point on the Greater London boundary to Charing Cross).
Zone 5 is the first zone to look distinctly irregular. It's at its narrowest around Bexleyheath, Norbiton and Cockfosters and at its widest in northwest and southeast London. Harrow, Barking & Dagenham and Sutton are predominantly zone 5 boroughs.
Zone 6 was split off from zone 5 in 1991 so doesn't follow the "three miles further out" rationale. It covers a lot of rural London (as you can see from the lack of dots on the map) as well as large towns like Uxbridge, Orpington and Romford. Hillingdon and Havering are predominantly zone 6 boroughs, being the farthest western and eastern slices of the capital. Zone 6 is a lot thinner across north London than it is across south London.
The irregularity of fare zones matters because some parts of London are getting a much better deal than others. The luckiest souls are those in Redbridge on the Central line - ten miles from zone 1 but only paying zone 4 prices. Towns beyond the Greater London boundary in Essex fare even better. Meanwhile the most unfortunate residents are those in Kingston to the southwest of London where zone 6 bends deliberately inwards forcing everyone to pay more. Note how one side of Richmond Park is in zone 3 and the other is in zone 6, skipping zones 4 and 5 altogether.
It can't be fair that Epping and Kingston are both in zone 6 but one's twice as far away as the other. It can't be fair that zone 6 kicks in quicker if you go south than if you go east or west. It can't be fair that Richmond's closer to central London than Beckton but one's in zone 4 and the other's in zone 3. But it's no good sitting there with your angry hat on because none of this is likely to change.
Zones 4, 5 and 6 can't be nudged outwards in Richmond and Kingston because that'd significantly reduce fare revenue. Likewise zones 4, 5 and 6 can't be tugged inwards in Redbridge because that'd suddenly make commuting a lot more expensive. If the zones weren't right in the first place it's nigh impossible to change them now, however much an armchair expert might disagree. The anomalies on the fare zone map play out every day, but my word don't the rings look pretty.
Boroughs by zone 1: City of London 1/2: Camden, Hackney, Islington, Kensington and Chelsea, Tower Hamlets, Westminster 1/2/3: Lambeth, Southwark 2: Hammersmith and Fulham 2/3: Wandsworth 2/3/4: Brent, Lewisham 3: Haringey, Newham 3/4: Greenwich, Merton 3/4/5: Barnet, Ealing, Waltham Forest 3/4/5/6: Croydon, Hounslow, Richmond upon Thames 4: Redbridge 4/5: Barking and Dagenham 4/5/6: Bexley, Bromley, Enfield, Harrow, Kingston upon Thames, Sutton 5/6: Hillingdon 6: Havering