{const bike = vl.data(df)
.layer(
vl.markLine({stroke: 'Purple', strokeWidth: 3, opacity: 0.5, interpolate: 'monotone'})
.transform(vl.filter('datum.year === 2020'))
.encode(
vl.x().fieldO('week').axis({labelAngle: 0}).title('Week').axis(false),
vl.y().fieldQ('bikes_14counters').title('Bike Riders on the 14 Train'),
vl.color().fieldN('year'),
),
vl.markLine({stroke: 'Orange', strokeWidth: 3, opacity: 0.5, interpolate: 'monotone'})
.transform(vl.filter('datum.year === 2019'))
.encode(
vl.x().fieldO('week').axis({labelAngle: 0}).title('Week').axis(false),
vl.y().fieldQ('bikes_14counters').title('Bike Riders on the 14 Train'),
vl.color().fieldN('year').scale({domain: ['2019', '2020'], range: ['Orange', 'Purple'], shape: ['circle', 'triangle-up']}).legend({orient: 'top-right'}),
),
vl.markPoint({fill: 'Orange', size: 60, filled: true})
.transform(vl.filter('datum.year === 2019'))
.encode(
vl.x().fieldO('week'),
vl.y().fieldQ('bikes_14counters'),
vl.color().fieldN('year').legend(true),
vl.tooltip(['year','bikes_14counters', 'week','starting_from'])
),
vl.markPoint({size: 60, filled: true, shape: 'triangle-up', fill: 'Purple'})
.transform(vl.filter('datum.year === 2020'))
.encode(
vl.x().fieldO('week'),
vl.y().fieldQ('bikes_14counters'),
vl.color().fieldN('year').legend(),
vl.tooltip(['year','bikes_14counters', 'week','starting_from'])
),
vl.markRule({stroke: 'firebrick', strokeWidth: 2})
.transform(vl.filter('datum.week === 12'))
.encode(
vl.x().fieldO('week')
)
)
.title('Bike Riders')
.width(700)
.height(200)
const peds = vl.data(df)
.layer(
vl.markLine({stroke: 'Purple', strokeWidth: 3, opacity: 0.5, interpolate: 'monotone'})
.transform(vl.filter('datum.year === 2020'))
.encode(
vl.x().fieldO('week').axis({labelAngle: 0}).title('Week'),
vl.y().fieldQ('pedestrians_14counters').title('Pedestrians on the 14 Train'),
vl.color().fieldN('year'),
),
vl.markLine({stroke: 'Orange', strokeWidth: 3, opacity: 0.5, interpolate: 'monotone'})
.transform(vl.filter('datum.year === 2019'))
.encode(
vl.x().fieldO('week').axis({labelAngle: 0}).title('Week'),
vl.y().fieldQ('pedestrians_14counters').title('Pedestrians on the 14 Train'),
vl.color().fieldN('year'),
vl.tooltip().fieldO('year'),
vl.tooltip().fieldQ('pedestrians_14counters'),
vl.tooltip().fieldO('week')
),
vl.markPoint({fill: 'Orange', size: 60, filled: true})
.transform(vl.filter('datum.year === 2019'))
.encode(
vl.x().fieldO('week'),
vl.y().fieldQ('pedestrians_14counters'),
vl.color().fieldN('year').legend(true),
vl.tooltip(['year','pedestrians_14counters', 'week','starting_from'])
),
vl.markPoint({size: 60, filled: true, shape: 'triangle-up', fill: 'Purple'})
.transform(vl.filter('datum.year === 2020'))
.encode(
vl.x().fieldO('week'),
vl.y().fieldQ('pedestrians_14counters'),
vl.color().fieldN('year').legend(),
vl.tooltip(['year','pedestrians_14counters', 'week','starting_from'])
),
vl.markRule({stroke: 'firebrick', strokeWidth: 2})
.transform(vl.filter('datum.week === 12'))
.encode(
vl.x().fieldO('week')
)
)
.title('Pedestrians')
.width(700)
.height(200)
return vl.vconcat(bike, peds).title('Comparison of Number of Bike Riders/Pedestrians on Trails in 2019-20').render();
}