Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Tutorial: a bubble chart with D3</title>
  <script src="https://d3js.org/d3.v7.min.js"></script>
</head>
  
<body>
  <h1>A bubble chart with D3</h1>
</body>
</html>
 
//D3 margin convention, see https://bl.ocks.org/mbostock/3019563
const margin = {top: 20, right: 10, bottom: 20, left: 10};
const width = 800 - margin.left - margin.right;
const height = 600 - margin.top - margin.bottom;
const g = d3.select("body").append("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
  .append("g")
  .attr("transform", `translate(${margin.left},${margin.top})`);
const dataUrl = "https://docs.google.com/spreadsheets/d/e/2PACX-1vRpzJYEJv9hkwx3ZLaimdpZmrHK_hyPGXlAho_BaM2p_qsWRygvorbif1KvyPP_k0mt6j04vIL0ANUT/pub?gid=43247911&single=true&output=csv"
d3.csv(dataUrl).then(data => {
  data.forEach(function(d){
    d.income = +d.income;
    d.lifeexp = +d.lifeexp;
    d.population = +d.population;
  })
  const maxpop = d3.max(data, d => d.population);
  
  data.sort(function(a,b){
    return b.population - a.population;
  });
  
  const xScale = d3.scaleLog()
    .domain([400,100000])
    .range([0,800]);
  const yScale = d3.scaleLinear()
    .domain([15,90])
    .range([600,0])
  const rScale = d3.scaleSqrt()
    .domain([0, maxpop])
    .range([0,50]);
  
  const colors =["#FF265C", "#FFE700", "#4ED7E9", "#70ED02", "purple"];
  const colorScale = d3.scaleOrdinal()
    .domain(["Asia", "Europe", "Africa", "Americas", "Oceania"])
    .range(colors);
  
  g.selectAll("circle")
    .data(data)
    .join("circle")
    .attr("cx", (d) => xScale(d.income))
    .attr("cy", (d) => yScale(d.lifeexp))
    .attr("r", (d) => rScale(d.population))
    .style("fill", (d) => colorScale(d.continent))
    .style("stroke", "black")
    .style("stroke-width", 1)
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
maartenzampro
0viewers