index.html
<!DOCTYPE html>
<head>
<meta charset="utf-8">
</head>
<style>
.viz-biPartite rect{
shape-rendering:crispEdges;
}
.viz-biPartite-mainBar{
fill-opacity: 0;
stroke-width: 0.5px;
stroke: rgb(0, 0, 0);
stroke-opacity: 0;
}
</style>
<body>
<svg width="960" height="700">
<g transform="translate(250,50)"></g>
</svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="//vizjs.org/viz.v1.3.0.min.js"></script>
<script>
var data=[
{group:'A',subgroup:'X', count:2}
,{group:'A',subgroup:'Y', count:3}
,{group:'B',subgroup:'X', count:5}
,{group:'B',subgroup:'Y', count:8}
,{group:'C',subgroup:'X', count:2}
,{group:'C',subgroup:'Y', count:9}
];
var bP = viz.biPartite()
.keyPrimary(d=>d.group)
.keySecondary(d=>d.subgroup)
.value(d=>d.count)
.data(data)
d3.select("g").call(bP)
d3.select(self.frameElement).style("height", "700px");
</script>