About
What am I seeing?
Octolamp is a data visualization tool for viewing United Kingdom local election results. It started as what I thought would be a simple holiday project to build a web app for my politics-obsessed brother, but eventually grew to be a lot bigger. If you're curious about how it works under the hood, check out the relevant page on my website. If you're confused about how local government works, check out the explanation page.
Clicking on an area on the map will pull up the council composition following the election in the year selected by the year slider. Because local-government is multi-tier, there are options to change the tier you are viewing and filter councils by certain properties.
Terminology
| Code |
Name |
Color |
Notes |
| CON |
Conservative |
|
|
| LAB |
Labour |
|
|
| LD |
Liberal Democrat |
|
|
| REF |
Reform UK |
|
|
| GRN |
Green |
|
|
| SNP |
Scottish National Party |
|
|
| PC |
Plaid Cymru |
|
|
| UKIP |
UK Independence Party |
|
|
| NOC |
No overall control |
|
|
| IND |
Independent |
|
Only used for wards. |
| OTH |
Other party |
|
Only used for wards. |
OTH |
Other party or independent |
|
Non-ward data groups them together. |
| Term |
Definition |
| GAIN |
Won control of a council from another party's control or no overall control. |
| HOLD |
No change to council control. |
| FLIP |
Won control of a council from another party's control. Only used as a filter. |
| INIT |
The first election for the council, i.e. no gain/flip or hold. |
| INC |
The party that gained the most seats in the election. Only used as a highlight. |
| DEC |
The party that lost the most seats in the election. Only used as a highlight. |
Explanations of local government terms are available here. |
Notes
Wards
- The number of asterisks next to a party indicated the number of elected councillors.
- The percentages in the bar chart are the average percentage of the vote received per seat run for. Multi-member wards that have independents and parties running may look a little funny at first.
- Votes are aggregated by party group, not by specific party. The brown group "OTH" represents all non-independents from smaller parties, and the pink group "IND" represents all independents.
- Wards that elect councillors from more than one party group are colored in grey. Note that electing multiple councillors, only from smaller parties, would mean the ward is colored in brown.
Local authority districts (LADs)
- A dagger next to the year indicates a change to boundaries or seat count.
- If the change in seats per party don't add up to zero, it's because the total number of seats on the council have changed.
- Unlike ward data, the data published on LADs does not differentiate between independents and small parties. While pink indicates an independent for a ward, it indicates an independent or a member of a small party for LADs. I chose to use pink over brown because in practice there are more independents than small parties in local government.
- Be careful when looking at swing. Many councils do not elect their members all at once, and comparing one election cycle to the next may not necessarily be a fair comparison if they involved different wards. Octolamp currently does not support comparing exact tranches.
Omissions
Octolamp uses data adapted from spreadsheets published by the UK House of Commons Library. This data is not consistent and therefore some features are unavailable.
- Data on Northern Ireland, the City of London, and the Isles of Scilly is unavailable.
- There is no centralised source of data for vote counts for the local authority district (LAD) elections. The seat totals are shown, but it is not possible to show raw vote counts — I don't have that data.
- Ward-specific data (which does include vote counts) is only available from 2021 through 2024. It has not been published for other years (including 2025).
- There is (infuriatingly) no centralised source of data for the 2024 LAD elections, despite it existing in 2023 and 2025. I filed a Freedom of Information request, but it was denied, so I have manually collated the data for this.
- There were no elections held in 2020. All elections scheduled to be held in 2020 were held in 2021 instead.
One-offs
- 2025 has no data for Sheffield and Barnsley councils. This is because their boundaries were changed since the last election in 2024. Traditionally, boundary changes only go into effect after the inaugural set of elections for the new council, but in this instance the official maps have been updated to replace the old councils before any elections have been held.
- 2018–2021 have no data for Perth & Kinross and Fife councils. Similarly to above, this is because their boundaries changed before elections were held (in 2022).
- 2016–2019 have no data for Aylesbury Vale, Wycombe, Chiltern, and South Bucks. This is because they were last elected in 2015 — they were due to hold elections in 2019, but these did not take place once it was confirmed that the district councils would be abolished and replaced by Buckinghamshire Council, a unitary authority, in 2020.
- 2016–2019 have no data for Corby, Kettering, East Northamptonshire, Wellingborough, Northampton, and South Northamptonshire. This is because they were last elected in 2015 — they were due to hold elections in 2019, but these did not take place once it was confirmed in May 2019 that the district councils would be abolished and replaced two unitary authorities: North Northamptonshire Council, covering the first four councils, and West Northamptonshire Council, covering the latter two and Daventry (which held elections in 2018). These changes came into effect for the 2021 elections.
A word of warning
The data this project is built off of has had errors that I have had to fix. These include:
- The 2022 Welsh results using ward code W05001146 instead of W05001154. The former was, at the time of the election, an inactive ward for an entirely different area.
- An uncountable number of inconsistencies between when to use
& vs and, X on Y vs X-on-Y, St vs St., 's vs s.
- Misspelling "Woughton" as "Wroughton" and not providing a ward code to actually look up the correct name. (2023)
- Misspelling "Scarbrough & Seacroft", a ward in eastern Lincolnshire, as "Scarborough & Seacroft", depsite Scarborough being 100 miles north and in another county. (2023)
- Using the code E05013778 (Hampton) to refer to both Hampton and Hampton Wick, despite them being entirely different wards (the latter has code E05013780), and the fact that "Hampton Wick" is not even named that, but is called "Hampton Wick & South Teddington".
...this was parliamentary data I was using. All this is to say that while I have strong faith in the overall reliability of the data used, you may still find errors.