waveChart = function(wStart, wLen, offArr, maxY, opt_param) {
const options = {log: 'linear', smoothCases: 7, ...opt_param};
const stats1 = stats.slice(wStart, wLen);
const refArr = gauss_blur(stats.map(a => a['cases.confirmed.todate']), options.smoothCases).slice(wStart, wLen);
const patients1 = patients.slice(wStart, wLen);
const smooth = 7;
const config = [{
name: "cases",
colour: "blue",
data: doData(stats1.map((a, ix) => ({...a, "cases.confirmed.todate": refArr[ix]})), refArr, 'cases.confirmed.todate', smooth, offArr[0]),
textoff: 100
},{
name: "c.w_h",
colour: "magenta",
data: doData(stats1, refArr, 'cases.weighted.h.to_date', smooth, offArr[1]),
textoff: 120
},{
name: "h.in",
colour: "orange",
data: doData(stats1, refArr, 'state.in_hospital.todate', smooth, offArr[2]),
textoff: 140
},{
name: "dec",
colour: "black",
data: doData(stats1, refArr, 'state.deceased.todate', smooth, offArr[3]),
textoff: 160
},{
name: "h.out",
colour: "green",
data: doData(stats1, refArr, 'state.out_of_hospital.todate', smooth, offArr[4]),
textoff: 180
},{
name: "icu.in",
colour: "red",
data: doData(patients1, refArr, 'state.icu.todate', smooth, offArr[5]),
textoff: 200
}];
const chrt = create_chart(maxY, stats1, options.log);
config.forEach((c, idx) => {
const days = offArr[idx].length > 1 ? offArr[idx][0] : offArr[idx];
if (!Number.isNaN(offArr[idx])) {
line_with_text(chrt, {
...c,
name: c.name + ' ('+days+'d)'
})
}
});
return chrt.svg.node();
}