matrixChart = {
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height]);
var chart = svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
var graph = dataMatrix.sort(function (a, b) {
if(a.bloodType !== b.bloodType){
if(a.bloodType > b.bloodType) return 1;
else return -1;
}else{
if(a.donor_bloodType >= b.donor_bloodType) return 1;
else return -1;
}
});
var row = svg.selectAll('g.row')
.data(graph)
.join('g')
.attr('class', 'row')
.attr('transform', function (d, i) { return 'translate(0,' + x(i) + ')'; })
.each(makeRow)
function makeRow(d, i) {
const rowData = d;
var cell = d3.select(this).selectAll('rect')
.data(graph)
.join('rect')
.attr('x', (d, i) => x(i))
.attr('width', x.bandwidth())
.attr('height', x.bandwidth())
.style('fill-opacity', (d,i) => opacity(rowData.connections[graph[i].id]))
.style('fill', (d,i) => {
if (rowData.connections[graph[i].id] > 0 && rowData.bloodType === d.bloodType) {
return colorScale(rowData.bloodType);
} else if (rowData.connections[graph[i].id] > 0) {
return '#555';
} else {
return '#ccc';
}
})
}
row.append('text')
.attr('class', 'label')
.attr('x', margin.left - 4)
.attr('y', x.bandwidth() / 2)
.attr('dy', '0.32em')
.attr('font-size', '10px')
.attr('text-anchor', 'end')
.text((d,i) => d.id + "," + graph[i].outdegree+ "," + graph[i].bloodType+ "," + graph[i].donor_bloodType);
var column = svg.selectAll('g.column')
.data(graph)
.join('g')
.attr('class', 'column')
.attr('transform', function(d, i) { return 'rotate(-90, '+margin.top+', '+margin.left+')'; })
.append('text')
.attr('class', 'label')
.attr('x', margin.top + 4)
.attr('y', (d,i) => x(i) + x.bandwidth() / 2)
.attr('dy', '0.32em')
.attr('font-size', '10px')
.text((d,i) => d.id + "," + graph[i].indegree+ "," + graph[i].bloodType+ "," + graph[i].donor_bloodType)
return svg.node();
}