import {palette, plotStyle} from "/_extensions/felipelmc/plenario/ojs/notes.js"
pal = palette()
nomes = new Map([
["Fatia de candidatos", "Proporção de candidatos"],
["m0 (repete a anterior)", "m0 (repete a anterior)"]
])
ordem = ["Média do treino", "m0 (repete a anterior)", "Média histórica do partido",
"Proporção de candidatos", "m1", "m2", "m1 fechado", "m2 fechado"]
regras = (await FileAttachment("dados/tbl_reguas.csv").csv({typed: true}))
.map(d => ({...d, nome: nomes.get(d.Regra) ?? d.Regra,
tipo: d.Regra.startsWith("m1") || d.Regra.startsWith("m2") ? "modelo" : "benchmark"}))
virgula = v => v.toFixed(2).replace(".", ",")
viewof metrica = Inputs.radio(["MAE", "RMSE"], {value: "MAE", label: "métrica (p.p.)"})
Plot.plot({
style: plotStyle, width: 1150, height: 420, marginLeft: 330, marginRight: 80, marginBottom: 50,
x: {domain: [0, 10], label: `${metrica} em 2024 (p.p.)`, labelAnchor: "center", labelOffset: 42, grid: true},
y: {domain: ordem, label: null},
color: {domain: ["benchmark", "modelo"], range: [pal.ink3, pal.accent]},
marks: [
Plot.ruleY(regras, {y: "nome", x1: d => d[`${metrica}_inf`], x2: d => d[`${metrica}_sup`],
stroke: "tipo", strokeWidth: 3, strokeOpacity: 0.35}),
Plot.dot(regras, {y: "nome", x: metrica, fill: "tipo", r: 7}),
Plot.text(regras, {y: "nome", x: d => d[`${metrica}_sup`], text: d => virgula(d[metrica]),
dx: 10, textAnchor: "start", fill: pal.ink2})
]
})