var w = 500,
h = 300;
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var data = [{
x: 10,
y: 50
}, {
x: 20,
y: 70
}, {
x: 30,
y: 20
}, {
x: 40,
y: 60
}, {
x: 50,
y: 40
}, {
x: 60,
y: null
}, {
x: 70,
y: null
}, {
x: 80,
y: null
}, {
x: 90,
y: 90
}, {
x: 100,
y: 20
}];
var xScale = d3.scaleLinear()
.domain([0, 100])
.range([30, w - 20]);
var yScale = d3.scaleLinear()
.domain([0, 100])
.range([h - 20, 20]);
var counter;
var line = d3.line()
.x((d, i) => {
if (data[i].y) {
return xScale(d.x)
} else {
return xScale(data[counter].x)
}
})
.y((d, i) => {
if (d.y) {
counter = i;
return yScale(d.y)
} else {
return yScale(data[counter].y)
}
});
svg.append("path")
.attr("d", line(data))
.attr("stroke-width", 2)
.attr("stroke", "teal")
.attr("fill", "none");
var xAxis = d3.axisBottom(xScale);
var yAxis = d3.axisLeft(yScale);
svg.append("g")
.attr("transform", "translate(0," + (h - 20) + ")")
.call(xAxis);
svg.append("g")
.attr("transform", "translate(30,0)")
.call(yAxis);
<script src="https://d3js.org/d3.v4.min.js"></script>