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); }));
Schreibe einen Kommentar