JSFiddle - React, Tailwind, and code Playground
HTML
<script data-require="d3@4.0.0" data-semver="4.0.0" src="https://d3js.org/d3.v4.min.js"></script>
<body>
<svg width="300" height="300"></svg>
</body>
JavaScript
var svg = d3.select("svg"),
margin = {top: 40, right: 40, bottom: 40, left: 40},
width = svg.attr("width") - margin.left - margin.right,
height = svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var xScale = d3.scaleLinear().domain([0, 10]).range([0, width]),
yScale = d3.scaleLinear().domain([0, 10]).range([height, 0]);
var xAxis = d3.axisBottom().scale(xScale).ticks(12, d3.format(",d")),
yAxis = d3.axisLeft().scale(yScale);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis);
// inital draw
var dot = svg.append("g")
.attr("class", "dots")
.selectAll(".dot")
.data(dataForKey(1))
.enter().append("circle")
.attr("class", "dot")
.style("fill", "#000000")
.attr("cx", function(d) { return xScale(d.x); })
.attr("cy", function(d) { return yScale(d.y); })
.attr("r", function(d) { return 5; });
// updated Data
next(1);
function dataForKey(key)
{
return [{x:key, y:key}];
}
function next(keyIndex)
{
if (keyIndex < 10)
{
d3.selectAll(".dot")
.data(dataForKey(keyIndex))
.transition().duration(3000)
.attr("cx", function(d) { return xScale(d.x); })
.attr("cy", function(d) { return yScale(d.y); })
.on("end", function(d){
next(keyIndex + 1)
});
}
}