2017-09-12 1 views
0

Ich muss folgende D3 Code in index.html:Wie passe ich eine Polynomkurve mit D3 an?

<!DOCTYPE html> 
<svg width="960" height="500"></svg> 
<script src="https://d3js.org/d3.v4.min.js"></script> 
<script> 

var svg = d3.select("svg"), 
    margin = {top: 60, right: 20, bottom: 40, left: 50}, 
    width = +svg.attr("width") - margin.left - margin.right, 
    height = +svg.attr("height") - margin.top - margin.bottom, 
    g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

var x = d3.scaleLinear() 
    .rangeRound([0, width]); 

var y = d3.scaleLinear() 
    .rangeRound([height, 0]); 

var line = d3.line() 
    .x(function(d) { return x(d.error); }) 
    .y(function(d) { return y(d.close); }); 

d3.tsv("data.tsv", function(d) { 
    d.error = d.error; 
    d.close = +d.close; 
    return d; 
}, function(error, data) { 
    if (error) throw error; 

    x.domain(d3.extent(data, function(d) { return d.error; })); 
    y.domain(d3.extent(data, function(d) { return d.close; })); 

    g.append("g") 
     .attr("transform", "translate(0," + height + ")") 
     .call(d3.axisBottom(x)) 
     .select(".domain") 
     .remove(); 

    g.append("g") 
     .call(d3.axisLeft(y)) 
     .append("text") 
     .attr("fill", "#000") 
     .attr("transform", "rotate(-90)") 
     .attr("y", 6) 
     .attr("dy", "0.71em") 
     .attr("text-anchor", "end") 
     .text("Error (%)"); 

    g.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); 
}); 

</script> 

Die data.tsv sieht wie folgt aus:

error close 
100 93.24 
200 -85.35 
300 53.89 
400 -18.57 
500 198.1 
600 -8.4 
700 98.623 
800 9.89 
900 118.56 
1000 98.71 

Ich möchte eine Kurve an die Datenpunkte passen. Im Moment verbindet dieser Code nur die Datenpunkte mit geraden Linien. Es sieht wie folgt aus:

enter image description here

Ich frage mich, wie kann ich stattdessen eine Polynomkennlinie passen.

Antwort

Verwandte Themen