9951 explained code solutions for 126 technologies


javascript-d3How do I create a radar chart with d3.js?


Creating a radar chart with d3.js is relatively straightforward. First, you will need to include the d3 library in your HTML file:

<script src="https://d3js.org/d3.v5.min.js"></script>

Next, you will need to create the SVG element and set its size:

var svg = d3.select('body').append('svg')
    .attr('width', width)
    .attr('height', height);

Third, you will need to create the scales for the chart. This will depend on the data you are plotting. For example, if you are plotting a chart with two variables, you might use something like this:

var x = d3.scaleLinear()
    .domain([0, d3.max(data, function(d) { return d[0]; })])
    .range([0, width]);

var y = d3.scaleLinear()
    .domain([0, d3.max(data, function(d) { return d[1]; })])
    .range([height, 0]);

Fourth, you will need to create the axes for the chart. This will depend on the data you are plotting. For example, if you are plotting a chart with two variables, you might use something like this:

var xAxis = d3.axisBottom(x);

var yAxis = d3.axisLeft(y);

svg.append("g")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis);

svg.append("g")
    .call(yAxis);

Fifth, you will need to create the line for the chart. This will depend on the data you are plotting. For example, if you are plotting a chart with two variables, you might use something like this:

var line = d3.line()
    .x(function(d) { return x(d[0]); })
    .y(function(d) { return y(d[1]); });

svg.append("path")
    .datum(data)
    .attr("fill", "none")
    .attr("stroke", "steelblue")
    .attr("stroke-linejoin", "round")
    .attr("stroke-linecap", "round")
    .attr("stroke-width", 1.5)
    .attr("d", line);

Finally, you will need to add labels to the chart. This will depend on the data you are plotting. For example, if you are plotting a chart with two variables, you might use something like this:

svg.selectAll(".dot")
    .data(data)
    .enter().append("text")
    .attr("fill", "black")
    .attr("font-size", 10)
    .attr("x", function(d) { return x(d[0]); })
    .attr("y", function(d) { return y(d[1]); })
    .text(function(d) { return d[0] + ", " + d[1]; });

The above code will create a basic radar chart with d3.js.

Parts of the code:

  • Include the d3 library: <script src="https://d3js.org/d3.v5.min.js"></script>
  • Create the SVG element and set its size:
    var svg = d3.select('body').append('svg')
      .attr('width', width)
      .attr('height', height);
  • Create the scales for the chart:

    var x = d3.scaleLinear()
      .domain([0, d3.max(data, function(d) { return d[0]; })])
      .range([0, width]);
    
    var y = d3.scaleLinear()
      .domain([0, d3.max(data, function(d) { return d[1]; })])
      .range([height, 0]);
  • Create the axes for the chart:

    var xAxis = d3.axisBottom(x);
    
    var yAxis = d3.axisLeft(y);
    
    svg.append("g")
      .attr("transform", "translate(0," + height + ")")
      .call(xAxis);
    
    svg.append("g")
      .call(yAxis);
  • Create the line for the chart:

    var line = d3.line()
      .x(function(d) { return x(d[0]); })
      .y(function(d) { return y(d[1]); });
    
    svg.append("path")
      .datum(data)
      .attr("fill", "none")
      .attr("stroke", "steelblue")
      .attr("stroke-linejoin", "round")
      .attr("stroke-linecap", "round")
      .attr("stroke-width", 1.5)
      .attr("d", line);
  • Add labels to the chart:
    svg.selectAll(".dot")
      .data(data)
      .enter().append("text")
      .attr("fill", "black")
      .attr("font-size", 10)
      .attr("x", function(d) { return x(d[0]); })
      .attr("y", function(d) { return y(d[1]); })
      .text(function(d) { return d[0] + ", " + d[1]; });

Helpful links

Edit this code on GitHub