{
const airlineScale = {
domain: [
'United',
'Delta',
'American',
'Southwest',
'Hawaiian',
'Frontier'
],
range: ["#e08484", "#cee084", "#84e0a9", "#84a9e0", "#ce84e0", "#A0BC7B"]
};
const hover = vl.selectSingle('Hover')
.on('mouseover')
.clear('mouseout')
.nearest(true);
const totalFlightsChart = vl.markArea()
.encode(
vl.x().fieldT('Date').axis({ title: 'Date', format: '%b' }),
vl.y().fieldQ('Total Flights').stack('zero').axis({ title: 'Total Flights' }),
vl.color().fieldN('Airline Name').scale(airlineScale).title('Airlines'),
vl.tooltip(['Date', 'Airline Name', 'Total Flights'])
)
.data(filteredData)
.width(width)
.height(500);
const percentDelayedChart = vl.markLine()
.encode(
vl.x().fieldT('Date').axis({ title: 'Date', format: '%b' }),
vl.y().fieldQ('Percent Delayed').axis({ title: 'Percent Delayed' }),
vl.color().fieldN('Airline Name').scale(airlineScale).title('Airlines'),
vl.tooltip(['Date', 'Airline Name', 'Percent Delayed'])
)
.transform(
{
window: [{ op: 'mean', field: 'Percent Delayed', as: 'Moving Average' }],
frame: [-7, 7],
groupby: ['Airline Name']
}
)
.encode(
vl.y().fieldQ('Moving Average').axis({ title: 'Moving Average Percent Delayed' })
)
.data(filteredData)
.width(width)
.height(500);
return vl.vconcat(totalFlightsChart, percentDelayedChart)
.autosize({ type: 'fit-x', contains: 'padding' })
.render();
}