t1ListRidgeline = (hypothese, tour, row = 25) => {
let yStep = 15
return Plot.plot({
caption: html`
densité de probabilité d'intentions de vote au ${ tour } des élections régionales 2021<br>
données : <a href="https://twitter.com/nsppolls">NspPolls</a> · <a href="${ sondage.lien }">${ sondage.nom_institut }</a>`,
height: hypothese.tetes_liste.length * row,
marginLeft: 150,
x: {
domain: [0, 50],
label: 'intentions de vote (%)',
grid: true,
ticks: 10,
},
y:{
axis: false,
domain: [0, hypothese.tetes_liste.length * row]
},
marks: [
Plot.ruleX([5], { stroke: 'red', strokeOpacity: 0.3}),
Plot.ruleX([10], { stroke: 'green', strokeOpacity: 0.3}),
hypothese.tetes_liste.slice().sort((a,b)=>b.intentions - a.intentions).map((liste,i) => {
let N = listN(liste.intentions/100, hypothese.sous_echantillon)
let y0 = i*yStep
return [
Plot.area(d3.range(0, 5, 0.1), { x1: d => d, x2: d => d, y1: d => y0, y2: d => y0+N.pdf(d/100), fill: 'red', fillOpacity: 0.5 }),
Plot.area(d3.range(5, 10, 0.1), { x1: d => d, x2: d => d, y1: d => y0, y2: d => y0+N.pdf(d/100), fill: '#999', fillOpacity: 0.5 }),
Plot.area(d3.range(10,100, 0.1), { x1: d => d, x2: d => d, y1: d => y0, y2: d => y0+N.pdf(d/100), fill: 'green', fillOpacity: 0.5}),
Plot.text([[i, liste.tete_liste]], {
text: d => d[1],
textAnchor: 'end',
dy: 0,
y: d => y0,
x: d => N.inv(0.001) * 100
})
]
})
]
})
}