<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
border: 0;
}
body {
background: #ffd;
}
</style>
</head>
<body>
<svg width="200px" height="100vh"></svg>
<script>
var svg = d3.select('svg');
var rect = svg.node().getBoundingClientRect();
var r = function() {
return 20 + Math.random() * 50;
};
var update = function(data) {
console.log('update');
var count = data.length;
var min = Math.min.apply(null, data),
max = Math.max.apply(null, data);
var dataScale = d3.scaleLinear().domain([min, max]).range([0, 100]);
var percentToPixelScale = d3.scaleLinear().domain([0, 100]).range([0, rect.height]);
var getR = function(d, i) {
return d;
};
var getY = function(d, i) {
return percentToPixelScale((i + 1) * (100 / (count + 1)))
};
// elements to update
var u = svg.selectAll('circle')
.data(data);
// on exit remove
u.exit().remove();
// elements to add
enter = u.enter()
.append('circle')
.attr("cy", getY)
.attr("fill", "red");
enter
.merge(u)
.transition()
.ease(d3.easeExp)
.attr('r', getR)
.attr('cx', r)
.attr("cy", getY)
.duration(600);
}
var dataSet = [10, 23, 15];
update(dataSet);
setInterval(function() {
dataSet.push(r() / 4);
update(dataSet);
}, 1000);
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
border: 0;
}
body {
background: #ffd;
}
</style>
</head>
<body>
<svg width="100%" height="99vh"></svg>
<script>
var svg = d3.select('svg');
var path = svg.append("path");
path.attr("fill", "none")
.attr("stroke", "steelblue")
.attr("stroke-linejoin", "round")
.attr("stroke-linecap", "round")
.attr("stroke-width", 2);
var rect = svg.node().getBoundingClientRect();
var r = function() {
return 20 + Math.random() * 50;
};
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
var update = function(data) {
var count = data.length;
var dataValues = data.map(function (d) {
return d.value;
});
var min = Math.min.apply(null, dataValues),
max = Math.max.apply(null, dataValues);
var dataScale = d3.scaleLinear().domain([min, max]).range([0, 100]);
var percentToPixelXScale = d3.scaleLinear().domain([0, 100]).range([0, rect.width]);
var percentToPixelYScale = d3.scaleLinear().domain([0, 100]).range([0, rect.height]);
var getX = function (d, i) {
var v = (i + 1) * (100 / (count + 1));
return percentToPixelXScale(v);
};
var getY = function(d, i) {
var v = 100 - dataScale(d.value);
return percentToPixelYScale(v)
};
var getR = function(d, i) {
return d.value;
};
// elements to update
var u = svg.selectAll('circle')
.data(data);
// on exit remove
u.exit().remove();
var line = d3.line()
//.data(data)
.x(getX)
.y(getY)
.curve(d3.curveMonotoneX); // apply smoothing to the line
// // elements to add
// enter = u.enter()
// .append('circle')
// .attr("cy", getY)
// .attr("fill", function (d, i) {
// return d.color;
// });
//u.enter()
path
.datum(data)
//.transition()
//.ease(d3.easeLinear)
.attr("d", line)
//.duration(10);
//.attr("transform", null)
//.transition()
//.attr("transform", "translate(" + getX(0, -1) + ")");
// enter
// .merge(u)
// .transition()
// .ease(d3.easeLinear)
// .attr('r', Math.sqrt(count / 2))
// .attr('cx', getX)
// .attr("cy", getY)
// .duration(400);
}
var len = 200;
var dataSet = new Array(len).fill().map(() => { return { value: 0, color: '#000000' }; });
update(dataSet);
var oldVal = 0;
setInterval(function() {
dataSet.push({ value: oldVal , color: getRandomColor() });
oldVal += r() - 45;
if (dataSet.length > len) {
dataSet.shift();
}
update(dataSet);
}, 100);
</script>
</body>
</html>
102200cookie-checkD3 v4 update Enter/Exit Example Javascript