test123 = {
let max_d = d3.max(data, record => parseFloat(record.d));
let max_e = d3.max(data, record => parseFloat(record.e));
let max_y_scale_value_for_d = d3.max([100, max_d]);
let max_y_scale_value_for_e = d3.max([100, max_e]);
const mpg = vl.markLine()
.data(data)
.transform([{ "calculate": "toNumber(datum.d)", "as": "d2" }, { "calculate": "toNumber(datum.e)", "as": "e2" }])
.encode(
vl.x()
.fieldN('student_name')
.title('students')
.axis({ labels: false, ticks: false })
.sort('-y'),
vl.y()
.fieldQ('d2')
.scale({ "domain": [0, max_y_scale_value_for_d] })
.title('D = Total watched / Video duration'),
vl.tooltip([{ 'field': 'student_name', 'title': 'Sudent Name' }
, { 'field': 'd', 'title': 'D' }
, { 'field': 'e', 'title': 'E' }])
).width(500).height(250);
const hp = mpg.markLine({ color: '#227a15' })
.encode(
vl.y()
.fieldQ('e2')
.scale({ "domain": [0, max_y_scale_value_for_e] })
.title('E = Watched till / Video duration')
);
const plot = vl.vconcat(
vl.layer(mpg, mpg.markCircle()),
vl.layer(hp, hp.markCircle({ color: '#227a15' }))
)
return plot.render();
}