lineChart = data => {
const hover = vl
.selectSingle()
.encodings('x')
.on('mouseover')
.nearest(true)
.empty('none');
const line = vl.markLine().encode(
vl.x().fieldT('date'),
vl
.y()
.fieldQ('close')
.scale({ type: 'log', base: 10 }),
vl
.color()
.fieldN('symbol')
.legend(null)
);
const base = line.transform(vl.filter(hover));
const label = { align: 'left', dx: 5, dy: -5 };
const white = { stroke: 'white', strokeWidth: 2 };
return vl
.data(data)
.layer(
line.select(
vl
.selectInterval()
.bind('scales')
.encodings('x')
),
vl
.markRule({ color: '#aaa' })
.transform(vl.filter(hover))
.encode(vl.x().fieldT('date')),
line
.markCircle()
.select(hover)
.encode(
vl
.opacity()
.if(hover, vl.value(1))
.value(0)
),
base.markText(label, white).encode(vl.text().fieldQ('close')),
base.markText(label).encode(vl.text().fieldQ('close'))
)
.width(width - 50)
.height(400)
.render();
}