D3: skip Nullwerte in Liniendiagramm mit mehreren Linien
Ich habe ein dynamisches array zu zeigen, ein Liniendiagramm mit mehreren Linien. Beispiel:
var data =
[[{x:2005, y:100}, {x:2007, y:96.5}, {x:2009, y:100.3}, {x:2011, y:102.3}],
[{x:2005, y:100}, {x:2007, y:105}, {x:2009, y:102}, {x:2011, y:104}]]
Diesem Teil meiner script zeichnet die Linien:
graph.selectAll("path.line")
.data(data)
.enter().append("path")
.attr("class", "line")
.style("stroke", function(d, i) { return d3.rgb(z(i)); })
.style("stroke-width", 2)
.attr("d", d3.svg.line()
.y(function(d) { return y(d.y); })
.x(function(d,i) { return x(i); }));
(Das Skript, das ich verwende, ist basierend auf http://cgit.drupalcode.org/d3/tree/libraries/d3.linegraph/linegraph.js)
Mein problem: das Daten-array ist dynamisch, ich weiß nicht vorher, was drin ist. Manchmal ist der y-Wert für das Jahr 2005 null sein:
var data =
[[{x:2005, y:100}, {x:2007, y:96.5}, {x:2009, y:100.3}, {x:2011, y:102.3}],
[{x:2005, y:null}, {x:2007, y:105}, {x:2009, y:102}, {x:2011, y:104}]]
Wie kann ich die zweite Zeile ignorieren, das erste Objekt und beginnen bei 2007?
Basierend auf Antwort 1 das ist, was ich jetzt habe, noch mit der ganzen Linie:
data =
[[{x:2005, y:100}, {x:2007, y:96.5}, {x:2009, y:100.3}, {x:2011, y:102.3}],
[{x:2005, y:null}, {x:2007, y:105}, {x:2009, y:102}, {x:2011, y:104}]];
var validatedInput = function(inptArray) {
return inptArray.filter(function(obj) {
return obj.y != null;
});
};
graph.selectAll("path.line")
.data(data, validatedInput)
.enter().append("path")
.attr("class", "line")
.style("stroke", function(d, i) { return d3.rgb(z(i)); })
.style("stroke-width", 2)
.attr("d", d3.svg.line()
.y(function(d) { return y(d.y); })
.x(function(d,i) { return x(i); }));
Du musst angemeldet sein, um einen Kommentar abzugeben.
Am Ende löste ich dieses selber, auf die Lösung hier. Der trick ist, entfernen Sie das leere Werte so spät wie möglich, so dass die Positionen aller Werte (Punkte) auf der Leinwand erhalten bleiben.
Dieser Arbeit wird für leere Werte am Anfang und Ende einer Zeile.
defined()
Werke und lassen Sie weglassen leeren Werte?Dies sollte es tun:
wäre es besser zu schreiben es so:
Oder können Sie einfach formatieren Sie Ihre Daten-Objekt, bevor es zu D3: