{
let ACT_data = scores.map(e => e.ACT);
let hist_object = ACT_data.reduce((accumulator, current) => {
if (accumulator[current] == undefined) {
accumulator[current] = 1;
} else {
accumulator[current] += 1;
}
return accumulator;
}, {});
let hist_list = [];
for (let key in hist_object) {
hist_list.push({ score: parseInt(key), count: hist_object[key] });
}
console.log(" hist list", hist_list);
let margin = 50;
let scalex = d3
.scaleBand()
.domain(hist_list.map(e => e.score))
.range([0, width - 2 * margin])
.padding(0.1);
let scaley = d3
.scaleLinear()
.domain([0, d3.extent(hist_list.map(e => e.count))[1]])
.range([height - 2 * margin, 10]);
console.log("scale y domain", scaley.domain());
let svg = d3.create('svg');
svg.attr('height', height);
svg.attr('width', width);
let g = svg.append('g');
g.attr('transform', `translate(${margin},${margin})`);
g.selectAll('rect')
.data(hist_list)
.join('rect')
.attr('x', d => scalex(d.score))
.attr('y', d => scaley(d.count))
.attr("height", d => height - 2 * margin - scaley(d.count))
.attr("width", scalex.bandwidth())
.attr('fill', 'black');
let left_axis_g = svg.append("g");
left_axis_g.attr("transform", `translate(${margin - 10},${margin})`);
let left_axis = d3.axisLeft().scale(scaley);
left_axis_g.call(left_axis);
let bottom_axis_g = svg.append("g");
bottom_axis_g.attr(
"transform",
`translate(${margin},${height - margin + 10})`
);
let bottom_axis = d3.axisBottom().scale(scalex);
bottom_axis_g.call(bottom_axis);
return svg.node();
}