vl.data(data)
.transform(
vl.window({ op: 'mean', field: 'daily_deaths', as: 't_deaths' }).frame([-7, 0]),
vl.window({ op: 'mean', field: 'daily_cases', as: 't_cases' }).frame([-7, 0])
)
.encode(
vl.x().fieldT('date').axis({ grid: false, tickCount: 8, title: false })
)
.layer(
vl.markLine({ interpolate: 'step', size: 1, opacity: .2 })
.encode(vl.y().fieldQ('daily_cases')),
vl.markLine({ size: 1, strokeDash: [4, 2] })
.encode(vl.y().fieldQ('t_cases').axis(false)),
vl.markLine({ interpolate: 'step', size: 1, color: 'red', opacity: .2 })
.encode(vl.y().fieldQ('daily_deaths')),
vl.markLine({ color: 'red', size: 1, strokeDash: [4, 2] })
.encode(vl.y().fieldQ('t_deaths').axis(false)),
)
.resolve({ scale: { y: 'independent' } })
.width(width)
.autosize({ type: 'fit-x', contains: 'padding' })
.render()