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: