Alle:ausblenden einige Teile eineine <path> erzeugen mit einer Kurve Interpolation
Ich versuche, einen benutzerdefinierten Liniengenerator wie D3 Linie() zu machen, aber mit der Fähigkeit, Liniensegmente Stil anpassen, wenn Daten fehlen (wie (gestrichelte Linie verwenden)
Eine Sache, die ich nicht umsetzen konnte, ist ihre .interpolate() - Funktion. Die Mathematik scheint kompliziert zu sein, was ich versuche zu tun, ist einfach vorhandene D3-Linien-Funktion zu verwenden, um diese fortlaufenden Segmente zu zeichnen und sie mit der gestrichelten Linie zu verbinden, aber ich kann nicht herausfinden, wie interpolierte Linie zu generieren?
Im folgenden Codebeispiel, kann u die gestrichelte Linie sehen nicht genau die durchgezogene Linie überlappen:
var data = [];
for(var i=0; i<20; i++){
if(i>0 && (i%4==0)){
data.push(null);
}else {
data.push({x:i, y:Math.random(i)})
}
}
var x = d3.scale.linear();
var y = d3.scale.linear();
x.domain([0, 19])
.range([10, 390])
y.domain([0, 1])
.range([10, 360]);
var svg = d3.select("body")
.append("svg")
.attr("width", 400)
.attr("height", 400);
var lg = svg.append("g")
.classed("lineGroup", true);
var xg = svg.append("g")
.classed("xaxis", true)
.attr("transform", function(){
return "translate(0, 380)";
});
var line = d3.svg.line()
.interpolate("monotone")
.x(function(d) { return x(d.x); })
.y(function(d) { return y(d.y); });
line.defined(function(d) { return d!=null; });
lg.append("path")
.classed("shadowline", true)
.attr("d", function(){
return line(data.filter(function(d){return d!=null;}));
})
.style("fill", "none")
.style("stroke", "steelblue")
.style("stroke-width", "3px")
.attr("stroke-dasharray", "5,5");
lg.append("path")
.attr("d", function(){
return line(data);
})
.style("fill", "none")
.style("stroke", "steelblue")
.style("stroke-width", "3px");
lg.selectAll("circle")
.data(data.filter(function(d){return d!=null;}))
.enter()
.append("circle")
.style("fill", "orange")
.style("stroke", "red")
.style("stroke-width", "3px")
.attr("r",5)
.attr("cx", function(d){return x(d.x);})
.attr("cy", function(d){return y(d.y);})
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
xg.call(xAxis);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
Hilfe? Danke
können Sie ein Beispiel einrichten .. wo ist Ihre Datenpunkte und wie die Zeile aussehen sollte.Wenn sollte es gestrichelt werden. Derzeit ist Ihre Frage sehr allgemein gehalten. – Cyril
@Cyril THanks, ich habe ein konkretes Beispiel hinzugefügt, was ich möchte ist, dass diese durchgezogene Linie Kurve interpoliert, um die gestrichelte Linie zu überlappen – Kuan