{
const colors = {
domain: ['IllegalDumping', 'BuildingMaintenance', 'Electrical', 'StreetSweeping', 'RoadRepair','VegetationControl','Graffiti','Drainage','StreetLights','Survey'],
range: ['Blue','DarkOrange','Crimson','CornflowerBlue','DarkSeaGreen','Gold','DarkMagenta','DeepPink','Peru','Silver']
}
const shapes = {
domain: ['IllegalDumping', 'BuildingMaintenance', 'Electrical', 'StreetSweeping', 'RoadRepair','VegetationControl','Graffiti','Drainage','StreetLights','Survey'],
}
const basic1 = vl.markLine({strokewidth:5,opacity:0.5,interpolate:'monotone'})
.data(stats)
.encode(
vl.y().fieldQ('NumRequests')
.title("Number of Requests"),
vl.x().fieldO('Year')
.axis({ lableAngle: 0}),
vl.color().fieldN('ProblemType').scale(colors).legend({orient:"top-left"}),
);
const basic2 = vl.markPoint({size:100,opacity:1,filled:true})
.data(stats)
.encode(
vl.x().fieldT('Year')
.axis({ labelAngle: 0}),
vl.y().fieldQ('NumRequests'),
vl.color().fieldN('ProblemType').scale(colors),
vl.shape().fieldN('ProblemType').scale(shapes)
);
return vl.layer(basic1, basic2).title({text:'By Year', size:20, type:'Tahoma'}).height(600).width(300).render();
}