one = {
let svgmargin = {top: shapeSize/1.5, right: shapeSize/2, bottom: shapeSize/2, left: shapeSize/2},
svgwidth = width - svgmargin.left - svgmargin.right,
height = (shapeSize * rows) + margin * (rows +1) + svgmargin.top + svgmargin.bottom;
const svg = DOM.svg(svgwidth, height-(shapeSize*2))
let colorscale = d3.scaleOrdinal(colors);
let revcolors = d3.scaleOrdinal(colors.slice(0).reverse());
d3.select(svg).append("defs").append("clipPath").attr("id","rectMask").append("rect").attr("x",0).attr("y",0).attr("width",svgwidth).attr("height",height-(shapeSize*2));
d3.select(svg)
.append("g")
.attr("clip-path", "url(#rectMask)")
.selectAll("circle")
.data(shapePos)
.enter().append("circle")
.attr("r", shape => shapeSize)
.attr("cx", shape => `${shape.p1x}`)
.attr("cy", shape => `${shape.p1y}`)
.attr("stroke", (d,i) => colorscale(i))
.attr("fill", (d,i) => "none")
.attr("stroke-dasharray", 6)
return svg
}