diff --git a/posts/spatial-access-to-public-libraries-toronto/charts.js b/posts/spatial-access-to-public-libraries-toronto/charts.js index a12bae3..7612755 100644 --- a/posts/spatial-access-to-public-libraries-toronto/charts.js +++ b/posts/spatial-access-to-public-libraries-toronto/charts.js @@ -24,9 +24,9 @@ const charts = { graphicVerb: 'created' }, 'demographics-grid': { - title: "Six population groups, mapped relative to library locations", + title: 'Where six population groups live in relation to public libraries', subtitle: - "Share of each census tract's population, with public library locations marked on every map", + 'Visible minority, low income, recent immigrants, first-generation immigrants, seniors, and children', source: 'Census of Population, Statistics Canada (2021); Toronto Public Library', alt: "Six small maps of Toronto, each showing one population group's share of every census tract, with library locations marked: visible minority, low income, recent immigrants, first-generation immigrants, seniors, and children. Where each group is concentrated differs, but all are least present in the central corridor from downtown to the east end.", diff --git a/posts/spatial-access-to-public-libraries-toronto/meta.json b/posts/spatial-access-to-public-libraries-toronto/meta.json index c509f73..9013d5e 100644 --- a/posts/spatial-access-to-public-libraries-toronto/meta.json +++ b/posts/spatial-access-to-public-libraries-toronto/meta.json @@ -6,6 +6,7 @@ "published": "2026-10-07", "license": "CC-BY-4.0", "protected": false, + "cardImage": "demographics-grid", "geography": ["Toronto"], "tags": ["urban", "public transit", "accessibility", "public libraries"], "documents": [ diff --git a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-1440.png b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-1440.png index ca21cd1..3b80806 100644 Binary files a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-1440.png and b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-1440.png differ diff --git a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-2160.png b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-2160.png index 0d54efe..b1a8c16 100644 Binary files a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-2160.png and b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-2160.png differ diff --git a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-720.png b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-720.png index a514905..2b3ff6a 100644 Binary files a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-720.png and b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/demographics-grid-720.png differ diff --git a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/embed.json b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/embed.json index 0fa1930..8d2f4a7 100644 --- a/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/embed.json +++ b/posts/spatial-access-to-public-libraries-toronto/published/2026-10-07/embed.json @@ -1,7 +1,7 @@ { "demographics-grid": { "width": 1080, - "height": 763 + "height": 769 }, "spatial-access-map": { "width": 1080, diff --git a/posts/voter-turnout-municipal-elections-ontario/+page.svelte b/posts/voter-turnout-municipal-elections-ontario/+page.svelte new file mode 100644 index 0000000..790cd07 --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/+page.svelte @@ -0,0 +1,124 @@ + + +
+ +

+ Ontario holds municipal elections every four years, on the fourth Monday in October. Voters elect a mayor and council, as well as school board trustees, and in municipalities that sit within a region, members of regional council. We compared voter turnout data across the three most recent municipal elections in Ontario for every city and town with more than 75,000 residents. Together these 34 municipalities had 7.1 million eligible electors in 2022. +

+ +
+ + + + + +
+ + + +

+ In 2014, only 3 of the 34 municipalities had turnout below 30%. In 2022, 21 did. We found no research that directly explains the 2022 drop. Commentators pointed to the COVID-19 pandemic and to election fatigue (the October 2022 municipal elections came four months after the June 2022 provincial election and 13 months after the September 2021 federal election). Research from Europe found that more frequent elections tend to lower turnout. +

+ +

+ Earlier research does point to some of the reasons turnout differs between municipalities. A study using Canadian Municipal Barometer data on 233 municipalities in Ontario, Quebec, British Columbia, and Alberta, in their 2017 and 2018 elections, found that turnout was higher where there were more local newspapers that published more often, where councils had more seats relative to population, and where mayoral races were closer. Turnout also tends to be lower where a larger share of residents were aged 18 to 34. +

+ +

+ In our look at Ontario's largest municipalities, a city's size says little about its turnout: population and turnout are essentially uncorrelated in each of the three elections. How a municipality is governed makes a small difference. Single-tier cities, which are not part of a regional government, had a higher median turnout in all three elections than lower-tier municipalities, which sit within a region (e.g. Peel, York, etc.). +

+ +

+ The closeness of the mayoral race accounts for more of the difference, in line with the earlier research. In each of the three elections, turnout tended to be lower where the winning mayoral candidate took a larger share of the vote. +

+ +
+ + + + + +
+ +

+ We will likely update these charts after 2026 elections when the data are available. +

+ +
+

Methods and data

+ +

+ Turnout data are from the Municipal election results dataset published by the Government of Ontario, which has one file of municipal data for each of the 2014, 2018, and 2022 elections. Turnout is the number of electors who voted divided by the total number of eligible electors. +

+ +

+ We included every single-tier and lower-tier municipality with a population above 75,000 in the 2021 Census of Population. That is 34 municipalities: 26 cities, six towns (Oakville, Whitby, Milton, Ajax, Newmarket, and Caledon), and two with the status of municipality (Chatham-Kent and Clarington). Upper-tier regions and counties are not included. +

+ +

+ We replaced three values with figures published by the cities themselves. The provincial file has no figures for Toronto in 2014, so we used the City of Toronto's count (991,754 voters of 1,813,915 eligible electors). For Toronto in 2018, the provincial file lists about 204,000 fewer electors than the City's final count, which gives a turnout of 45.1% instead of the City's 40.9%; we used the City's figures (769,044 of 1,880,371). For Barrie in 2018, the provincial file gives a turnout of 47.4%, while the City of Barrie reported 29.65%; we used the City's figure. The downloadable data marks these three values. +

+ +

+ The mayoral results are from the same dataset's files of successful candidates, which give the votes cast for the winning candidate and the total votes cast for the office. We divided the first by the second. The files do not list losing candidates, so we could not calculate the margin of victory. Two of the 102 contests are left out of the third chart: Newmarket in 2022, where the mayor was acclaimed, and Milton in 2022, where the file has no total for the office. +

+ +

Limitations

+ +

+ Municipalities report these figures to the Province voluntarily, and we did not compare every value with each municipality's own published results. The three substitutions above are the ones we found; there may be others. +

+ +

+ Turnout depends on the voters' list as well as on the number of people who vote. A list that includes people who have moved or died lowers measured turnout, and a list that misses eligible residents raises it. The quality of the list can differ between municipalities and between elections, so small differences in turnout should be read with caution. +

+ +

+ Three elections are a short series, and the analysis is descriptive. It does not test why turnout changed or why it differs between municipalities. +

+
+ + + +
diff --git a/posts/voter-turnout-municipal-elections-ontario/charts.js b/posts/voter-turnout-municipal-elections-ontario/charts.js new file mode 100644 index 0000000..7559110 --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/charts.js @@ -0,0 +1,47 @@ +import { resolveDownloads } from '$lib/downloads.js'; + +const dataUrls = import.meta.glob('./data/*', { eager: true, query: '?url', import: 'default' }); +const pngUrls = import.meta.glob('./published/*/*.png', { + eager: true, + query: '?url', + import: 'default' +}); +const embedMeta = import.meta.glob('./published/*/embed.json', { + eager: true, + import: 'default' +}); + +const source = + 'Government of Ontario, Municipal election results (2014, 2018, 2022); City of Toronto and City of Barrie election results; Statistics Canada, Census of Population (2021)'; + +const substitutionNote = + 'Turnout is the number of electors who voted divided by the number of eligible electors, as each municipality reported it to the Province. Toronto in 2014 and 2018 and Barrie in 2018 use figures published by those cities, because the provincial file is blank or differs from them. By-elections, such as Toronto’s 2023 and Mississauga’s 2024 mayoral by-elections, are not included. Provincial turnout (dashed line) is all ballots cast as a share of names on the voters list, as reported by Elections Ontario; provincial elections were held in June 2014, 2018 and 2022, and February 2025.'; + +const charts = { + 'turnout-by-election': { + title: 'Voter turnout declined in most of Ontario’s largest municipalities between 2014 and 2022', + subtitle: + 'Median turnout held near 36% in 2014 and 2018, then dropped to 28% in 2022. Toronto declined the most; Ottawa was the only city to rise in both elections', + source: + 'Government of Ontario, Municipal election results (2014, 2018, 2022); City of Toronto and City of Barrie election results; Elections Ontario, General Elections Statistics from the Records; Statistics Canada, Census of Population (2021)', + alt: 'Slope chart of voter turnout in the 2014, 2018 and 2022 municipal elections for the 34 Ontario municipalities with more than 75,000 residents. Most lines fall, most steeply between 2018 and 2022. The median declines from 36.1% to 28.2%. A dashed line shows provincial election turnout: 51.3% in 2014, 56.7% in 2018, 44.1% in 2022 and 45.2% in 2025.', + note: substitutionNote, + data: ['turnout-by-municipality.csv', 'provincial-turnout.csv'], + widths: [360, 720], + graphicVerb: 'created' + }, + 'turnout-by-mayoral-vote': { + title: 'Turnout tended to be lower where the mayor won with a larger share of the vote', + subtitle: + 'Toronto’s highest turnout came in 2014, when its mayor was elected with only 40% of the vote. Ottawa’s came in 2022, when its mayor was elected with 51%', + source: + 'Government of Ontario, Municipal election results, municipal and successful candidate data (2014, 2018, 2022); City of Toronto and City of Barrie election results', + alt: 'Three scatter plots, one for each of the 2014, 2018 and 2022 municipal elections, of voter turnout relative to the winning mayoral candidate’s share of the vote in Ontario municipalities with more than 75,000 residents. In each, the trend slopes downward: turnout is lower where the winner took a larger share. Toronto and Ottawa are highlighted.', + note: 'Turnout is the percentage of eligible electors who voted. The provincial file lists only the winning candidate, so the measure is the winner’s share of votes cast for mayor, not the margin over the runner-up. The 2022 panel has 32 municipalities: Newmarket’s mayor was acclaimed and the file has no mayoral vote total for Milton. Three turnout values use city-published figures (Toronto 2014 and 2018, Barrie 2018). Correlations are Pearson’s r, with two-sided p-values.', + data: 'turnout-and-mayoral-vote.csv', + widths: [360, 720], + graphicVerb: 'created' + } +}; + +export default resolveDownloads(charts, { dataUrls, pngUrls, embedMeta }); diff --git a/posts/voter-turnout-municipal-elections-ontario/charts/turnout-by-election.svelte b/posts/voter-turnout-municipal-elections-ontario/charts/turnout-by-election.svelte new file mode 100644 index 0000000..856632f --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/charts/turnout-by-election.svelte @@ -0,0 +1,529 @@ + + +
Voter turnout in municipal elections
+ +
+
+ + + +
+
+ +{#snippet slope(layout)} + + {#each yTicks as tick} + {tick}% + {/each} + + {#each columns as year} + + {year} + {/each} + + {#each lines as line} + + + + + {#if line.group === 'other'} + + choose(line.name)} + > + {line.name}: {line.points.map((p) => `${fmt(p.value)} in ${p.year}`).join(', ')} + + {/if} + {#if line.dotR} + {#each line.points as p} + + {/each} + {/if} + + {/each} + + {#each layout.finishLabels as l} + + {#each l.line.nameLines ?? [l.line.name] as part, i} + {part} + {/each} + + {/each} + + + {#each layout.valueLabels as l} + {l.text} + {/each} + +{/snippet} + +
+ {@render slope(wide)} +
+ +
+ {@render slope(narrow)} +
+ + diff --git a/posts/voter-turnout-municipal-elections-ontario/charts/turnout-by-mayoral-vote.svelte b/posts/voter-turnout-municipal-elections-ontario/charts/turnout-by-mayoral-vote.svelte new file mode 100644 index 0000000..f05f1ec --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/charts/turnout-by-mayoral-vote.svelte @@ -0,0 +1,372 @@ + + +
+ Voter turnout relative to the winning mayoral candidate's share of the vote +
+ +
+ {#each Object.entries(highlights) as [name, color]} +
+ + + + {name} +
+ {/each} +
+ + + + Other municipalities +
+
+ + + + Trend +
+
+ +{#snippet scatter(layout)} + + {#each layout.frames as f} + {f.year} + + Correlation: {f.trend.r.toFixed(2).replace('-', '−')} (p {f.trend.p < 0.001 + ? '< 0.001' + : `= ${f.trend.p.toFixed(3)}`}) + + {#each yTicks as tick} + + + {#if f.showYLabels && tick !== yDomain[1]} + {tick}% + {/if} + {/each} + + + {#each xTicks as tick} + + {tick}% + {/each} + {#if f.showXTitle} + Winner's share of mayoral vote → + {/if} + + + + {#each f.points as p} + + + + {p.name}, {p.year}: {p.turnout.toFixed(1)}% turnout; {p.mayor} elected mayor with {p.share.toFixed( + 1 + )}% of the vote + + + {/each} + + + {#each f.points.filter((p) => p.highlighted) as p} + {@const at = labelAt[p.name][p.year]} + {p.name} + {/each} + {/each} + +{/snippet} + +
+ {@render scatter(wide)} +
+ +
+ {@render scatter(narrow)} +
+ + diff --git a/posts/voter-turnout-municipal-elections-ontario/data/provincial-turnout.csv b/posts/voter-turnout-municipal-elections-ontario/data/provincial-turnout.csv new file mode 100644 index 0000000..c8a043f --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/data/provincial-turnout.csv @@ -0,0 +1,5 @@ +year,election_date,names_on_list,total_ballots,turnout +2014,2014-06-12,9526031,4885493,51.29 +2018,2018-06-07,10246066,5806286,56.67 +2022,2022-06-02,10740426,4732476,44.06 +2025,2025-02-27,11183586,5056933,45.22 diff --git a/posts/voter-turnout-municipal-elections-ontario/data/turnout-and-mayoral-vote.csv b/posts/voter-turnout-municipal-elections-ontario/data/turnout-and-mayoral-vote.csv new file mode 100644 index 0000000..ed7b45e --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/data/turnout-and-mayoral-vote.csv @@ -0,0 +1,103 @@ +municipality,tier,year,turnout,mayor_elected,mayor_votes,mayor_votes_cast,mayor_vote_share,mayor_contest +Toronto,Single-tier,2014,54.7,Tory,395124,981053,40.3,elected +Ottawa,Single-tier,2014,39.9,Watson,189253,252464,75.0,elected +Mississauga,Lower-tier,2014,36.6,Crombie,102346,161199,63.5,elected +Brampton,Lower-tier,2014,36.2,Jeffrey,51061,103501,49.3,elected +Hamilton,Single-tier,2014,34.0,Eisenberger,49020,122756,39.9,elected +London,Single-tier,2014,43.2,Brown,63842,110551,57.7,elected +Markham,Lower-tier,2014,37.1,Scarpitti,50065,59862,83.6,elected +Vaughan,Lower-tier,2014,30.3,Bevilacqua,43904,56018,78.4,elected +Kitchener,Lower-tier,2014,30.7,Vrbanovic,26946,44166,61.0,elected +Windsor,Single-tier,2014,37.5,Dilkens,32271,58295,55.4,elected +Oakville,Lower-tier,2014,33.3,Burton,27727,41217,67.3,elected +Richmond Hill,Lower-tier,2014,32.2,Barrow,23397,36706,63.7,elected +Burlington,Lower-tier,2014,34.1,Goldring,36237,42222,85.8,elected +Oshawa,Lower-tier,2014,26.4,Henry,14084,28783,48.9,elected +Greater Sudbury,Single-tier,2014,50.7,Bigger,27303,59372,46.0,elected +Barrie,Single-tier,2014,31.2,Lehman,26385,28601,92.3,elected +Guelph,Single-tier,2014,45.0,Guthrie,19672,38760,50.8,elected +Whitby,Lower-tier,2014,26.9,Mitchell,16803,22954,73.2,elected +Cambridge,Lower-tier,2014,29.7,Craig,13484,25308,53.3,elected +St. Catharines,Lower-tier,2014,31.5,Sendzik,13147,32709,40.2,elected +Milton,Lower-tier,2014,33.3,Krantz,13830,18404,75.1,elected +Kingston,Single-tier,2014,39.5,Paterson,13577,35590,38.1,elected +Ajax,Lower-tier,2014,30.4,Parish,18603,22612,82.3,elected +Waterloo,Lower-tier,2014,35.9,Jaworsky,14103,25523,55.3,elected +Thunder Bay,Single-tier,2014,46.1,Hobbs,14463,37123,39.0,elected +Brantford,Single-tier,2014,37.6,Friel,8743,24271,36.0,elected +Chatham-Kent,Single-tier,2014,42.1,Hope,9242,32783,28.2,elected +Clarington,Lower-tier,2014,30.5,Foster,10093,18824,53.6,elected +Pickering,Lower-tier,2014,34.4,Ryan,14410,22453,64.2,elected +Niagara Falls,Lower-tier,2014,36.7,Diodati,17968,21252,84.5,elected +Newmarket,Lower-tier,2014,36.8,Van Bynen,10818,20300,53.3,elected +Peterborough,Single-tier,2014,45.9,Bennett,11210,27090,41.4,elected +Kawartha Lakes,Single-tier,2014,41.5,Letham,16055,27677,58.0,elected +Caledon,Lower-tier,2014,34.3,Thompson,7822,16133,48.5,elected +Toronto,Single-tier,2018,40.9,Tory,479659,755493,63.5,elected +Ottawa,Single-tier,2018,42.6,Watson,188960,269772,70.0,elected +Mississauga,Lower-tier,2018,27.6,Crombie,91422,119229,76.7,elected +Brampton,Lower-tier,2018,34.5,Brown,46894,105553,44.4,elected +Hamilton,Single-tier,2018,38.4,Eisenberger,74093,137137,54.0,elected +London,Single-tier,2018,39.5,Holder,57614,96646,59.6,elected +Markham,Lower-tier,2018,39.4,Scarpitti,55553,74129,74.9,elected +Vaughan,Lower-tier,2018,27.0,Bevilacqua,37072,52433,70.7,elected +Kitchener,Lower-tier,2018,28.2,Vrbanovic,34983,40931,85.5,elected +Windsor,Single-tier,2018,35.2,Dilkins,31201,52530,59.4,elected +Oakville,Lower-tier,2018,37.1,Burton,22918,46165,49.6,elected +Richmond Hill,Lower-tier,2018,27.2,Barrow,23304,30635,76.1,elected +Burlington,Lower-tier,2018,39.8,Ward,23360,50733,46.0,elected +Oshawa,Lower-tier,2018,24.3,Carter,17651,25406,69.5,elected +Greater Sudbury,Single-tier,2018,45.0,Bigger,14684,51852,28.3,elected +Barrie,Single-tier,2018,29.7,Lehman,24854,27321,91.0,elected +Guelph,Single-tier,2018,36.0,Guthrie,22203,33352,66.6,elected +Whitby,Lower-tier,2018,26.3,Mitchell,16464,23153,71.1,elected +Cambridge,Lower-tier,2018,32.2,Mcgarry,13404,28089,47.7,elected +St. Catharines,Lower-tier,2018,34.1,Sendzik,21574,31021,69.5,elected +Milton,Lower-tier,2018,37.0,Krantz,18571,22751,81.6,elected +Kingston,Single-tier,2018,41.3,Paterson,23708,34346,69.0,elected +Ajax,Lower-tier,2018,32.9,Collier,10799,25564,42.2,elected +Waterloo,Lower-tier,2018,34.2,Jaworsky,17307,24429,70.8,elected +Thunder Bay,Single-tier,2018,51.0,Mauro,13940,41108,33.9,elected +Brantford,Single-tier,2018,36.7,Davis,12867,24308,52.9,elected +Chatham-Kent,Single-tier,2018,45.4,Canniff,19316,34489,56.0,elected +Clarington,Lower-tier,2018,28.6,Foster,12507,18376,68.1,elected +Pickering,Lower-tier,2018,29.2,Ryan,12959,19596,66.1,elected +Niagara Falls,Lower-tier,2018,39.2,Diodati,13875,23884,58.1,elected +Newmarket,Lower-tier,2018,34.6,Taylor,14351,19470,73.7,elected +Peterborough,Single-tier,2018,48.3,Therrien,19254,28913,66.6,elected +Kawartha Lakes,Single-tier,2018,38.0,Letham,11435,25044,45.7,elected +Caledon,Lower-tier,2018,32.3,Thompson,7392,16293,45.4,elected +Toronto,Single-tier,2022,29.7,Tory,342158,551890,62.0,elected +Ottawa,Single-tier,2022,43.8,Sutcliffe,161677,314754,51.4,elected +Mississauga,Lower-tier,2022,21.8,Crombie,82736,105432,78.5,elected +Brampton,Lower-tier,2022,24.6,Brown,50652,84919,59.6,elected +Hamilton,Single-tier,2022,35.4,Horwath,59216,142058,41.7,elected +London,Single-tier,2022,25.5,Morgan,46283,70428,65.7,elected +Markham,Lower-tier,2022,32.1,Scarpitti,44172,68641,64.4,elected +Vaughan,Lower-tier,2022,26.5,Del Duca,22699,59634,38.1,elected +Kitchener,Lower-tier,2022,20.3,Vrbanovic,26846,33569,80.0,elected +Windsor,Single-tier,2022,31.6,Dilkens,26018,49550,52.5,elected +Oakville,Lower-tier,2022,28.3,Burton,19949,40510,49.2,elected +Richmond Hill,Lower-tier,2022,31.7,West,28318,40349,70.2,elected +Burlington,Lower-tier,2022,27.6,Meed Ward,30135,38661,77.9,elected +Oshawa,Lower-tier,2022,18.4,Carter,14270,21974,64.9,elected +Greater Sudbury,Single-tier,2022,42.2,Lefebvre,26187,49941,52.4,elected +Barrie,Single-tier,2022,30.5,Nuttall,13401,31368,42.7,elected +Guelph,Single-tier,2022,27.8,Guthrie,20357,28586,71.2,elected +Whitby,Lower-tier,2022,23.3,Roy,12654,23526,53.8,elected +Cambridge,Lower-tier,2022,28.8,Liggett,12567,27190,46.2,elected +St. Catharines,Lower-tier,2022,26.3,Siscoe,17808,25900,68.8,elected +Milton,Lower-tier,2022,28.4,Krantz,11391,,,elected +Kingston,Single-tier,2022,30.5,Paterson,21844,29402,74.3,elected +Ajax,Lower-tier,2022,22.5,Collier,11691,18759,62.3,elected +Waterloo,Lower-tier,2022,27.2,Mccabe,9543,22435,42.5,elected +Thunder Bay,Single-tier,2022,42.6,Boshcoff,13538,35421,38.2,elected +Brantford,Single-tier,2022,27.0,Davis,9220,20066,45.9,elected +Chatham-Kent,Single-tier,2022,30.6,Canniff,17981,23933,75.1,elected +Clarington,Lower-tier,2022,28.0,Foster,8607,20505,42.0,elected +Pickering,Lower-tier,2022,27.2,Ashe,7867,20296,38.8,elected +Niagara Falls,Lower-tier,2022,27.5,Diodati,12055,18067,66.7,elected +Newmarket,Lower-tier,2022,24.9,Taylor,,,,acclaimed +Peterborough,Single-tier,2022,40.0,Leal,12911,26174,49.3,elected +Kawartha Lakes,Single-tier,2022,32.7,Elmslie,7982,23136,34.5,elected +Caledon,Lower-tier,2022,31.7,Groves,10270,17794,57.7,elected diff --git a/posts/voter-turnout-municipal-elections-ontario/data/turnout-by-municipality.csv b/posts/voter-turnout-municipal-elections-ontario/data/turnout-by-municipality.csv new file mode 100644 index 0000000..8fa6b70 --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/data/turnout-by-municipality.csv @@ -0,0 +1,35 @@ +municipality,status,tier,population_2021,electors_2014,voted_2014,turnout_2014,source_2014,electors_2018,voted_2018,turnout_2018,source_2018,electors_2022,voted_2022,turnout_2022,source_2022,change_2014_2022 +Toronto,City,Single-tier,2794356,1813915,991754,54.7,city,1880371,769044,40.9,city,1893091,563124,29.7,province,-25.0 +Ottawa,City,Single-tier,1017449,632385,252464,39.9,province,633946,269772,42.6,province,722227,316254,43.8,province,3.9 +Mississauga,City,Lower-tier,717961,444755,162655,36.6,province,432029,119229,27.6,province,491260,107310,21.8,province,-14.8 +Brampton,City,Lower-tier,656480,289906,104947,36.2,province,313273,108070,34.5,province,354884,87155,24.6,province,-11.6 +Hamilton,City,Single-tier,569353,366124,124550,34.0,province,361212,138549,38.4,province,405228,143375,35.4,province,1.4 +London,City,Single-tier,422324,259133,111937,43.2,province,248212,97947,39.5,province,281073,71678,25.5,province,-17.7 +Markham,City,Lower-tier,338503,195805,72620,37.1,province,196689,77503,39.4,province,217490,69805,32.1,province,-5.0 +Vaughan,City,Lower-tier,323103,190724,57763,30.3,province,201488,54434,27.0,province,227272,60229,26.5,province,-3.8 +Kitchener,City,Lower-tier,256885,147292,45167,30.7,province,148584,41933,28.2,province,171025,34658,20.3,province,-10.4 +Windsor,City,Single-tier,229660,156663,58770,37.5,province,150602,53026,35.2,province,158604,50078,31.6,province,-5.9 +Oakville,Town,Lower-tier,213759,125722,41921,33.3,province,125718,46624,37.1,province,144970,41021,28.3,province,-5.0 +Richmond Hill,City,Lower-tier,202022,116139,37429,32.2,province,116080,31521,27.2,province,129924,41147,31.7,province,-0.5 +Burlington,City,Lower-tier,186948,125250,42763,34.1,province,128238,51021,39.8,province,142218,39217,27.6,province,-6.5 +Oshawa,City,Lower-tier,175383,110789,29271,26.4,province,108138,26238,24.3,province,121885,22456,18.4,province,-8.0 +Greater Sudbury,City,Single-tier,166004,117701,59686,50.7,province,115784,52087,45.0,province,119147,50232,42.2,province,-8.5 +Barrie,City,Single-tier,147829,92491,28889,31.2,province,92156,,29.7,city,103764,31602,30.5,province,-0.7 +Guelph,City,Single-tier,143740,86574,38933,45.0,province,93650,33732,36.0,province,105096,29254,27.8,province,-17.2 +Whitby,Town,Lower-tier,138501,87406,23498,26.9,province,90099,23712,26.3,province,102618,23872,23.3,province,-3.6 +Cambridge,City,Lower-tier,138479,85459,25395,29.7,province,87750,28292,32.2,province,96000,27689,28.8,province,-0.9 +St. Catharines,City,Lower-tier,136803,96356,30340,31.5,province,91047,31021,34.1,province,100448,26427,26.3,province,-5.2 +Milton,Town,Lower-tier,132979,56635,18845,33.3,province,62521,23139,37.0,province,81432,23164,28.4,province,-4.9 +Kingston,City,Single-tier,132485,90719,35856,39.5,province,83608,34529,41.3,province,98173,29938,30.5,province,-9.0 +Ajax,Town,Lower-tier,126666,74891,22785,30.4,province,77885,25634,32.9,province,85443,19205,22.5,province,-7.9 +Waterloo,City,Lower-tier,121436,71667,25750,35.9,province,72598,24843,34.2,province,82557,22435,27.2,province,-8.7 +Thunder Bay,City,Single-tier,108843,81109,37354,46.1,province,81135,41361,51.0,province,83679,35661,42.6,province,-3.5 +Brantford,City,Single-tier,104688,65057,24451,37.6,province,66619,24477,36.7,province,75305,20340,27.0,province,-10.6 +Chatham-Kent,Municipality,Single-tier,103988,77855,32783,42.1,province,76418,34722,45.4,province,80332,24546,30.6,province,-11.5 +Clarington,Municipality,Lower-tier,101427,62329,19032,30.5,province,65373,18678,28.6,province,73471,20606,28.0,province,-2.5 +Pickering,City,Lower-tier,99186,66564,22877,34.4,province,67748,19777,29.2,province,76305,20786,27.2,province,-7.2 +Niagara Falls,City,Lower-tier,94415,60062,22045,36.7,province,61859,24242,39.2,province,68201,18773,27.5,province,-9.2 +Newmarket,Town,Lower-tier,87942,55563,20434,36.8,province,56749,19662,34.6,province,61210,15221,24.9,province,-11.9 +Peterborough,City,Single-tier,83651,59256,27204,45.9,province,58022,28030,48.3,province,65943,26352,40.0,province,-5.9 +Kawartha Lakes,City,Single-tier,79247,67607,28047,41.5,province,66441,25280,38.0,province,70833,23136,32.7,province,-8.8 +Caledon,Town,Lower-tier,76581,47485,16264,34.3,province,51192,16531,32.3,province,56538,17939,31.7,province,-2.6 diff --git a/posts/voter-turnout-municipal-elections-ontario/meta.json b/posts/voter-turnout-municipal-elections-ontario/meta.json new file mode 100644 index 0000000..141afed --- /dev/null +++ b/posts/voter-turnout-municipal-elections-ontario/meta.json @@ -0,0 +1,18 @@ +{ + "title": "Voter turnout in Ontario's largest municipalities", + "type": "post", + "summary": "Median turnout in Ontario's 34 largest municipalities declined from 36% in 2014 to 28% in 2022.", + "authors": [ + "Jeff Allen" + ], + "published": "2026-10-08", + "license": "CC-BY-4.0", + "protected": true, + "cardImage": "turnout-by-election", + "geography": [ + "Ontario" + ], + "tags": [ + "urban" + ] +} diff --git a/src/lib/ChartFrame.svelte b/src/lib/ChartFrame.svelte index 5a6b2dd..8264a5c 100644 --- a/src/lib/ChartFrame.svelte +++ b/src/lib/ChartFrame.svelte @@ -489,8 +489,8 @@ margin: 40px auto; padding: 20px; border: solid 1px var(--brandGray05); - border-top: solid 3px var(--brandDarkBlue); - border-bottom: solid 1px var(--brandDarkBlue); + border-top: solid 2px var(--brandDarkBlue); + border-bottom: solid 2px var(--brandDarkBlue); } .chart-frame.standalone { @@ -525,21 +525,22 @@ .chart-title { font-family: TradeGothicBold; font-weight: normal; - font-size: 25px; + font-size: 27px; + line-height: 34px; /* max-width: 720px; */ color: var(--brandDarkBlue); - margin: 0 0 12px 0; + margin: 3px 0 10px 0; padding-right: 60px; } .chart-subtitle { - font-family: OpenSans; + font-family: OpenSansItalic; font-weight: normal; - font-size: 16px; - line-height: 22px; + font-size: 17px; + line-height: 24px; color: var(--brandGray90); padding-bottom: 5px; - border-bottom: solid 1px var(--brandYellow); + border-bottom: solid 1px var(--brandGray10); margin: 0 0 16px 0; } diff --git a/src/lib/footnotes/Footnotes.svelte b/src/lib/footnotes/Footnotes.svelte index a8ec55b..95233ae 100644 --- a/src/lib/footnotes/Footnotes.svelte +++ b/src/lib/footnotes/Footnotes.svelte @@ -57,7 +57,7 @@ margin-top: 100px; margin-bottom: 50px; padding-bottom: 20px; - border: solid 1px var(--brandGray10); + border: solid 1px var(--brandGray15); /* border-top-right-radius: 50px; */ } diff --git a/src/lib/styles.css b/src/lib/styles.css index 4c4a1ed..2e8b09b 100644 --- a/src/lib/styles.css +++ b/src/lib/styles.css @@ -88,6 +88,7 @@ --brandGray85: #262626; --brandGray90: #1A1A1A; --brandGray95: #0D0D0D; + --brandPageBackground: #fafafd; } @@ -96,7 +97,7 @@ body { padding: 0px; margin: 0px; - background-color: #fefeff; + background-color: var(--brandPageBackground); min-width: calc(100% - 100dvw + 360px); width: 100%; } @@ -112,7 +113,7 @@ main { .text { background-color: none; - max-width: 680px; + max-width: 720px; margin: 0 auto; position: relative; padding-left: 20px; @@ -238,9 +239,9 @@ li { max-width: 720px; margin: auto; padding: 20px; - border: solid 1px var(--brandGray10); + border: solid 1px var(--brandGray15); border-radius: 0px; - background-color: var(--brandWhite); + background-color: var(--brandPageBackground); } .details-block summary {