Close Menu
Français FoisFrançais Fois
  • Actualités
  • International
  • Politique
  • Société
  • High-Tech
  • Economie
  • Divertissement
  • Culture
  • Justice
  • Police
  • Plus
    • Education
    • Communiqué de Presse
    • Mondial
Tendance
Client Challenge

Client Challenge

avril 1, 2026
Demis Hassabis, PDG de Google DeepMind, l’« optimiste prudent »

Demis Hassabis, PDG de Google DeepMind, l’« optimiste prudent »

avril 1, 2026
« Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »

« Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »

avril 1, 2026
« L’équilibre et la stabilité ne sont plus que des souvenirs pour les pays arabes du Golfe »

« L’équilibre et la stabilité ne sont plus que des souvenirs pour les pays arabes du Golfe »

avril 1, 2026
La compagnie ferroviaire espagnole Renfe suspend son projet de liaison à grande vitesse entre l’Espagne et Paris

La compagnie ferroviaire espagnole Renfe suspend son projet de liaison à grande vitesse entre l’Espagne et Paris

avril 1, 2026
Facebook X (Twitter) Instagram
Tendance
  • Client Challenge
  • Demis Hassabis, PDG de Google DeepMind, l’« optimiste prudent »
  • « Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »
  • « L’équilibre et la stabilité ne sont plus que des souvenirs pour les pays arabes du Golfe »
  • La compagnie ferroviaire espagnole Renfe suspend son projet de liaison à grande vitesse entre l’Espagne et Paris
  • Les organes de la discorde scientifique depuis le XVIIIᵉ siècle
  • L’histoire folle d’une nouvelle pièce de Molière, coécrite avec l’IA
  • comment un traitement révolutionnaire est déployé en Eswatini, le pays le plus touché au monde
  • Confidentialité
  • Termes
  • Contacter
Histoires Web
Français FoisFrançais Fois
Bulletin S'identifier
  • Actualités
  • International
  • Politique
  • Société
  • High-Tech
  • Economie
  • Divertissement
  • Culture
  • Justice
  • Police
  • Plus
    • Education
    • Communiqué de Presse
    • Mondial
Français FoisFrançais Fois
Home » Municipales : à combien de voix s’est jouée l’élection dans votre commune ?
Municipales : à combien de voix s’est jouée l’élection dans votre commune ?
Politique

Municipales : à combien de voix s’est jouée l’élection dans votre commune ?

PersonnelBy Personnelmars 26, 2026

Les élections municipales se sont parfois jouées à peu de choses. Dans plus de 900 communes, l’élection du futur maire s’est décidée à moins de dix voix près. C’est-à-dire que cinq électeurs auraient pu faire basculer l’élection s’ils avaient décidé de voter pour la liste arrivée deuxième. Dans d’autres cas, deux listes se sont même retrouvées à égalité parfaite, contraintes de se départager au moyen de la moyenne d’âge de leurs candidats (les plus âgés étant déclarés vainqueurs).

Dans la plupart des villes, la mobilisation des abstentionnistes aurait aussi pu modifier largement la donne, dans un scrutin marqué par une participation historiquement basse – si l’on met de côté les élections de 2020, organisées dans des conditions particulières à cause de la pandémie de Covid-19.

Et dans votre commune, à combien de voix s’est jouée l’élection ? Découvrez-le grâce à notre moteur de recherche.

Paris

Résultats du second tour

Le scrutin s’est joué à

Cela veut aussi dire que ${analysedCityData.voix_abstentionnistes_pres.toLocaleString()} abstentionniste${plur(analysedCityData.voix_abstentionnistes_pres)} – soit ${abstention_percentage_formatted} des personnes qui ne sont pas rendues aux urnes – auraient permis de faire basculer le vote.

`;
}
clone.querySelector(« .voix-pres .description »).innerHTML = mdm_html(description_html);

clone.querySelector(« .svg_container > p »).innerHTML = `Résultats du ${tour_str} tour`;
d3.select(clone).select(« .svg_resultats g »).remove();

container.appendChild(clone);

let data;

if (analysedCityData.type !== « une-seule-liste ») {
data = [
{ value: +analysedCityData.maire.voix, value_change: 0, color: analysedCityData.maireColor, name: await listeToName(analysedCityData.maire, false) },
{
value: +analysedCityData.principal_adversaire.voix,
value_change: 0,
color: analysedCityData.principal_adversaireColor,
name: await listeToName(analysedCityData.principal_adversaire, false),
},
{ value: +cityData.mentions.abstentions, value_change: 0, color: « #a7a6a6 », name: « Abstentionnistes » },
];
} else {
data = [
{ value: +analysedCityData.maire.voix, value_change: 0, color: analysedCityData.maireColor, name: await listeToName(analysedCityData.maire, false) },
{ value: +cityData.mentions.abstentions, value_change: 0, color: « #a7a6a6 », name: « Abstentionnistes » },
];
}
const width_svg = d3.select(clone).select(« .description »).node().clientWidth;
const height_svg = isMobile ? width_svg * 0.4 : width_svg * 0.25;
const margin = { top: 0, right: 40, bottom: 0, left: d3.max(data, computeSvgWidth) + 20 };
const width_svg_inner = width_svg – margin.left – margin.right;
const height_svg_inner = height_svg – margin.top – margin.bottom;

const svg_resultats = d3
.select(clone)
.select(« svg.svg_resultats »)
.attr(« viewBox », `0 0 ${width_svg} ${height_svg}`)
.style(« width », width_svg)
.style(« height », height_svg)
.append(« g »)
.attr(« transform », `translate(${margin.left}, ${margin.top})`);

const svg_changement_de_vote = d3
.select(clone)
.select(« svg.svg_changement_de_vote »)
.attr(« viewBox », `0 0 ${width_svg} ${height_svg}`)
.style(« width », width_svg)
.style(« height », height_svg)
.append(« g »)
.attr(« transform », `translate(${margin.left}, ${margin.top})`);

const svg_abstentionnistes = d3
.select(clone)
.select(« svg.svg_abstentionnistes »)
.attr(« viewBox », `0 0 ${width_svg} ${height_svg}`)
.style(« width », width_svg)
.style(« height », height_svg)
.append(« g »)
.attr(« transform », `translate(${margin.left}, ${margin.top})`);

let sorted_data = data.toSorted((a, b) => b.value + b.value_change – (a.value + a.value_change));

const scaleY = d3
.scaleBand()
.range([0, height_svg_inner])
.domain(sorted_data.map((d) => d.name))
.padding(0.4);
const scaleX = d3
.scaleLinear()
.range([0, width_svg_inner])
.domain([0, d3.max(data, (d) => d.value)]);

function update_svg(type_update, svg_to_update) {
if (data.length === 2) {
data[0].value_change = 0;
data[1].value_change = 0;
} else {
if (type_update === « abstention ») {
data[0].value_change = 0;
data[1].value_change = analysedCityData.voix_abstentionnistes_pres;
data[2].value_change = -analysedCityData.voix_abstentionnistes_pres;
} else if (type_update === « voix-pres ») {
data[0].value_change = -analysedCityData.voix_pres;
data[1].value_change = analysedCityData.voix_pres;
data[2].value_change = 0;
} else if (type_update === « reset ») {
data[0].value_change = 0;
data[1].value_change = 0;
data[2].value_change = 0;
}
}

sorted_data = data.toSorted((a, b) => b.value + b.value_change – (a.value + a.value_change));
scaleY.domain(sorted_data.map((d) => d.name));

// Transition Rect
svg_to_update
.selectAll(« rect.bar »)
.data(sorted_data)
.enter()
.append(« rect »)
.classed(« bar », true)
.attr(« x », 0)
.attr(« y », (d) => scaleY(d.name))
.attr(« width », (d) => {
return scaleX(d.value);
})
.attr(« height », scaleY.bandwidth())
.attr(« fill », (d) => d.color)
.attr(« fill-opacity », 0.8);

svg_to_update
.selectAll(« rect.bar-change »)
.data(sorted_data)
.enter()
.append(« rect »)
.classed(« bar-change », true)
.attr(« x », (d) => scaleX(d.value))
.attr(« y », (d) => scaleY(d.name))
.style(« fill », « none »)
.attr(« width », 0)
.attr(« height », scaleY.bandwidth());

svg_to_update
.selectAll(« text.bar-value »)
.data(sorted_data)
.enter()
.append(« text »)
.classed(« bar-value », true)
.attr(« x », (d) => scaleX(d.value) / 2)
.attr(« y », (d) => scaleY(d.name) + scaleY.bandwidth() / 2)
.text((d) => d.value.toLocaleString())
.attr(« text-anchor », « middle »)
.attr(« fill », « white »);

svg_to_update
.selectAll(« text.bar-value-change »)
.data(sorted_data)
.enter()
.append(« text »)
.classed(« bar-value-change », true)
.style(« display », « none »)
.attr(« x », (d) => scaleX(d.value))
.attr(« y », (d) => scaleY(d.name) + scaleY.bandwidth() / 2);

const yAxis = d3.axisLeft(scaleY).tickSizeOuter(0);
const yAxisGroup = svg_to_update
.append(« g »)
// .attr(« transform », `translate(${margin.left}, 0)`)
.call(yAxis);

// Transition Bar Value Change
svg_to_update
.selectAll(« rect.bar-change »)
.transition()
.duration(1000)
.attr(« x », (d) => {
return d.value_change >= 0 ? scaleX(d.value) : scaleX(d.value + d.value_change);
})
.attr(« width », (d) => scaleX(Math.abs(d.value_change)))
.attr(« stroke », (d) => (d.value_change >= 0 ? « green » : « red »))
.attr(« fill-opacity », 0.8)
.attr(« y », (d) => scaleY(d.name));

// Transition Texts
svg_to_update
.selectAll(« text.bar-value »)
.transition()
.duration(1000)
.attr(« x », (d) => scaleX(d.value + d.value_change) / 2)
.attr(« y », (d) => scaleY(d.name) + scaleY.bandwidth() / 2);

// Transition Text Value Change
svg_to_update
.selectAll(« text.bar-value-change »)
.transition()
.duration(1000)
.text((d) => (d.value_change > 0 ? `+ ` : `- `) + Math.abs(d.value_change).toLocaleString())
.style(« display », (d) => (d.value_change ? null : « none »))
.attr(« x », (d) => (d.value_change >= 0 ? scaleX(d.value + d.value_change) : scaleX(d.value)))
.attr(« y », (d) => scaleY(d.name) + scaleY.bandwidth() / 2)
.attr(« fill », (d) => (d.value_change >= 0 ? « green » : « red »));
}

update_svg(« reset », svg_resultats);
if (analysedCityData.type !== « une-seule-liste ») {
update_svg(« voix-pres », svg_changement_de_vote);
update_svg(« abstention », svg_abstentionnistes);
}
}

function fetchAndRender(codeInsee) {
container.classList.add(« loading »);
fetchCity(codeInsee).then((data) => {
if (!data) {
container.querySelector(« .resultats »).innerHTML = mdm_html(`

Nous n’avons pas pu trouver les données pour cette commune.

`);
container.classList.remove(« loading »);
return;
}
renderResults(data);
container.classList.remove(« loading »);
});
}

container.querySelectorAll(« .interresting-cities »).forEach((element) => {
element.addEventListener(« click », (e) => {
e.preventDefault();
fetchAndRender(e.target.dataset.codeInsee);
container.querySelector(« .lmui-search__field »).value = e.target.textContent;
});
});

fetchAndRender(« 69123 »); // Lyon par défault

Valentin Regnault et Manon Romain

L’espace des contributions est réservé aux abonnés.

Abonnez-vous pour accéder à cet espace d’échange et contribuer à la discussion.

S’abonner
Share. Facebook Twitter LinkedIn Telegram WhatsApp Email

Continue de lire

« Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »

« Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »

Simplification de la vie économique : le gouvernement au secours des ZFE pour mieux sauver son projet de loi

Simplification de la vie économique : le gouvernement au secours des ZFE pour mieux sauver son projet de loi

Retraites : les résultats de l’Agirc-Arrco toujours en excédent, malgré un net recul

Retraites : les résultats de l’Agirc-Arrco toujours en excédent, malgré un net recul

Emmanuel Macron répond à Donald Trump, qui accuse la France de ne pas coopérer avec les Etats-unis dans le conflit qui les oppose à l’Iran

Emmanuel Macron répond à Donald Trump, qui accuse la France de ne pas coopérer avec les Etats-unis dans le conflit qui les oppose à l’Iran

Présidentielle : chez LR, une tribune répond à une autre au sujet du candidat unique de la droite et du centre

Présidentielle : chez LR, une tribune répond à une autre au sujet du candidat unique de la droite et du centre

La « nouvelle France », une expression banale transformée en grenade dégoupillée

La « nouvelle France », une expression banale transformée en grenade dégoupillée

Marc Lazar, historien : « La grande force du national-populisme est de répondre à une colère sociale par un récit mobilisateur »

Marc Lazar, historien : « La grande force du national-populisme est de répondre à une colère sociale par un récit mobilisateur »

Le gouvernement entend accélérer l’électrification et une sortie progressive des hydrocarbures

Le gouvernement entend accélérer l’électrification et une sortie progressive des hydrocarbures

Municipales à Toulouse : la Ville rose reste bel et bien un bastion de droite

Municipales à Toulouse : la Ville rose reste bel et bien un bastion de droite

Add A Comment
Leave A Reply Cancel Reply

Choix de l'éditeur

Demis Hassabis, PDG de Google DeepMind, l’« optimiste prudent »

Demis Hassabis, PDG de Google DeepMind, l’« optimiste prudent »

avril 1, 2026
« Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »

« Faire croire que toucher de l’argent public exclut toute forme d’autonomie de pensée alimente un ressentiment dangereux »

avril 1, 2026
« L’équilibre et la stabilité ne sont plus que des souvenirs pour les pays arabes du Golfe »

« L’équilibre et la stabilité ne sont plus que des souvenirs pour les pays arabes du Golfe »

avril 1, 2026
La compagnie ferroviaire espagnole Renfe suspend son projet de liaison à grande vitesse entre l’Espagne et Paris

La compagnie ferroviaire espagnole Renfe suspend son projet de liaison à grande vitesse entre l’Espagne et Paris

avril 1, 2026

Derniers Articles

Les organes de la discorde scientifique depuis le XVIIIᵉ siècle

Les organes de la discorde scientifique depuis le XVIIIᵉ siècle

avril 1, 2026
L’histoire folle d’une nouvelle pièce de Molière, coécrite avec l’IA

L’histoire folle d’une nouvelle pièce de Molière, coécrite avec l’IA

avril 1, 2026
comment un traitement révolutionnaire est déployé en Eswatini, le pays le plus touché au monde

comment un traitement révolutionnaire est déployé en Eswatini, le pays le plus touché au monde

avril 1, 2026
Facebook X (Twitter) Pinterest TikTok Instagram
© 2026 Français Fois. Tous droits réservés.
  • Politique de Confidentialité
  • Termes et Conditions
  • Contacter

Type above and press Enter to search. Press Esc to cancel.