{
const larg = 500;
const haut = 400;
const padding = 20;
const svg = d3.create('svg')
.attr("width", larg)
.attr("height", haut);
const datatest = [
[14, 20, 1], [880, 80, 4], [250, 50, 2], [100, 33, 1], [330, 85, 5],
[410, 12, 3], [475, 44, 2], [25, 67, 4], [85, 21, 5], [220, 88, 2]];
const xScale = d3.scaleLinear()
.domain([0, d3.max(datatest, function(d) { return d[0]; })])
.range([padding, larg - padding * 2]);
const yScale = d3.scaleLinear()
.domain([0, d3.max(datatest, function(d) { return d[1]; })])
.range([haut - padding , padding]);
const rScale = d3.scaleLinear()
.domain([0, d3.max(datatest, function(d) { return Math.sqrt(d[2]); })])
.range([1, 10]);
const cScale = d3.scaleLinear()
.domain([0, d3.max(datatest, function(d) { return d[2]; })])
.range([0,0.6]);
svg.selectAll("circle")
.data(datatest)
.enter()
.append("circle")
.attr("cx", function(d) {
return xScale(d[0]);
})
.attr("cy", function(d) {
return yScale(d[1]);
})
.attr("r", function(d) {
return rScale(Math.sqrt(d[2]));
})
.attr("fill", function(d) {
return d3.interpolateYlGnBu(cScale(d[2]))
})
.attr("stroke-width", "1")
.attr("stroke", "grey");
svg.selectAll("text")
.data(datatest)
.enter()
.append("text")
.text(function(d) {
return d[2];
})
.attr("x", function(d){
return xScale(d[0]) + rScale(d[2])/2+4;
})
.attr("y", function(d) {
return yScale(d[1]) - rScale(d[2])/2+4;
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "grey");
const xAxis = d3.axisBottom()
.scale(xScale)
.ticks(8);
const yAxis = d3.axisLeft()
.scale(yScale)
.ticks(6);
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + (haut - padding) + ")")
.call(xAxis);
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + padding + ",0)")
.call(yAxis);
return svg.node();
}