Open In App

D3.js curveMonotoneX() Method

Last Updated : 09 Sep, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

The d3.curveMonotoneX interpolator assumes that the data is sorted according to the x coordinates otherwise sort the data accordingly. This curve method produces a cubic spline that preserves monotonicity in y, assuming monotonicity in x.

Syntax:

d3.curveMonotoneX()

Parameters: This method does not accept any parameters.

Return Value: This method does not return any value.

Example 1: 




<!DOCTYPE html>
<html>
  
<head>
    <meta charset="utf-8">
    <script src=
    </script>
</head>
  
<body>
    <h1 style="text-align:center; color:green;">
        GeeksforGeeks
    </h1>
  
    <center>
        <svg id="gfg" width="250" height="250"></svg>
    </center>
  
    <script>
        var data = [
          {x: 0, y: 0},
          {x: 1, y: 3},
          {x: 2, y: 15},
          {x: 5, y: 1},
          {x: 6, y: 15},
          {x: 7, y: 5},
          {x: 8, y: 19}];
  
        var xScale = d3.scaleLinear()
          .domain([0, 8]).range([25, 200]);
        var yScale = d3.scaleLinear()
          .domain([0, 20]).range([200, 25]);
  
        var line = d3.line()
          .x((d) => xScale(d.x))
          .y((d) => yScale(d.y))
          .curve(d3.curveMonotoneX);
  
        d3.select("#gfg")
          .append("path")
          .attr("d", line(data))
          .attr("fill", "none")
          .attr("stroke", "green");
    </script>
</body>
</html>


Output:

Example 2: Sorting the unsorted points by the x-axis then rendering the curve.




<!DOCTYPE html>
<html>
  
<head>
    <meta charset="utf-8">
    <script src=
    </script>
</head>
  
<body>
    <h1 style="text-align:center; color:green;">
        GeeksforGeeks
    </h1>
  
    <center>
        <svg id="gfg" width="250" height="200"></svg>
    </center>
  
    <script>
        var points = [
          {xpoint: 75,  ypoint: 150},
          {xpoint: 25,  ypoint: 5},
          {xpoint: 150, ypoint: 115},
          {xpoint: 100, ypoint: 5},
          {xpoint: 200, ypoint: 150}];
  
        // Sorting the points by x axis
        points.sort((a, b) => a.xpoint - b.xpoint);
  
        var Gen = d3.line()
          .x((p) => p.xpoint)
          .y((p) => p.ypoint)
          .curve(d3.curveMonotoneX);
  
        d3.select("#gfg")
          .append("path")
          .attr("d", Gen(points))
          .attr("fill", "none")
          .attr("stroke", "green");
  
    </script>
</body>
</html>


Output:



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads