Brazil’s 2026 runoff, by polling station
Introduction
I’ve never liked those election maps that paint an entire state one colour or the other after the runoff. A few days ago, I saw a comment on some social network (I don’t remember which) saying that “land doesn’t vote”. I found the line brilliant, and it makes total sense. Anyone who knows Brazil, and isn’t trying to push a biased picture of one region or another, knows that much of the country isn’t actually inhabited. We do have (yes!) forests and other nature reserves, but also huge private estates and areas unfit for housing: just think of the massive mountain wall, the Serra do Mar, that separates the city of São Paulo from the coast at Santos. But let’s leave that conversation for another day.
All data were obtained from the Brazilian electoral court (TSE) open data website.
Each dot is one polling station: all the sections (seções) that vote in the same building are combined. The colour shows which candidate led there and by how much, and the dot’s size shows how many valid votes were cast. Zoom in to see individual neighbourhoods, and hover over (or tap) a dot for the details.
The data were prepared in R with the good old tidyverse, sf and geobr packages, and the map is drawn with MapLibre GL JS on an OpenFreeMap base map built from OpenStreetMap data.
Where do we vote, and who do we vote for?
With this idea that “land doesn’t vote” in mind, I decided to put my free time (cough cough) to good use and play around with data from the TSE, Brazil’s electoral court. I created an interactive map with the results of the presidential runoff. It shows the number and share of votes that Lula and Flávio Bolsonaro received at each polling place (when an address has more than one voting section, the votes are added up and the share is calculated on the address total). Right away, the map shows that Brazilians are indeed concentrated in specific areas. It also confirms that most voters in the Northeast voted for Lula in the runoff, as did many of the cities in the North along the Amazon River (Santarém being the biggest exception).
The second point comes up when we look at specific regions and try to set aside certain impressions. An interesting example appears when you zoom into the South. The region is always described as very conservative, right-wing, but you can spot countless cities voting for Lula, even in Santa Catarina, a state popularly nicknamed “Bolsonaristan”. When I started drawing the map, I chose to set apart the places where the race was tight, with a margin under 10 percentage points: they appear in lighter shades. Even before I started studying the branch of political science that looks at political behaviour, party movements and so on, I used to think about the many ways people might vote, especially when “unfair” associations are made. As I said about Santa Catarina, it’s natural to think that each neighbourhood or city belongs to one camp or the other. But there are many places where the contest was more balanced, and it’s great to see the mobilisation from one round to the next.
This brings me to the third point about this map. Right after the results came out, we heard that Flávio won in 80% of the militia-controlled areas of Rio de Janeiro. Yes, that’s true. But it’s impossible to ignore the courage of the people who, even under threat, went out to vote and secured a more balanced result in their sections. In most sections along the Campo Grande/Santa Cruz axis, in Rio’s West Zone, the margin was under 20 points. And more importantly: at a quick glance, I couldn’t find a single section in these areas where Flávio’s vote grew more than Lula’s.
The idea of this interactive map is to show that Brazil’s electoral system values every single vote. If Brazil had an Electoral College like the United States, we’d probably be telling a different story. Luckily, that’s not the case. Let’s value every vote cast for the democratic camp!
I’ll post something about abstention soon, too!
Oh, and feel free to check out the other things on the website (not that there’s much there…).