2012-03-06 10 views
16

Usando jQuery Flot, puedo pasar un valor de null al mecanismo de trazado para que no dibuje nada en el trazado. Vea cómo se suprimen los registros faltantes:Pasar valores nulos a la ruta SVG (usando d3.js) para suprimir datos faltantes

enter image description here

Estoy buscando a trasladarse a d3js, para que pueda tener más profundo control de bajo nivel de los gráficos usando SVG. Sin embargo, todavía tengo que descubrir cómo hacer el mismo proceso de supresión de registros faltantes. La imagen a continuación es un intento de hacer esto, utilizando un valor de 0 en lugar de null (donde se rompe el paquete d3). Aquí hay un código para darle una idea de cómo me produjo el siguiente gráfico:

var line = d3.svg.line() 
    .x(function(d) { 
     var date = new Date(d[0]); 
     return x(date); 
    }) 
    .y(function(d) { 
     var height = d[1]; 
     if (no_record_exists) { 
      return y(0); 
     } 
     return y(height) + 0.5; 
    }); 

enter image description here

Miré hacia arriba el elemento SVG path en la red de desarrolladores de Mozilla, y descubrí que hay una Comando MoveTo, M x y, que solo mueve el "lápiz" a algún punto sin dibujar nada. ¿Se ha implementado esto en el paquete d3js, de modo que no tendré que crear varios elementos path cada vez que encuentro un registro faltante?

+2

Tenga en cuenta que el uso de MoveTo sería grande para tener huecos en una línea simple (solo recorrido), pero no funcionaría con el relleno verde que muestra arriba. Para eso, necesita formas distintas o comandos de ruta superfluos para llegar a la línea de base, superar la cantidad correcta y volver a subir. – Phrogz

+0

Me encantan los gráficos, pero vea también: http://stackoverflow.com/questions/15259444/drawing-non-continuous-lines-with-d3 –

Respuesta

27

La función defined de d3.svg.line() es la manera de hacer esto

Digamos que queremos incluir un descanso en la tabla si y es nulo:

line.defined(function(d) { return d.y!=null; }) 
+0

@Kit, marque esto como respuesta. – Amit

+0

¡Esto es genial gracias! –

18
+1

Gracias, voy a buscar esto. De hecho, acabo de plantear un problema en Github con respecto a esto :) Sin embargo, no estoy muy seguro de cómo seguir adelante :(https://github.com/mbostock/d3/issues/583 – Kit

+2

¿Qué es d3.split? No hay nada en esa página Probablemente también debería actualizar su respuesta, ya que http://stackoverflow.com/questions/15259444/drawing-non-continuous-lines-with-d3 ahora muestra cómo hacerlo. –