{
const selectTimeBrush = vl.selectInterval().encodings("x").resolve('intersect');
const selectTimeBrushCat = vl.selectInterval().encodings("x").resolve('intersect');
const timeSelector = vl.or(
selectTimeBrush.empty(false),
selectTimeBrushCat.empty(false)
);
const selectType = vl
.selectPoint("selected_pt")
.on("click")
.fields("Offense")
.clear("dblclick")
.toggle(true);
const selectCat = vl
.selectPoint("selected_cat")
.on("click")
.fields("Offense Category")
.bind("legend")
.clear("dblclick")
.toggle(true);
const crimeTrends = vl
.markLine({ strokeWidth: 2 })
.data(vanCrime2)
.transform(vl.filter(selectType || selectTimeBrushCat))
//.transform(vl.filter(selectTimeBrushCat))
//.width(600)
.params(selectTimeBrush)
.title("VNon-Violent Crime Trends by Type Summer 2016")
.encode(
vl.x().fieldT("Date"),
vl.detail().fieldN("Offense"),
vl
.y()
.fieldQ("*")
.count()
.scale({ domain: [0, 120] }),
vl.color().fieldN("Offense Category").scale({ range: OffenseCatColors }),
vl.opacity().if(selectType, vl.value(0.99)).value(0.1) // if point selected, use opacity 0.99, otherwise 0.1
);
const crimeTrendsCat = vl
.markLine({ strokeWidth: 2 })
.data(vanCrime2)
// .transform(vl.filter(selectTimeBrush))
.transform(vl.filter(selectType || selectTimeBrush))
.params(selectTimeBrushCat)
.title("Non-Violent Crime Trends by Category Summer 2016")
.encode(
vl.x().fieldT("Date"),
vl
.y()
.fieldQ("*")
.count()
.scale({ domain: [0, 120] }),
vl.color().fieldN("Offense Category").scale({ range: OffenseCatColors }),
vl.opacity().if(selectCat, vl.value(0.99)).value(0.1) // if point selected, use opacity 0.7, otherwise 0.1
);
const crimeBars = vl
.markBar()
//.width(600)
.data(vanCrime2)
.params(selectCat, selectType)
.title("Vancouver Non-Violent Crime Total Offenses Summer 2016")
.transform(vl.filter(selectTimeBrush))
.encode(
vl.y().fieldN("Offense").scale({ domain: OffenseTypes }),
vl
.x()
.fieldQ("*")
.aggregate("count")
.scale({ domain: [0, 4400] }),
vl.color().fieldN("Offense Category").scale({ range: OffenseCatColors }),
// .if(selectedBar, vl.fieldN("Offense Category"))
// .value("grey"), // if point selected, use default color, otherwise grey
vl.opacity().if(selectType, vl.value(0.99)).value(0.1) // if point selected, use opacity 0.7, otherwise 0.1
);
// const base = crimeBars.transform(vl.filter(timeSelector));
return vl
.vconcat(crimeBars, vl.hconcat(crimeTrends, crimeTrendsCat))
.render();
}