programs_matrix = {
const svg = d3.select(DOM.svg(width, height))
.style("width", "100%")
.style("height", "auto")
.style("font", "1rem verdana");
const make_class = (item) => item.toLowerCase().split(' ').join('_').split('-').join('')
const make_id = d => `coords_${Math.floor(x(d.xval))}_${Math.floor(y(d.yval))}`
const rects = svg.append("g")
.selectAll("g")
.data(data)
.enter().append("g")
.attr("class", (d, i) => `${i} bar`)
.selectAll("g")
.data(d => {
const innerData = [];
for (const donor in d) {
if (donor !== "index") {
innerData.push({
xval: d.index,
yval: donor,
count: d[donor]
});
}
}
console.log(innerData)
return innerData;
})
.enter().append("g");
rects.append("rect")
.attr("x", d => x(d.xval))
.attr("y", d => y(d.yval))
.attr("width", x.bandwidth())
.attr("height", y.bandwidth())
.style("fill", d => d.count === 0 ? "lightgray" : color(d.count))
.append("title")
.text(d => d.count)
svg.append("text")
.attr("x", width / 2 + 10)
.attr("y", height - margin.bottom/1.5)
.style("text-anchor", "middle")
.text("Recipients");
svg.append("text")
.attr("transform", "rotate(-90)")
.attr("x", -height / 2)
.attr("y", margin.left-80)
.style("text-anchor", "middle")
.text("Donors");
svg.append("g")
.call(xAxis);
svg.append("g")
.call(yAxis);
return svg.node();
}