Ich versuche, ein Liniendiagramm mit d3.js zu erstellen, die eine CSV-Eingabe und konvertiert es in ein Datenarray mit die Schlüssel x1, x2, Klasse. Unter Verwendung dieser Daten erstelle ich eine Perzeptron-Entscheidungsgrenze unter Verwendung von Gewichtungen und der Gradientenfunktion, die nach jeder Iteration aktualisiert und übergeht. Das funktioniert gut. Womit ich mich abmühen muss, ist die Fläche unter der Kurve, da ich möchte, dass positive Werte blau und negativ rot sind. Die Bereiche bewegen sich mit der Linie korrekt, aber etwas stimmt nicht mit den X-Werten, da die Breite des Bereichs nicht den gesamten Graphen abdeckt. Es deckt ungefähr die Hälfte ab und beginnt ungefähr ein Viertel des Weges hinein (ich kann kein Bild posten). Hier ist der Code, den ich für all diese Elemente verwende, aber ich denke ich missverstand die Art, wie der Bereich verwendet wird x Attribut;d3.js Bereich() unter einer Linie mit Gradientenfunktion- x Wert nur für einen Teil des Diagramms
lineFunction = d3.svg.line()
.x(function(d) { return widthScale(d.x1); })
.y(function(d) { return heightScale(((-d.x1 * w1) - w0)/w2); })
.interpolate("linear");
var area = d3.svg.area()
.x(function(d) { return widthScale(d.x1); })
.y0(xPos)
.y1(function(d) { return heightScale(((-d.x1 * w1) - w0)/w2); })
.interpolate("linear");
var area2 = d3.svg.area()
.x(function(d) { return widthScale(d.x1); })
.y0(heightAlter)
.y1(function(d) { return heightScale(((-d.x1 * w1) - w0)/w2); })
.interpolate("linear");
lineGraph = canvas.append("path")
.attr("d", lineFunction(lineData))
.attr("class", "autoLine")
.attr("stroke", "black")
.attr("stroke-width", 1)
.attr("fill", "none")
.attr("clip-path", "url(#clip)");
shadedArea = canvas.append("path")
.data([data])
.attr("d", area)
.attr("class", "area")
.attr("clip-path", "url(#clip)");
shadedAreaPos = canvas.append("path")
.data([data])
.attr("d", area2)
.attr("class", "area2")
.attr("clip-path", "url(#clip)");
Jede Hilfe würde sehr geschätzt werden.