D3.js pie.sort() Function

The pie.sort() function in D3.js is used to sort the data objects based on different properties of data. The comparator function can be used to define the basis on which the sorting would be done.

Syntax:

pie.sort( compare )

Parameters: This function accepts a single parameter as mentioned above and described below:

  • compare: This takes a comparison function to sort data objects on different properties. It is an optional parameter.

Return Values: This function does not return anything.

Below example illustrates the pie.sort() function in D3.js:



Example 1:

HTML

filter_none

edit
close

play_arrow

link
brightness_4
code

<!DOCTYPE html>
<html>
<head>
  <script src=
  </script>
</head>
<body>
  <div style="width:300px;
              height:300px;">
    <center>
      <h1 style="color:green">
        GeeksforGeeks
      </h1>
      <h2>
        pie.sort()
      </h2>
      <h3>
        When given data array 
        consists objects
      </h3>
    </center>
    <svg width="300" height="250">
    </svg>
    <button>Click Me</button>
  </div>
  <script>
    // Data to be added in the pie chart
    var data = [
      { "value": 11, "property": "dp1" },
      { "value": 12, "property": "bp2" },
      { "value": 32, "property": "ap3" },
      { "value": 14, "property": "np4" },
      { "value": 5, "property": "fp5" },
      { "value": 16, "property": "gp6" }
    ]
  
    // Selecting SVG using d3.select()
    var svg = d3.select("svg");
  
    // Creating Pie generator
    var pie = d3.pie()
      // Using the pie.value() Function
      .value((d) => { return d.value })
      (data);
  
    function updatePie() {
      // Creating Pie generator
      var pie = 0
      var pie = d3.pie()
        
        .value((d) => { return d.value })
  
        // Using the pie.sort() Function
        .sort(function (a, b) {
          return b.property
            .localeCompare(a.property);
        })
        (data);
      // Creating arc
      var arc = d3.arc()
        .innerRadius(50)
        .outerRadius(100);
  
      let g = svg.append("g")
        .attr("transform", "translate(150,120)");
  
      // Grouping different arcs
      var arcs = g.selectAll("arc")
        .data(pie)
        .enter()
        .append("g");
  
      // Appending path 
      arcs.append("path")
        .attr("fill", (data, i) => {
          return d3.schemeSet2[i];
        })
        .attr("d", arc);
  
      arcs.append("text")
        .attr("transform", (d) => {
          return "translate(" +
            arc.centroid(d) + ")";
        })
        .text(function (d) {
          return d.value;
        });
    }
    let btn = document.querySelector("button")
    btn.addEventListener("click", updatePie);
  
    // Creating arc
    var arc = d3.arc()
      .innerRadius(50)
      .outerRadius(100);
  
    let g = svg.append("g")
      .attr("transform", "translate(150,120)");
  
    // Grouping different arcs
    var arcs = g.selectAll("arc")
      .data(pie)
      .enter()
      .append("g");
  
    // Appending path 
    arcs.append("path")
      .attr("fill", (data, i) => {
        return d3.schemeSet2[i];
      })
      .attr("d", arc);
  
    arcs.append("text")
      .attr("transform", (d) => {
        return "translate(" +
          arc.centroid(d) + ")";
      })
      .text(function (d) {
        return d.value;
      });
  </script>
</body>
</html>

chevron_right


Output:

  • Before clicking the button:

  • After clicking the button:

Example 2:

HTML

filter_none

edit
close

play_arrow

link
brightness_4
code

<!DOCTYPE html>
<html>
<head>
  <script src=
  </script>
</head>
<body>
  <div style="width:300px;
              height:300px;">
    <center>
      <h1 style="color:green">
        GeeksforGeeks
      </h1>
      <h2>
        pie.sort()
      </h2>
      <h3>Sorting values: </h3>
    </center>
    <svg width="300" height="250">
    </svg>
    <button>Click Me</button>
  </div>
  <script>
    // Data to be added in the pie chart
    var data = [
      { "value": 11, "property": "dp1" },
      { "value": 12, "property": "bp2" },
      { "value": 32, "property": "ap3" },
      { "value": 14, "property": "np4" },
      { "value": 5, "property": "fp5" },
      { "value": 16, "property": "gp6" }
    ]
  
    // Selecting SVG using d3.select()
    var svg = d3.select("svg");
  
    // Creating Pie generator
    var pie = d3.pie()
      // Use of pie.value() Function
      .value((d) => { return d.value })
      (data);
  
    function upadtePie() {
      // Creating Pie generator
      var pie = 0
      var pie = d3.pie()
        .value((d) => { return d.value })
  
        // Using the pie.sort() Function
        .sort(function (a, b) {
          return b.value > a.value;
        })
        (data);
      // Creating arc
      var arc = d3.arc()
        .innerRadius(50)
        .outerRadius(100);
  
      let g = svg.append("g")
        .attr("transform", "translate(150,120)");
  
      // Grouping different arcs
      var arcs = g.selectAll("arc")
        .data(pie)
        .enter()
        .append("g");
  
      // Appending path 
      arcs.append("path")
        .attr("fill", (data, i) => {
          return d3.schemeSet2[i];
        })
        .attr("d", arc);
  
      arcs.append("text")
        .attr("transform", (d) => {
          return "translate(" +
            arc.centroid(d) + ")";
        })
        .text(function (d) {
          return d.value;
        });
    }
    let btn = document.querySelector("button")
    btn.addEventListener("click", upadtePie);
    // Creating arc
    var arc = d3.arc()
      .innerRadius(50)
      .outerRadius(100);
  
    let g = svg.append("g")
      .attr("transform", "translate(150,120)");
  
    // Grouping different arcs
    var arcs = g.selectAll("arc")
      .data(pie)
      .enter()
      .append("g");
  
    // Appending path 
    arcs.append("path")
      .attr("fill", (data, i) => {
        return d3.schemeSet2[i];
      })
      .attr("d", arc);
  
    arcs.append("text")
      .attr("transform", (d) => {
        return "translate(" +
          arc.centroid(d) + ")";
      })
      .text(function (d) {
        return d.value;
      });
  </script>
</body>
</html>

chevron_right


Output:

  • Before clicking the button:

  • After clicking the button:

full-stack-img




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.