function XYPlane2() {
const defaultPointRenderer = () => {
return (selection) => {
selection.append("circle")
.attr("fill", "black")
.attr("r", 1)
}
}
const defaultTransition = d3.transition()
.duration(200)
.ease(d3.easeLinear);
let pointRenderer = defaultPointRenderer
let t = defaultTransition
function chart(selection) {
selection.selectAll("g")
.data((inheritedData, index, arrayOfNodes) => {
return inheritedData
})
.join(
enter => {
return enter.append("g")
.call(enter => enter
.transition(t)
.attr("transform", d => `translate(${d.x}, ${d.y})`)
)
},
update => {
return update
.call(update => update
.transition(t)
.attr("transform", d => `translate(${d.x}, ${d.y})`)
)
},
exit => {
return exit
.call(exit => exit.transition(t).attr("transform", d => `translate(${width}, ${width})`).remove())
}
)
.call(pointRenderer())
}
chart.pointRenderer = (newRenderer) => {
pointRenderer = newRenderer
return chart
}
return chart
}