ELECTION MAPS · BR-PRES-2022 · DERIVED FROM TSE OPEN DATA
The 2022 presidential election in maps: swing, most voted by state and counting.
Four drawings generated at publication time from the official TSE files of the case, each with the equivalent table beside it and the state of every number. No script, no library and no tracking: the SVG is text inside the page and also a file to embed.
How to read this page
The drawings come from the same case files the main page uses, with SHA-256 checked every time this page is generated. No number is typed by hand and each drawing has a table with the same values, for screen readers, copying and checking.
The form follows the relation in the data: swing is a deviation around zero and comes first as ordered diverging bars; the result is a ranking in bars from zero; counting is change over time, as a line with markers. For the "where" question there is a grid cartogram, where every state has the same size and no small state disappears, and a supporting geographic map. The grid positions are our own and are documented at the end of the page.
Colors belong to no party or candidacy. The diverging scale runs from copper to petrol and encodes the sign of the axis: right of zero (petrol) favors no. 13, the lower ballot number among the finalists; left (copper) favors no. 22. The value is always written. Bands are fixed and identical across cycles, so cases can be compared. In the national result every bar is the same gray: no candidacy is highlighted.
The text gives no opinion on candidates, parties or institutions and makes no forecast. Swing and margin describe the published results; they do not say why votes changed.
- Observed
- Number read from an official file, with URL, date and SHA-256 in the manifest.
- Derived
- Computed from official files: sums, shares, swing, margin and cumulative share. The formula appears under each drawing.
- Unknown
- What no collected file supports. Shown with the reason.
1. Swing by state between rounds
Change, in percentage points, of the share of no. 13 between the two finalists. In round 1 the base is only the votes of the two; in round 2, valid votes. Positive means a shift toward no. 13; negative, toward the other finalist. Swing is derived.
| Scope | Round 2 registered voters Derived | Share of no. 13 in round 1, between the two Derived | Share of no. 13 in round 2 Derived | Swing of no. 13 (pp) Derived | Scale band |
|---|---|---|---|---|---|
| AC | 587,765 | 31.89% | 29.70% | -2.19 | 2.0 to 3.5 pp toward no. 22 |
| AL | 2,325,814 | 61.05% | 58.68% | -2.37 | 2.0 to 3.5 pp toward no. 22 |
| AM | 2,647,123 | 53.67% | 51.10% | -2.57 | 2.0 to 3.5 pp toward no. 22 |
| AP | 550,131 | 51.27% | 48.64% | -2.63 | 2.0 to 3.5 pp toward no. 22 |
| BA | 11,282,999 | 74.15% | 72.12% | -2.03 | 2.0 to 3.5 pp toward no. 22 |
| CE | 6,818,192 | 72.20% | 69.97% | -2.23 | 2.0 to 3.5 pp toward no. 22 |
| DF | 2,207,628 | 41.64% | 41.19% | -0.45 | under 0.5 pp |
| ES | 2,922,264 | 43.62% | 41.96% | -1.66 | 0.5 to 2.0 pp toward no. 22 |
| GO | 4,870,621 | 43.10% | 41.29% | -1.82 | 0.5 to 2.0 pp toward no. 22 |
| MA | 5,039,307 | 72.57% | 71.14% | -1.44 | 0.5 to 2.0 pp toward no. 22 |
| MG | 16,284,615 | 52.55% | 50.20% | -2.35 | 2.0 to 3.5 pp toward no. 22 |
| MS | 1,996,066 | 42.55% | 40.51% | -2.05 | 2.0 to 3.5 pp toward no. 22 |
| MT | 2,469,797 | 36.49% | 34.92% | -1.58 | 0.5 to 2.0 pp toward no. 22 |
| PA | 6,078,857 | 56.46% | 54.75% | -1.71 | 0.5 to 2.0 pp toward no. 22 |
| PB | 3,091,719 | 68.43% | 66.62% | -1.80 | 0.5 to 2.0 pp toward no. 22 |
| PE | 7,015,086 | 68.57% | 66.93% | -1.64 | 0.5 to 2.0 pp toward no. 22 |
| PI | 2,570,253 | 78.86% | 76.86% | -2.00 | 2.0 to 3.5 pp toward no. 22 |
| PR | 8,480,626 | 39.44% | 37.60% | -1.84 | 0.5 to 2.0 pp toward no. 22 |
| RJ | 12,827,044 | 44.33% | 43.48% | -0.86 | 0.5 to 2.0 pp toward no. 22 |
| RN | 2,554,326 | 67.00% | 65.10% | -1.90 | 0.5 to 2.0 pp toward no. 22 |
| RO | 1,230,172 | 31.05% | 29.34% | -1.71 | 0.5 to 2.0 pp toward no. 22 |
| RR | 366,641 | 24.88% | 23.92% | -0.96 | 0.5 to 2.0 pp toward no. 22 |
| RS | 8,589,684 | 46.38% | 43.65% | -2.73 | 2.0 to 3.5 pp toward no. 22 |
| SC | 5,501,284 | 32.19% | 30.73% | -1.46 | 0.5 to 2.0 pp toward no. 22 |
| SE | 1,671,241 | 68.64% | 67.21% | -1.43 | 0.5 to 2.0 pp toward no. 22 |
| SP | 34,684,876 | 46.15% | 44.76% | -1.39 | 0.5 to 2.0 pp toward no. 22 |
| TO | 1,094,302 | 53.39% | 51.36% | -2.03 | 2.0 to 3.5 pp toward no. 22 |
| Abroad (ZZ) | 695,578 | 53.13% | 51.28% | -1.85 | 0.5 to 2.0 pp toward no. 22 |
| Brazil | n/a | 52.86% | 50.90% | -1.95 | 0.5 to 2.0 pp toward no. 22 |
Formula first_round_two_candidate_normalized_share = v1_A / (v1_A + v1_B); second_round_share = v2_A / valid_t2; swing_pp = 100 * (second - first); absolute_vote_gain = v2_A - v1_A
Where: position by state
2. Most voted by state in round 2
Color shows which finalist was ahead in each state and abroad; intensity shows the margin in percentage points of valid votes. The margin is derived from the round 2 shares.
| Scope | Ahead in round 2 | Share of no. 13 Derived | Share of no. 22 Derived | Margin (pp) Derived |
|---|---|---|---|---|
| AC | nº 22 JAIR BOLSONARO | 29.70% | 70.30% | 40.60 |
| AL | nº 13 LULA | 58.68% | 41.32% | 17.36 |
| AM | nº 13 LULA | 51.10% | 48.90% | 2.20 |
| AP | nº 22 JAIR BOLSONARO | 48.64% | 51.36% | 2.72 |
| BA | nº 13 LULA | 72.12% | 27.88% | 44.24 |
| CE | nº 13 LULA | 69.97% | 30.03% | 39.94 |
| DF | nº 22 JAIR BOLSONARO | 41.19% | 58.81% | 17.62 |
| ES | nº 22 JAIR BOLSONARO | 41.96% | 58.04% | 16.09 |
| GO | nº 22 JAIR BOLSONARO | 41.29% | 58.71% | 17.43 |
| MA | nº 13 LULA | 71.14% | 28.86% | 42.27 |
| MG | nº 13 LULA | 50.20% | 49.80% | 0.40 |
| MS | nº 22 JAIR BOLSONARO | 40.51% | 59.49% | 18.99 |
| MT | nº 22 JAIR BOLSONARO | 34.92% | 65.08% | 30.17 |
| PA | nº 13 LULA | 54.75% | 45.25% | 9.50 |
| PB | nº 13 LULA | 66.62% | 33.38% | 33.25 |
| PE | nº 13 LULA | 66.93% | 33.07% | 33.86 |
| PI | nº 13 LULA | 76.86% | 23.14% | 53.72 |
| PR | nº 22 JAIR BOLSONARO | 37.60% | 62.40% | 24.79 |
| RJ | nº 22 JAIR BOLSONARO | 43.48% | 56.53% | 13.05 |
| RN | nº 13 LULA | 65.10% | 34.90% | 30.19 |
| RO | nº 22 JAIR BOLSONARO | 29.34% | 70.66% | 41.33 |
| RR | nº 22 JAIR BOLSONARO | 23.92% | 76.08% | 52.16 |
| RS | nº 22 JAIR BOLSONARO | 43.65% | 56.35% | 12.70 |
| SC | nº 22 JAIR BOLSONARO | 30.73% | 69.27% | 38.54 |
| SE | nº 13 LULA | 67.21% | 32.79% | 34.41 |
| SP | nº 22 JAIR BOLSONARO | 44.76% | 55.24% | 10.48 |
| TO | nº 13 LULA | 51.36% | 48.64% | 2.71 |
| Abroad (ZZ) | nº 13 LULA | 51.28% | 48.72% | 2.56 |
Formula margin_pp = 100 * |second_round_share_A - second_round_share_B|; ahead = larger second_round_share
3. Counting curve
Cumulative share of registered voters in states and abroad whose count had closed, by closing time, in both rounds. The axis uses the time as the file states it, with no time zone conversion. Very late closings appear after an axis break, with the time in the table.
| Order | Scope | Closed at (UTC-03:00) Derived | Cumulative share Derived |
|---|---|---|---|
| 1 | DF | 1.4% | |
| 2 | ES | 3.3% | |
| 3 | RR | 3.5% | |
| 4 | TO | 4.2% | |
| 5 | RS | 9.7% | |
| 6 | MS | 11.0% | |
| 7 | SC | 14.5% | |
| 8 | GO | 17.6% | |
| 9 | SE | 18.7% | |
| 10 | SP | 40.8% | |
| 11 | AL | 42.3% | |
| 12 | PB | 44.3% | |
| 13 | AP | 44.7% | |
| 14 | AC | 45.0% | |
| 15 | MT | 46.6% | |
| 16 | RJ | 54.8% | |
| 17 | MG | 65.2% | |
| 18 | RO | 66.0% | |
| 19 | RN | 67.6% | |
| 20 | PE | 72.1% | |
| 21 | CE | 76.5% | |
| 22 | MA | 79.7% | |
| 23 | PA | 83.6% | |
| 24 | BA | 90.8% | |
| 25 | PR | 96.2% | |
| 26 | PI | 97.9% | |
| 27 | Abroad (ZZ) | 98.3% | |
| 28 | AM | 100.0% |
| Order | Scope | Closed at (UTC-03:00) Derived | Cumulative share Derived |
|---|---|---|---|
| 1 | ES | 1.9% | |
| 2 | MS | 3.1% | |
| 3 | TO | 3.8% | |
| 4 | PB | 5.8% | |
| 5 | SE | 6.9% | |
| 6 | DF | 8.3% | |
| 7 | RO | 9.1% | |
| 8 | RN | 10.7% | |
| 9 | AL | 12.2% | |
| 10 | RS | 17.7% | |
| 11 | MT | 19.3% | |
| 12 | RJ | 27.5% | |
| 13 | CE | 31.8% | |
| 14 | RR | 32.1% | |
| 15 | PE | 36.5% | |
| 16 | SC | 40.1% | |
| 17 | GO | 43.2% | |
| 18 | SP | 65.3% | |
| 19 | MG | 75.8% | |
| 20 | BA | 83.0% | |
| 21 | PR | 88.4% | |
| 22 | MA | 91.6% | |
| 23 | PI | 93.3% | |
| 24 | AC | 93.6% | |
| 25 | Abroad (ZZ) | 94.1% | |
| 26 | AP | 94.4% | |
| 27 | PA | 98.3% | |
| 28 | AM | 100.0% |
Formula cumulative_electorate_share = sum(electorate dos escopos fechados até t) / sum(electorate)
4. National result
Percentage of valid votes by candidacy in each round, with the 50% of valid votes line as a reference.
| Round | No. | Candidacy | Party | Votes Derived | % of valid Derived |
|---|---|---|---|---|---|
| Round 1 | 13 | LULA | PT | 57,259,504 | 48.43% |
| Round 1 | 22 | JAIR BOLSONARO | PL | 51,072,345 | 43.20% |
| Round 1 | 15 | SIMONE TEBET | MDB | 4,915,423 | 4.16% |
| Round 1 | 12 | CIRO GOMES | PDT | 3,599,287 | 3.04% |
| Round 1 | 44 | SORAYA THRONICKE | UNIÃO | 600,955 | 0.51% |
| Round 1 | 30 | FELIPE D AVILA | NOVO | 559,708 | 0.47% |
| Round 1 | 14 | PADRE KELMON | PTB | 81,129 | 0.07% |
| Round 1 | 80 | LÉO PÉRICLES | UP | 53,519 | 0.05% |
| Round 1 | 21 | SOFIA MANZANO | PCB | 45,620 | 0.04% |
| Round 1 | 16 | VERA | PSTU | 25,625 | 0.02% |
| Round 1 | 27 | CONSTITUINTE EYMAEL | DC | 16,604 | 0.01% |
| Round 2 | 13 | LULA | PT | 60,345,999 | 50.90% |
| Round 2 | 22 | JAIR BOLSONARO | PL | 58,206,354 | 49.10% |
5. To embed
Each drawing is a static SVG file, with no script, carrying title, description, evidence state, source and credit inside the file. To use it, embed it by its address and keep the link to this page.
- https://evidence.reveno.com.br/en/elections/br-pres-2022/bars-swing.svg
- https://evidence.reveno.com.br/en/elections/br-pres-2022/cartogram-swing.svg
- https://evidence.reveno.com.br/en/elections/br-pres-2022/map-swing.svg
- https://evidence.reveno.com.br/en/elections/br-pres-2022/cartogram-winner.svg
- https://evidence.reveno.com.br/en/elections/br-pres-2022/map-winner.svg
- https://evidence.reveno.com.br/en/elections/br-pres-2022/counting-curve.svg
- https://evidence.reveno.com.br/en/elections/br-pres-2022/national-result.svg
<img src="https://evidence.reveno.com.br/en/elections/br-pres-2022/bars-swing.svg" width="560" alt="Swing by state between round 1 and round 2, 2022, largest to smallest">6. Sources and drawing method
State boundaries from the official IBGE mesh API, at minimum quality, stored unchanged and checked by SHA-256. At build time the mesh is projected (equirectangular corrected by the mean latitude) and simplified with Douglas-Peucker at a tolerance of 0.6 drawing unit(s): from 4985 to 2180 points. The IBGE Localities API state table links each polygon code to the state abbreviation.
| ID | URL | Downloaded at | SHA-256 | Bytes | State |
|---|---|---|---|---|---|
ibge-malha-uf-minima | https://servicodados.ibge.gov.br/api/v3/malhas/paises/BR?formato=application/vnd.geo%2Bjson&qualidade=minima&intrarregiao=UF | 07c671aa87aa1ab296c446de6294df9827112782537b996c0a160284907e7c0f | 98,502 | Observed | |
ibge-localidades-estados | https://servicodados.ibge.gov.br/api/v1/localidades/estados?orderBy=nome | 6b001067b04e037095410ce8d33e11a2d77bf63750354a09608b12f086324f04 | 2,446 | Observed |
Grid positions (column, row) are our own: they approximate real neighbors, with the North at the top left, the Northeast at the top right, the Center-West in the middle and the Southeast and South going down; abroad (ZZ) sits outside the mainland. They are not IBGE data.
7. About this data
- What it measures
- Swing by state between rounds, finalist ahead and margin by state in round 2, counting curve and national result, drawn as SVG from the same tables.
- Source
- Brazil's Superior Electoral Court (TSE), through the case files; state boundaries from IBGE, collected on .
- Unit
- Percentage points (pp) for swing and margin; share of valid votes; cumulative share of registered voters.
- Period
- and
- Last collected
- Next scheduled collection
- Daily at 09:30 UTC (06:30 in Brasília), by the
evidence-tseengine, which checks the SHA-256 of every file. This page changes on the next site publication. IBGE boundaries: no scheduled collection; they change only with a new manual collection recorded in the manifest. - Maintained by
- Reveno Evidence ·
evidence-tseengine, owner Thiago Holtz - Evidence state
- Derived
- Version
- Collection manifest, SHA-256
9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4 - License
- Source data license: public data from the TSE and IBGE, under each body's terms (credit IBGE for the boundaries). License for the Reveno drawings, text and calculations: not declared yet; until then, cite this page.
8. Download the data
What is on screen
The tables on this page as CSV, with unformatted numbers and the evidence state of every row.
The full set, with a manifest
A ZIP with every file behind the page, a README with the citation and license, and a manifest with the SHA-256 of each file.
For machines
A JSON at a stable address, with metadata, citation, tables and sources. The address does not change between publications; the content changes when the collection changes.
- Map data for machines
https://evidence.reveno.com.br/eleicoes/br-pres-2022/mapa/dados.json
- Map data for machines
9. How to cite
Short citation for a chart or table caption, or a note
TSE e IBGE (2022), processed by Reveno Evidence
Full citation with URL and access date
Reveno Evidence (2026). The 2022 presidential election in maps: swing, most voted by state and counting (BR-PRES-2022) [Data set]. Source data: Brazil's Superior Electoral Court (TSE), collected on 2026-11-03 (UTC), and IBGE state boundaries. Collection manifest, SHA-256 9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4. Retrieved November 3, 2026, from https://evidence.reveno.com.br/en/elections/br-pres-2022/map/
BibTeX
@misc{reveno_evidence_br_pres_2022_mapas,
author = {{Reveno Evidence}},
title = {The 2022 presidential election in maps: swing, most voted by state and counting (BR-PRES-2022)},
year = {2026},
publisher = {Reveno},
url = {https://evidence.reveno.com.br/en/elections/br-pres-2022/map/},
urldate = {2026-11-03},
note = {Source data: Brazil's Superior Electoral Court (TSE), collected on 2026-11-03 (UTC), and IBGE state boundaries. Collection manifest, SHA-256 9bf8dbdc34a88f3d3678f433ca3ad4500c4e2a17a5203d6a49d628b0cb6910d4}
}The access date is filled in with the date of this version of the page; replace it with the date you accessed it.
When you use a number, also cite the source file: id, URL and SHA-256 are in the sources table.
Source data license: public data from the TSE and IBGE, under each body's terms (credit IBGE for the boundaries). License for the Reveno drawings, text and calculations: not declared yet; until then, cite this page.