Skip to main content

Berlin Data Stories

Berlin in Squares

Twelve districts, nine elections since 2011, one square per election. You can adjust every example yourself.

  1. One square, one election
  2. The threshold
  3. The order
  4. Non-voters
  5. One district over time
  6. All districts, all elections

Twenty attempts

Honestly: election charts bore me. Bars, pies, arrows going up and down. I wanted something you can hang on the wall and still read.

That turned into 20 rounds of sketches. The first ones were charts, just prettier. Then I went looking for ideas in art history, with Richter, Albers, Mondrian and Rothko (Rothko: not my thing at all). I mixed party colours until everything looked like terrible mud. There was a knitted band with holes, an advertising pillar, a mobile after Calder and gummy bears (bear … Berlin … you get the point), prompted by Doug McCune’s 3D-printed election sculpture. None of them was really good!

What finally moved me on was “American Democracy” by PSJM: every US presidential election as its own strictly flat picture. I didn’t want to copy it, but I liked the rigour. What was left was a simple rule. One square per election, every block as big as its share of the vote, every party always in the same place. The number sits in the block, as big as it fits.

Mostly I learned one thing: as soon as people should read the numbers exactly, every idea turns back into a chart. So the square is one too. A pretty nice one, I think.

Three places to look

One note first: every square lumps all parties under 5% into one grey block, together with the minor parties the data calls “others”. Chapter 2 shows how that works.

  • The Pirates in 2011. Over 5% in all twelve districts, 14.7% in Friedrichshain-Kreuzberg. Five years later they are at 1.7% across Berlin and vanish into the grey. Pirates in all districts
  • Who slips into the grey. In the 2013 Bundestag election the AfD sat in the grey in Berlin with 4.9%, today it has its own block everywhere. In the 2023 House of Representatives election the FDP vanished into the grey with 4.6%, in 2026 the BSW with 4.7%. FDP in all districts
  • Friedrichshain-Kreuzberg 2026. Die Linke gets 44%. That is the biggest block of all districts and elections. See the district over time

One square, one election

This is Friedrichshain-Kreuzberg in the 2026 House of Representatives election. Every coloured block is a party, as big as its share of the vote.

Where the blocks sit follows a rule: the first one cuts off a piece vertically, the second one horizontally, always taking turns. That gives every party its fixed place.

Friedrichshain-Kreuzberg, House of Representatives 2026
PartyShare
AfD6.0%
CDU8.8%
Greens20.7%
The Left44.2%
SPD9.5%
Grey, all parties below 5%10.7%
Turnout77.3%
2026 Friedrichshain-Kreuzberg, House of Representatives Turnout 77.3% Grey 11%: BSW 3.8%, FDP 1.6%, Animal Protection Party 1.3% and other small parties.

The threshold

Parties below the threshold end up in the grey block. Drag the slider: blocks disappear or appear.

At 0% every party gets its own block. The line under the square names what is inside the grey.

5%
Parties with fewer votes than set here fall into the grey block.
Friedrichshain-Kreuzberg, House of Representatives 2026
PartyShare
AfD6.0%
CDU8.8%
Greens20.7%
The Left44.2%
SPD9.5%
Grey, all parties below 5%10.7%
Turnout77.3%
2026 Friedrichshain-Kreuzberg, House of Representatives Turnout 77.3% Grey 11%: BSW 3.8%, FDP 1.6%, Animal Protection Party 1.3% and other small parties.

The order

Fixed places means: every party sits in the same spot in every square. That way you see change at a glance.

Sorted by size, every party moves around from election to election. Switch over and compare 2016 with 2026.

Parties
Every party sits in the same spot in every square. The biggest party comes first. Places change from election to election.
Friedrichshain-Kreuzberg, House of Representatives 2016
PartyShare
AfD6.4%
CDU7.8%
Greens28.4%
The Left23.4%
SPD18.2%
Grey, all parties below 5%15.8%
Turnout68.5%
2016 Friedrichshain-Kreuzberg, House of Representatives Turnout 68.5% Grey 16%: FDP 3.9%, Pirates 3.1%, Animal Protection Party 1.5% and other small parties.
Friedrichshain-Kreuzberg, House of Representatives 2026
PartyShare
AfD6.0%
CDU8.8%
Greens20.7%
The Left44.2%
SPD9.5%
Grey, all parties below 5%10.7%
Turnout77.3%
2026 Friedrichshain-Kreuzberg, House of Representatives Turnout 77.3% Grey 11%: BSW 3.8%, FDP 1.6%, Animal Protection Party 1.3% and other small parties.

Non-voters

Here the square stands for everyone eligible to vote. The empty area on the right is the people who didn’t vote. Corner marks show the whole square.

Switch the non-voters off and the square stands for valid votes only again, like in all the other examples.

Non-voters The square then stands for everyone eligible to vote. Anyone who didn't vote stays empty space.
Friedrichshain-Kreuzberg, House of Representatives 2026
PartyShare
AfD6.0%
CDU8.8%
Greens20.7%
The Left44.2%
SPD9.5%
Grey, all parties below 5%10.7%
Turnout77.3%
2026 Friedrichshain-Kreuzberg, House of Representatives Turnout 77.3% Grey 11%: BSW 3.8%, FDP 1.6%, Animal Protection Party 1.3% and other small parties.

One district over time

Pick a district and an election. At the top the square glides from election to election, below it all elections sit side by side.

Election
Parties
Every party sits in the same spot in every square. The biggest party comes first. Places change from election to election.
Motion Stops the gliding square. The row below stays put.
Friedrichshain-Kreuzberg, House of Representatives 2011
PartyShare
CDU8.4%
Greens30.3%
The Left13.0%
Pirates14.7%
SPD23.9%
Grey, all parties below 5%9.8%
Turnout62.2%
2011 Friedrichshain-Kreuzberg, House of Representatives Turnout 62.2% Grey 10%: Animal Protection Party 1.2%, FDP 1.0% and other small parties.
  1. Friedrichshain-Kreuzberg, House of Representatives 2011
    PartyShare
    CDU8.4%
    Greens30.3%
    The Left13.0%
    Pirates14.7%
    SPD23.9%
    Grey, all parties below 5%9.8%
    Turnout62.2%
    2011 Turnout 62.2% Grey 10%: Animal Protection Party 1.2%, FDP 1.0% and other small parties.
  2. Friedrichshain-Kreuzberg, House of Representatives 2016
    PartyShare
    AfD6.4%
    CDU7.8%
    Greens28.4%
    The Left23.4%
    SPD18.2%
    Grey, all parties below 5%15.8%
    Turnout68.5%
    2016 Turnout 68.5% Grey 16%: FDP 3.9%, Pirates 3.1%, Animal Protection Party 1.5% and other small parties.
  3. Friedrichshain-Kreuzberg, House of Representatives 2021
    PartyShare
    CDU7.6%
    Greens32.3%
    The Left23.6%
    SPD15.1%
    Grey, all parties below 5%21.4%
    Turnout78.8%
    2021 Turnout 78.8% Grey 21%: FDP 4.8%, AfD 3.1%, Animal Protection Party 1.7% and other small parties.
  4. Friedrichshain-Kreuzberg, House of Representatives 2023
    PartyShare
    CDU13.4%
    Greens33.5%
    The Left21.1%
    SPD14.6%
    Grey, all parties below 5%17.4%
    Turnout64.5%
    2023 Turnout 64.5% Grey 17%: AfD 3.7%, FDP 3.3%, Animal Protection Party 2.0% and other small parties.
  5. Friedrichshain-Kreuzberg, House of Representatives 2026
    PartyShare
    AfD6.0%
    CDU8.8%
    Greens20.7%
    The Left44.2%
    SPD9.5%
    Grey, all parties below 5%10.7%
    Turnout77.3%
    2026 Turnout 77.3% Grey 11%: BSW 3.8%, FDP 1.6%, Animal Protection Party 1.3% and other small parties.

All districts, all elections

All twelve districts, in alphabetical order. The same threshold applies to every square. Click a party to highlight it everywhere.

Election
Berlin state elections 2011 to 2026 Federal elections 2013 to 2025, results in Berlin Both election types, one below the other
Parties
Each party sits in the same place in every square. The largest party comes first. Places change from election to election.
5%
Parties with fewer votes than set here fall into the grey field.
Non-voters The square then stands for all eligible voters. Those who did not vote stay empty space.
Percentages Writes the vote share into every block that is large enough.
Highlight a party

12 districts, 5 elections, threshold 5%

Returns all settings to the start.
Hides the 2011 election. Hides the 2016 election. Hides the 2021 election. Hides the 2023 election. Hides the 2026 election.
Hides Charlottenburg-Wilmersdorf.
Hides Friedrichshain-Kreuzberg.
Hides Lichtenberg.
Hides Marzahn-Hellersdorf.
Hides Mitte.
Hides Neukölln.
Hides Pankow.
Hides Reinickendorf.
Hides Spandau.
Hides Steglitz-Zehlendorf.
Hides Tempelhof-Schöneberg.
Hides Treptow-Köpenick.

Grey combines all parties below 5% and the others.

State parliament: grey across Berlin
ElectionGreyIncludes
201110%FDP 1.8%, Animal Protection Party 1.5% and others
20169%Animal Protection Party 1.9%, Pirates 1.7% and others
202112%Animal Protection Party 2.2% and others
202314%FDP 4.6%, Animal Protection Party 2.4% and others
202613%BSW 4.7%, FDP 2.5%, Animal Protection Party 2.1% and others
State parliament: second votes by district and election
District and electionAfDBSWCDUFDPGreensThe LeftPiratesSPDGrey, all parties below 5%Turnout
Charlottenburg-Wilmersdorf, State parliament 2011not listed separatelynot listed separately28.2%in grey21.7%in grey7.0%31.2%11.9%65.1%
Charlottenburg-Wilmersdorf, State parliament 201610.3%not listed separately20.3%12.3%18.5%9.3%in grey22.8%6.5%70.0%
Charlottenburg-Wilmersdorf, State parliament 2021in greynot listed separately21.0%10.4%22.7%8.6%in grey22.6%14.7%78.5%
Charlottenburg-Wilmersdorf, State parliament 20235.3%not listed separately30.6%7.3%21.6%7.7%in grey20.7%6.9%66.4%
Charlottenburg-Wilmersdorf, State parliament 20269.7%in grey25.4%in grey18.1%19.9%not listed separately14.8%12.1%76.2%
Friedrichshain-Kreuzberg, State parliament 2011not listed separatelynot listed separately8.4%in grey30.3%13.0%14.7%23.9%9.8%62.2%
Friedrichshain-Kreuzberg, State parliament 20166.4%not listed separately7.8%in grey28.4%23.4%in grey18.2%15.8%68.5%
Friedrichshain-Kreuzberg, State parliament 2021in greynot listed separately7.6%in grey32.3%23.6%in grey15.1%21.4%78.8%
Friedrichshain-Kreuzberg, State parliament 2023in greynot listed separately13.4%in grey33.5%21.1%in grey14.6%17.4%64.5%
Friedrichshain-Kreuzberg, State parliament 20266.0%in grey8.8%in grey20.7%44.2%not listed separately9.5%10.7%77.3%
Lichtenberg, State parliament 2011not listed separatelynot listed separately12.3%in grey7.6%29.0%9.3%30.9%10.9%53.5%
Lichtenberg, State parliament 201619.0%not listed separately12.0%in grey7.7%26.9%in grey19.7%14.6%62.9%
Lichtenberg, State parliament 202111.8%not listed separately13.9%5.4%12.3%21.0%in grey21.1%14.4%72.7%
Lichtenberg, State parliament 202313.8%not listed separately25.4%in grey11.7%18.6%in grey16.3%14.3%59.6%
Lichtenberg, State parliament 202624.0%7.0%14.2%in grey8.7%28.8%not listed separately8.8%8.5%72.4%
Marzahn-Hellersdorf, State parliament 2011not listed separatelynot listed separately17.5%in grey5.6%27.4%8.8%28.2%12.6%51.0%
Marzahn-Hellersdorf, State parliament 201623.6%not listed separately17.3%in greyin grey23.5%in grey17.0%18.6%60.9%
Marzahn-Hellersdorf, State parliament 202116.2%not listed separately20.9%5.2%6.7%17.9%in grey19.7%13.4%69.3%
Marzahn-Hellersdorf, State parliament 202319.2%not listed separately31.8%in grey5.5%14.4%in grey15.9%13.1%56.3%
Marzahn-Hellersdorf, State parliament 202634.4%7.4%16.4%in grey5.3%20.2%not listed separately7.9%8.5%69.6%
Mitte, State parliament 2011not listed separatelynot listed separately17.9%in grey22.5%11.0%10.5%28.7%9.6%55.9%
Mitte, State parliament 20169.9%not listed separately13.5%6.6%21.3%17.6%in grey21.5%9.5%62.6%
Mitte, State parliament 2021in greynot listed separately12.3%7.1%26.2%17.5%in grey18.8%18.0%73.6%
Mitte, State parliament 20235.6%not listed separately20.2%5.1%27.2%15.8%in grey16.6%9.4%59.0%
Mitte, State parliament 20268.9%in grey14.1%in grey18.2%35.8%not listed separately11.1%11.9%71.5%
Neukölln, State parliament 2011not listed separatelynot listed separately26.7%in grey17.9%5.6%9.6%27.4%12.8%57.2%
Neukölln, State parliament 201613.8%not listed separately17.8%5.7%16.2%13.6%in grey23.3%9.6%63.2%
Neukölln, State parliament 20217.0%not listed separately16.2%5.1%17.6%14.3%in grey27.2%12.5%71.0%
Neukölln, State parliament 20237.5%not listed separately28.1%in grey18.5%13.1%in grey21.3%11.5%57.8%
Neukölln, State parliament 202614.1%in grey16.3%in grey12.4%33.0%not listed separately13.0%11.2%69.4%
Pankow, State parliament 2011not listed separatelynot listed separately13.8%in grey19.1%17.9%10.5%29.1%9.6%60.8%
Pankow, State parliament 201613.8%not listed separately12.6%in grey17.9%21.5%in grey20.1%14.1%69.9%
Pankow, State parliament 20217.9%not listed separately12.7%6.1%23.3%18.6%in grey18.4%13.0%78.4%
Pankow, State parliament 20239.5%not listed separately21.5%in grey22.5%16.2%in grey16.2%14.1%67.6%
Pankow, State parliament 202615.5%in grey14.1%in grey18.0%28.1%not listed separately10.7%13.7%79.0%
Reinickendorf, State parliament 2011not listed separatelynot listed separately38.4%in grey13.6%in grey6.7%28.1%13.2%62.1%
Reinickendorf, State parliament 201616.1%not listed separately28.0%8.8%10.6%6.1%in grey22.0%8.4%66.8%
Reinickendorf, State parliament 20219.3%not listed separately28.3%8.0%13.3%5.4%in grey23.5%12.3%72.9%
Reinickendorf, State parliament 202310.0%not listed separately40.2%in grey12.0%in greyin grey20.3%17.6%61.8%
Reinickendorf, State parliament 202619.0%in grey27.0%in grey11.1%16.1%not listed separately14.2%12.6%71.2%
Spandau, State parliament 2011not listed separatelynot listed separately34.2%in grey12.5%in grey7.3%31.7%14.3%58.0%
Spandau, State parliament 201616.6%not listed separately24.6%7.6%8.7%6.6%in grey27.4%8.5%63.5%
Spandau, State parliament 202110.0%not listed separately26.6%7.8%11.6%5.6%in grey25.7%12.8%70.6%
Spandau, State parliament 202311.0%not listed separately39.1%in grey10.1%in greyin grey21.5%18.3%56.9%
Spandau, State parliament 202621.3%in grey24.4%in grey9.0%16.3%not listed separately15.2%13.8%68.5%
Steglitz-Zehlendorf, State parliament 2011not listed separatelynot listed separately36.2%in grey21.1%in grey6.4%25.1%11.3%70.0%
Steglitz-Zehlendorf, State parliament 201611.0%not listed separately25.5%11.8%16.8%6.9%in grey21.6%6.3%74.5%
Steglitz-Zehlendorf, State parliament 20215.3%not listed separately25.4%11.0%19.8%6.2%in grey22.7%9.7%81.5%
Steglitz-Zehlendorf, State parliament 20235.7%not listed separately35.4%8.0%18.4%5.5%in grey20.2%6.9%71.1%
Steglitz-Zehlendorf, State parliament 202611.0%in grey29.6%in grey17.0%15.1%not listed separately15.6%11.8%79.6%
Tempelhof-Schöneberg, State parliament 2011not listed separatelynot listed separately28.9%in grey23.0%in grey7.8%27.1%13.2%64.1%
Tempelhof-Schöneberg, State parliament 201611.4%not listed separately19.9%7.9%18.7%9.7%in grey24.9%7.6%68.9%
Tempelhof-Schöneberg, State parliament 20215.8%not listed separately20.6%7.3%22.0%9.7%in grey22.6%11.8%77.0%
Tempelhof-Schöneberg, State parliament 20236.3%not listed separately31.1%in grey21.7%8.5%in grey19.9%12.6%65.3%
Tempelhof-Schöneberg, State parliament 202612.1%in grey21.1%in grey17.7%23.2%not listed separately14.4%11.5%75.6%
Treptow-Köpenick, State parliament 2011not listed separatelynot listed separately15.9%in grey10.7%23.0%9.3%28.9%12.2%60.9%
Treptow-Köpenick, State parliament 201620.5%not listed separately12.9%in grey9.1%22.6%in grey20.4%14.5%68.1%
Treptow-Köpenick, State parliament 202111.9%not listed separately14.2%6.6%13.0%18.7%in grey21.6%13.9%76.8%
Treptow-Köpenick, State parliament 202313.9%not listed separately26.0%in grey12.2%15.9%in grey18.0%14.0%64.0%
Treptow-Köpenick, State parliament 202623.7%6.2%15.2%in grey9.8%26.6%not listed separately10.3%8.2%76.1%

Poster as PDF: House of Representatives Poster as PDF: Bundestag

Sources and rules

  • AfD
  • BSW
  • CDU
  • FDP
  • Greens
  • The Left
  • Pirates
  • SPD
  • Grey: all parties below 5%
  • Data: Amt für Statistik Berlin-Brandenburg, Wahlen Berlin, dl-de/by-2.0.
  • Second vote (Zweitstimme) per district. Turnout: voters divided by eligible voters.
  • Area equals share of the vote. Fixed party order, alphabetical.
  • Grey: all parties under 5% and others.
  • If a number doesn’t fit its block, it sits small next to it, with a line to the block. On a phone it sits tiny inside the block, for zooming in.
  • Bundestag election 2021: the data probably includes parts of the February 2024 repeat election. I’m still checking.

← Back to the Data Stories

deen