chart = {
const brush = vl.selectInterval().resolve('global');
const base = vl.markCircle({tooltip: true})
.encode(
vl.x().fieldQ('Rotten_Tomatoes_Rating'),
vl.y().fieldQ('IMDB_Rating'),
vl.color().value("gray").if(brush, vl.value("steelblue"))
)
.width(220)
.height(200);
const xBinned = vl.x().fieldQ('Rotten_Tomatoes_Rating').scale({domain:[0,100]}).bin(true);
const yBinned = vl.y().scale({domain:[0,10]}).fieldQ('IMDB_Rating').bin(true);
const baseBinned = base.encode(
xBinned,
yBinned,
);
return vl.concat(
base.select(brush).title("Raw data (drag to filter)"),
vl.layer(
baseBinned.encode(
vl.color().value("gray"),
vl.size().count()
),
baseBinned.transform(vl.filter(brush))
.encode(
vl.color().value("steelblue"),
vl.size().count()
)
).title("Density with circles"),
vl.layer(
baseBinned.markBar({tooltip: true}).encode(
vl.color().count(),
vl.opacity().value(0)
),
baseBinned.transform(vl.filter(brush)).markBar().encode(
vl.color().count()
)
).title("Density with rectangles")
)
.data(movies)
.columns(3)
.render();
}